Commit 5b05e58255d362086f1177b1a13f25343c74fc17
1 parent
d1926f54
Exists in
master
and in
22 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 | ... | ... |