From 5b05e58255d362086f1177b1a13f25343c74fc17 Mon Sep 17 00:00:00 2001 From: Braulio Bhavamitra Date: Tue, 9 Sep 2014 17:48:24 -0300 Subject: [PATCH] Support application controller filters --- lib/noosfero/plugin.rb | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/lib/noosfero/plugin.rb b/lib/noosfero/plugin.rb index b371385..036b8ad 100644 --- a/lib/noosfero/plugin.rb +++ b/lib/noosfero/plugin.rb @@ -88,18 +88,26 @@ class Noosfero::Plugin # This is a generic method that initialize any possible filter defined by a # plugin to a specific controller def load_plugin_filters(plugin) - plugin_methods = plugin.instance_methods.select {|m| m.to_s.end_with?('_filters')} - plugin_methods.each do |plugin_method| - controller_class = plugin_method.to_s.gsub('_filters', '').camelize.constantize - filters = plugin.new.send(plugin_method) - filters = [filters] if !filters.kind_of?(Array) - - filters.each do |plugin_filter| - filter_method = (plugin.name.underscore.gsub('/','_') + '_' + plugin_filter[:method_name]).to_sym - controller_class.send(plugin_filter[:type], filter_method, (plugin_filter[:options] || {})) - controller_class.send(:define_method, filter_method) do - instance_eval(&plugin_filter[:block]) if environment.plugin_enabled?(plugin) - end + Rails.configuration.to_prepare do + filters = plugin.new.send 'application_controller_filters' rescue [] + Noosfero::Plugin.add_controller_filters ApplicationController, plugin, filters + + plugin_methods = plugin.instance_methods.select {|m| m.to_s.end_with?('_filters')} + plugin_methods.each do |plugin_method| + controller_class = plugin_method.to_s.gsub('_filters', '').camelize.constantize + + filters = plugin.new.send(plugin_method) + Noosfero::Plugin.add_controller_filters controller_class, plugin, filters + end + end + end + + def add_controller_filters controller_class, plugin, filters + Array(filters).each do |plugin_filter| + filter_method = (plugin.name.underscore.gsub('/','_') + '_' + plugin_filter[:method_name]).to_sym + controller_class.send(plugin_filter[:type], filter_method, (plugin_filter[:options] || {})) + controller_class.send(:define_method, filter_method) do + instance_exec(&plugin_filter[:block]) if environment.plugin_enabled?(plugin) end end end -- libgit2 0.21.2