Commit d32bf3a4a0fd628281f086f68243c664f15e126c

Authored by Braulio Bhavamitra
1 parent 3e99a558

Revert "plugins: only call event on plugin if it is defined"

This reverts commit da84575ee29154fa4f24c9acdfce9ec16a7acb5b.
lib/noosfero/plugin/manager.rb
@@ -20,15 +20,15 @@ class Noosfero::Plugin::Manager @@ -20,15 +20,15 @@ class Noosfero::Plugin::Manager
20 # return [1,0,1,2,3] 20 # return [1,0,1,2,3]
21 # 21 #
22 def dispatch(event, *args) 22 def dispatch(event, *args)
23 - flat_map{ |plugin| result_for plugin, event, *args }.compact 23 + dispatch_without_flatten(event, *args).flatten
24 end 24 end
25 25
26 def fetch_plugins(event, *args) 26 def fetch_plugins(event, *args)
27 - map { |plugin| plugin.class if result_for plugin, event, *args }.compact.flatten 27 + map { |plugin| plugin.class if plugin.send(event, *args) }.compact.flatten
28 end 28 end
29 29
30 def dispatch_without_flatten(event, *args) 30 def dispatch_without_flatten(event, *args)
31 - map { |plugin| result_for plugin, event, *args }.compact 31 + map { |plugin| plugin.send(event, *args) }.compact
32 end 32 end
33 33
34 alias :dispatch_scopes :dispatch_without_flatten 34 alias :dispatch_scopes :dispatch_without_flatten
@@ -37,14 +37,9 @@ class Noosfero::Plugin::Manager @@ -37,14 +37,9 @@ class Noosfero::Plugin::Manager
37 Noosfero::Plugin.new.send event, *args 37 Noosfero::Plugin.new.send event, *args
38 end 38 end
39 39
40 - def result_for plugin, event, *args  
41 - method = plugin.method event  
42 - method.call *args if method.owner != Noosfero::Plugin  
43 - end  
44 -  
45 def dispatch_first(event, *args) 40 def dispatch_first(event, *args)
46 each do |plugin| 41 each do |plugin|
47 - result = result_for plugin, event, *args 42 + result = plugin.send(event, *args)
48 return result if result.present? 43 return result if result.present?
49 end 44 end
50 default_for event, *args 45 default_for event, *args
@@ -52,7 +47,7 @@ class Noosfero::Plugin::Manager @@ -52,7 +47,7 @@ class Noosfero::Plugin::Manager
52 47
53 def fetch_first_plugin(event, *args) 48 def fetch_first_plugin(event, *args)
54 each do |plugin| 49 each do |plugin|
55 - result = result_for plugin, event, *args 50 + result = plugin.send event, *args
56 return plugin.class if result.present? 51 return plugin.class if result.present?
57 end 52 end
58 nil 53 nil
@@ -60,7 +55,7 @@ class Noosfero::Plugin::Manager @@ -60,7 +55,7 @@ class Noosfero::Plugin::Manager
60 55
61 def pipeline(event, *args) 56 def pipeline(event, *args)
62 each do |plugin| 57 each do |plugin|
63 - result = result_for plugin, event, *args 58 + result = plugin.send(event, *args)
64 result = result.kind_of?(Array) ? result : [result] 59 result = result.kind_of?(Array) ? result : [result]
65 raise ArgumentError, "Pipeline broken by #{plugin.class.name} on #{event} with #{result.length} arguments instead of #{args.length}." if result.length != args.length 60 raise ArgumentError, "Pipeline broken by #{plugin.class.name} on #{event} with #{result.length} arguments instead of #{args.length}." if result.length != args.length
66 args = result 61 args = result
@@ -69,7 +64,7 @@ class Noosfero::Plugin::Manager @@ -69,7 +64,7 @@ class Noosfero::Plugin::Manager
69 end 64 end
70 65
71 def filter(property, data) 66 def filter(property, data)
72 - inject(data){ |data, plugin| data = plugin.send(property, data) } 67 + inject(data) {|data, plugin| data = plugin.send(property, data)}
73 end 68 end
74 69
75 def parse_macro(macro_name, macro, source = nil) 70 def parse_macro(macro_name, macro, source = nil)
test/unit/plugin_manager_test.rb
@@ -304,31 +304,4 @@ class PluginManagerTest < ActiveSupport::TestCase @@ -304,31 +304,4 @@ class PluginManagerTest < ActiveSupport::TestCase
304 @manager.dispatch_first :find_by_contents, :products, environment.products, 'product' 304 @manager.dispatch_first :find_by_contents, :products, environment.products, 'product'
305 end 305 end
306 306
307 - should 'not event if it is not defined by plugin' do  
308 - class Noosfero::Plugin  
309 - def never_call  
310 - nil  
311 - end  
312 - end  
313 - class Plugin1 < Noosfero::Plugin  
314 - def never_call  
315 - 'defined'  
316 - end  
317 - end  
318 - class Plugin2 < Noosfero::Plugin  
319 - end  
320 - Noosfero::Plugin.stubs(:all).returns(['PluginManagerTest::Plugin1', 'PluginManagerTest::Plugin2'])  
321 - environment.enable_plugin(Plugin1)  
322 - environment.enable_plugin(Plugin2)  
323 - plugin1 = @manager.enabled_plugins.detect{ |p| p.is_a? Plugin1 }  
324 - plugin2 = @manager.enabled_plugins.detect{ |p| p.is_a? Plugin2 }  
325 -  
326 - assert_equal Plugin1, Plugin1.new.method(:never_call).owner  
327 - assert_equal Noosfero::Plugin, Plugin2.new.method(:never_call).owner  
328 - # expects never can't be used as it defines the method  
329 - @manager.expects(:result_for).with(plugin1, :never_call).returns(Plugin1.new.never_call)  
330 - @manager.expects(:result_for).with(plugin2, :never_call).returns(nil)  
331 - @manager.dispatch :never_call  
332 - end  
333 -  
334 end 307 end