Um passo da dependencia entre plugins
Bráulio Bhavamitra
brauliobhavamitra at gmail.com
Fri May 10 14:33:15 BRT 2013
Oi Rodrigo,
Sobre a dependência do ambiente, acho não ser uma questão, pois do jeito
que está feito hoje o código do plugin é quase todo funcional mesmo que ele
não esteja ativado no ambiente. Ou seja, é uma questão mais estrutural e
não apenas da dependência.
De qualquer maneira, tem que ver o que significa um plugin depender de
outro. Se for pensar em depender de modelos e visões, então não tem
problema não ter o outro ativado no ambiente, pois o código ainda está
acessível, e logo os modelos e visões podem ser compartilhados.
Sobre outros problemas não superficiais realmente não consigo ver, por isso
também não os antecipo...
abraços,
bráulio
2013/5/10 Rodrigo Souto <rodrigo at colivre.coop.br>
> Tem que ver isso aí com carinho. Tem o caso de um plugin depender de um
> plugin que está desabilitado (no nível do sistema e no nível do
> ambiente). Podem ter outros problemas similares que não são visíveis
> superficialmente.
>
> Bráulio Bhavamitra escreveu isso ai:
> > 2013/5/10 Bráulio Bhavamitra <brauliobhavamitra at gmail.com>
> >
> > > Oi pessoal,
> > >
> > > Estava olhando o código e vi que o noosfero está quase pronto para
> > > implementar dependencias entre plugins. Com o carregamento do
> > > dependencies.rb, já é possível fazer um require da classe de outro
> plugin.
> > > O problema é: e se o outro plugin ainda não foi colocado no path? Aí o
> > > require inevitavelmente vai falhar.
> > >
> > > A solução para isto é simples: hoje o noosfero, depois de adicionar os
> > > paths para cada plugin, carrega a classe do plugin. Se mudar um pouco
> esta
> > > ordem, de modo que todas os paths de todos os plugins sejam
> adicionados e
> > > só depois suas respectivas classes sejam carregadas, então os plugins
> > > poderão acessar o código dos outros livremente.
> > >
> > > Isto seria bem simples de implementar: só tirar o klass(dir) do
> > > init_system e colocá-lo em outro loop.
> > >
> > Além disso tem que mudar a ordem das coisas, primeiro carregar os paths
> > depois checar as dependencias. Segue um patch que testei:
> >
> > diff --git a/lib/noosfero/plugin.rb b/lib/noosfero/plugin.rb
> > index 8d1d371..241abda 100644
> > --- a/lib/noosfero/plugin.rb
> > +++ b/lib/noosfero/plugin.rb
> > @@ -21,6 +21,20 @@ class Noosfero::Plugin
> > end.each do |dir|
> > plugin_name = File.basename(dir)
> >
> > + Rails.configuration.controller_paths << File.join(dir,
> > 'controllers')
> > + ActiveSupport::Dependencies.load_paths << File.join(dir,
> > 'controllers')
> > + controllers_folders = %w[public profile myprofile admin]
> > + controllers_folders.each do |folder|
> > + Rails.configuration.controller_paths << File.join(dir,
> > 'controllers', folder)
> > + ActiveSupport::Dependencies.load_paths << File.join(dir,
> > 'controllers', folder)
> > + end
> > + [ ActiveSupport::Dependencies.load_paths, $:].each do |path|
> > + path << File.join(dir, 'models')
> > + path << File.join(dir, 'lib')
> > + end
> > + end.each do |dir|
> > + plugin_name = File.basename(dir)
> > +
> > plugin_dependencies_ok = true
> > plugin_dependencies_file = File.join(dir, 'dependencies.rb')
> > if File.exists?(plugin_dependencies_file)
> > @@ -33,18 +47,6 @@ class Noosfero::Plugin
> > end
> >
> > if plugin_dependencies_ok
> > - Rails.configuration.controller_paths << File.join(dir,
> > 'controllers')
> > - ActiveSupport::Dependencies.load_paths << File.join(dir,
> > 'controllers')
> > - controllers_folders = %w[public profile myprofile admin]
> > - controllers_folders.each do |folder|
> > - Rails.configuration.controller_paths << File.join(dir,
> > 'controllers', folder)
> > - ActiveSupport::Dependencies.load_paths << File.join(dir,
> > 'controllers', folder)
> > - end
> > - [ ActiveSupport::Dependencies.load_paths, $:].each do |path|
> > - path << File.join(dir, 'models')
> > - path << File.join(dir, 'lib')
> > - end
> > -
> > klass(plugin_name)
> > end
> > end
> >
> >
> >
> > >
> > > Que acham?
> > >
> > > abraços,
> > > bráulio
> > >
>
> > _______________________________________________
> > Noosfero-br mailing list
> > Noosfero-br at listas.softwarelivre.org
> > http://listas.softwarelivre.org/cgi-bin/mailman/listinfo/noosfero-br
>
>
> --
> Rodrigo Souto <rodrigo at colivre.coop.br> :: 55 71 8131-7714
> Colivre - Cooperativa de Tecnologias Livres
> http://www.colivre.coop.br/
>
> _______________________________________________
> Noosfero-br mailing list
> Noosfero-br at listas.softwarelivre.org
> http://listas.softwarelivre.org/cgi-bin/mailman/listinfo/noosfero-br
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listas.softwarelivre.org/pipermail/noosfero-br/attachments/20130510/90104720/attachment.html>
More information about the Noosfero-br
mailing list