diff --git a/lib/noosfero/plugin/manager.rb b/lib/noosfero/plugin/manager.rb index 479eb27..59179d2 100644 --- a/lib/noosfero/plugin/manager.rb +++ b/lib/noosfero/plugin/manager.rb @@ -38,6 +38,8 @@ class Noosfero::Plugin::Manager end def result_for plugin, event, *args + # check if defined to avoid crash, as there is hotspots using method_missing + return unless plugin.respond_to? event method = plugin.method event method.call *args if method.owner != Noosfero::Plugin end diff --git a/test/unit/plugin_manager_test.rb b/test/unit/plugin_manager_test.rb index 70697f3..2de9ceb 100644 --- a/test/unit/plugin_manager_test.rb +++ b/test/unit/plugin_manager_test.rb @@ -178,6 +178,15 @@ class PluginManagerTest < ActiveSupport::TestCase assert_equal Plugin2, manager.fetch_first_plugin(:random_event) end + should 'return nil if missing method is called' do + class Plugin1 < Noosfero::Plugin + end + Noosfero::Plugin.stubs(:all).returns(['PluginManagerTest::Plugin1']) + environment.enable_plugin(Plugin1) + + assert_equal nil, @manager.result_for(Plugin1.new, :content_remove_new) + end + should 'parse macro' do class Plugin1 < Noosfero::Plugin def macros -- libgit2 0.21.2