Commit 5b05e58255d362086f1177b1a13f25343c74fc17

Authored by Braulio Bhavamitra
1 parent d1926f54

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
... ...