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 | 88 | # This is a generic method that initialize any possible filter defined by a |
89 | 89 | # plugin to a specific controller |
90 | 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 | 111 | end |
104 | 112 | end |
105 | 113 | end | ... | ... |