[noosfero/noosfero][master] plugins: don't crash on method_missing methods

Bráulio Bhavamitra gitlab at gitlab.com
Sat Mar 28 10:44:30 BRT 2015


Bráulio Bhavamitra pushed to master at Noosfero / noosfero


Commits:
51d3ac08 by Braulio Bhavamitra at 2015-03-28T10:44:21Z
plugins: don't crash on method_missing methods

- - - - -


2 changed files:

- lib/noosfero/plugin/manager.rb
- test/unit/plugin_manager_test.rb


Changes:

=====================================
lib/noosfero/plugin/manager.rb
=====================================
--- 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

=====================================
test/unit/plugin_manager_test.rb
=====================================
--- 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


View it on GitLab: https://gitlab.com/noosfero/noosfero/commit/51d3ac08b10f2f063a6915b83e95329dd14613dd
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listas.softwarelivre.org/pipermail/noosfero-dev/attachments/20150328/60579a78/attachment-0001.html>


More information about the Noosfero-dev mailing list