Commit 5b05e58255d362086f1177b1a13f25343c74fc17
1 parent
d1926f54
Exists in
master
and in
29 other branches
Support application controller filters
Showing
1 changed file
with
20 additions
and
12 deletions
Show diff stats
lib/noosfero/plugin.rb
@@ -88,18 +88,26 @@ class Noosfero::Plugin | @@ -88,18 +88,26 @@ class Noosfero::Plugin | ||
88 | # This is a generic method that initialize any possible filter defined by a | 88 | # This is a generic method that initialize any possible filter defined by a |
89 | # plugin to a specific controller | 89 | # plugin to a specific controller |
90 | def load_plugin_filters(plugin) | 90 | def load_plugin_filters(plugin) |
91 | - plugin_methods = plugin.instance_methods.select {|m| m.to_s.end_with?('_filters')} | ||
92 | - plugin_methods.each do |plugin_method| | ||
93 | - controller_class = plugin_method.to_s.gsub('_filters', '').camelize.constantize | ||
94 | - filters = plugin.new.send(plugin_method) | ||
95 | - filters = [filters] if !filters.kind_of?(Array) | ||
96 | - | ||
97 | - filters.each do |plugin_filter| | ||
98 | - filter_method = (plugin.name.underscore.gsub('/','_') + '_' + plugin_filter[:method_name]).to_sym | ||
99 | - controller_class.send(plugin_filter[:type], filter_method, (plugin_filter[:options] || {})) | ||
100 | - controller_class.send(:define_method, filter_method) do | ||
101 | - instance_eval(&plugin_filter[:block]) if environment.plugin_enabled?(plugin) | ||
102 | - end | 91 | + Rails.configuration.to_prepare do |
92 | + filters = plugin.new.send 'application_controller_filters' rescue [] | ||
93 | + Noosfero::Plugin.add_controller_filters ApplicationController, plugin, filters | ||
94 | + | ||
95 | + plugin_methods = plugin.instance_methods.select {|m| m.to_s.end_with?('_filters')} | ||
96 | + plugin_methods.each do |plugin_method| | ||
97 | + controller_class = plugin_method.to_s.gsub('_filters', '').camelize.constantize | ||
98 | + | ||
99 | + filters = plugin.new.send(plugin_method) | ||
100 | + Noosfero::Plugin.add_controller_filters controller_class, plugin, filters | ||
101 | + end | ||
102 | + end | ||
103 | + end | ||
104 | + | ||
105 | + def add_controller_filters controller_class, plugin, filters | ||
106 | + Array(filters).each do |plugin_filter| | ||
107 | + filter_method = (plugin.name.underscore.gsub('/','_') + '_' + plugin_filter[:method_name]).to_sym | ||
108 | + controller_class.send(plugin_filter[:type], filter_method, (plugin_filter[:options] || {})) | ||
109 | + controller_class.send(:define_method, filter_method) do | ||
110 | + instance_exec(&plugin_filter[:block]) if environment.plugin_enabled?(plugin) | ||
103 | end | 111 | end |
104 | end | 112 | end |
105 | end | 113 | end |