From 0d196bd9a9436cdafa57928c50b492ccd6a19889 Mon Sep 17 00:00:00 2001 From: Braulio Bhavamitra Date: Wed, 8 May 2013 15:37:01 -0300 Subject: [PATCH] Load vendor/plugins inside noosfero plugins --- lib/noosfero/plugin.rb | 66 ++++++++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/lib/noosfero/plugin.rb b/lib/noosfero/plugin.rb index c0a8e52..415c9ef 100644 --- a/lib/noosfero/plugin.rb +++ b/lib/noosfero/plugin.rb @@ -16,38 +16,52 @@ class Noosfero::Plugin if Rails.env.test? && !enabled_plugins.include?(File.join(Rails.root, 'config', 'plugins', 'foo')) enabled_plugins << File.join(Rails.root, 'plugins', 'foo') end + enabled_plugins.select do |entry| File.directory?(entry) 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) - begin - require plugin_dependencies_file - rescue LoadError => ex - plugin_dependencies_ok = false - $stderr.puts "W: Noosfero plugin #{plugin_name} failed to load (#{ex})" - end - end + load_plugin dir + end + 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) + def load_plugin dir + plugin_name = File.basename(dir) + + plugin_dependencies_ok = true + plugin_dependencies_file = File.join(dir, 'dependencies.rb') + if File.exists?(plugin_dependencies_file) + begin + require plugin_dependencies_file + rescue LoadError => ex + plugin_dependencies_ok = false + $stderr.puts "W: Noosfero plugin #{plugin_name} failed to load (#{ex})" end end + + return unless plugin_dependencies_ok + + # add load paths + 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 + + # load vendor/plugins + Dir.glob(File.join(dir, '/vendor/plugins/*')).each do |vendor_plugin| + [ ActiveSupport::Dependencies.load_paths, $:].each{ |path| path << "#{vendor_plugin}/lib" } + init = "#{vendor_plugin}/init.rb" + require init.gsub(/.rb$/, '') if File.file? init + end + + # load class + klass(plugin_name) end def all -- libgit2 0.21.2