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