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