Commit 0d196bd9a9436cdafa57928c50b492ccd6a19889

Authored by Braulio Bhavamitra
1 parent 3bfc2f78

Load vendor/plugins inside noosfero plugins

Showing 1 changed file with 40 additions and 26 deletions   Show diff stats
lib/noosfero/plugin.rb
@@ -16,38 +16,52 @@ class Noosfero::Plugin @@ -16,38 +16,52 @@ class Noosfero::Plugin
16 if Rails.env.test? && !enabled_plugins.include?(File.join(Rails.root, 'config', 'plugins', 'foo')) 16 if Rails.env.test? && !enabled_plugins.include?(File.join(Rails.root, 'config', 'plugins', 'foo'))
17 enabled_plugins << File.join(Rails.root, 'plugins', 'foo') 17 enabled_plugins << File.join(Rails.root, 'plugins', 'foo')
18 end 18 end
  19 +
19 enabled_plugins.select do |entry| 20 enabled_plugins.select do |entry|
20 File.directory?(entry) 21 File.directory?(entry)
21 end.each do |dir| 22 end.each do |dir|
22 - plugin_name = File.basename(dir)  
23 -  
24 - plugin_dependencies_ok = true  
25 - plugin_dependencies_file = File.join(dir, 'dependencies.rb')  
26 - if File.exists?(plugin_dependencies_file)  
27 - begin  
28 - require plugin_dependencies_file  
29 - rescue LoadError => ex  
30 - plugin_dependencies_ok = false  
31 - $stderr.puts "W: Noosfero plugin #{plugin_name} failed to load (#{ex})"  
32 - end  
33 - end 23 + load_plugin dir
  24 + end
  25 + end
34 26
35 - if plugin_dependencies_ok  
36 - Rails.configuration.controller_paths << File.join(dir, 'controllers')  
37 - ActiveSupport::Dependencies.load_paths << File.join(dir, 'controllers')  
38 - controllers_folders = %w[public profile myprofile admin]  
39 - controllers_folders.each do |folder|  
40 - Rails.configuration.controller_paths << File.join(dir, 'controllers', folder)  
41 - ActiveSupport::Dependencies.load_paths << File.join(dir, 'controllers', folder)  
42 - end  
43 - [ ActiveSupport::Dependencies.load_paths, $:].each do |path|  
44 - path << File.join(dir, 'models')  
45 - path << File.join(dir, 'lib')  
46 - end  
47 -  
48 - klass(plugin_name) 27 + def load_plugin dir
  28 + plugin_name = File.basename(dir)
  29 +
  30 + plugin_dependencies_ok = true
  31 + plugin_dependencies_file = File.join(dir, 'dependencies.rb')
  32 + if File.exists?(plugin_dependencies_file)
  33 + begin
  34 + require plugin_dependencies_file
  35 + rescue LoadError => ex
  36 + plugin_dependencies_ok = false
  37 + $stderr.puts "W: Noosfero plugin #{plugin_name} failed to load (#{ex})"
49 end 38 end
50 end 39 end
  40 +
  41 + return unless plugin_dependencies_ok
  42 +
  43 + # add load paths
  44 + Rails.configuration.controller_paths << File.join(dir, 'controllers')
  45 + ActiveSupport::Dependencies.load_paths << File.join(dir, 'controllers')
  46 + controllers_folders = %w[public profile myprofile admin]
  47 + controllers_folders.each do |folder|
  48 + Rails.configuration.controller_paths << File.join(dir, 'controllers', folder)
  49 + ActiveSupport::Dependencies.load_paths << File.join(dir, 'controllers', folder)
  50 + end
  51 + [ ActiveSupport::Dependencies.load_paths, $:].each do |path|
  52 + path << File.join(dir, 'models')
  53 + path << File.join(dir, 'lib')
  54 + end
  55 +
  56 + # load vendor/plugins
  57 + Dir.glob(File.join(dir, '/vendor/plugins/*')).each do |vendor_plugin|
  58 + [ ActiveSupport::Dependencies.load_paths, $:].each{ |path| path << "#{vendor_plugin}/lib" }
  59 + init = "#{vendor_plugin}/init.rb"
  60 + require init.gsub(/.rb$/, '') if File.file? init
  61 + end
  62 +
  63 + # load class
  64 + klass(plugin_name)
51 end 65 end
52 66
53 def all 67 def all