Um passo da dependencia entre plugins

Rodrigo Souto rodrigo at colivre.coop.br
Fri May 10 13:45:54 BRT 2013


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 em 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 em listas.softwarelivre.org
> http://listas.softwarelivre.org/cgi-bin/mailman/listinfo/noosfero-br


-- 
Rodrigo Souto <rodrigo em colivre.coop.br> :: 55 71 8131-7714
Colivre - Cooperativa de Tecnologias Livres
http://www.colivre.coop.br/
-------------- Pr?xima Parte ----------
Um anexo n?o-texto foi limpo...
Nome: signature.asc
Tipo: application/pgp-signature
Tamanho: 490 bytes
Descri??o: Digital signature
URL: <http://listas.softwarelivre.org/pipermail/noosfero-br/attachments/20130510/ea8a444c/attachment.pgp>


More information about the Noosfero-br mailing list