Um passo da dependencia entre plugins
Bráulio Bhavamitra
brauliobhavamitra at gmail.com
Fri May 10 10:06:35 BRT 2013
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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listas.softwarelivre.org/pipermail/noosfero-br/attachments/20130510/37ae8bd2/attachment-0001.html>
More information about the Noosfero-br
mailing list