diff --git a/lib/liquid/drop.rb b/lib/liquid/drop.rb index 1901871..db507eb 100644 --- a/lib/liquid/drop.rb +++ b/lib/liquid/drop.rb @@ -28,11 +28,11 @@ module Liquid end # called by liquid to invoke a drop - def invoke_drop(method) - if self.class.public_method_defined?(method) - send(method) + def invoke_drop(method_or_key) + if self.class.public_method_defined?(method_or_key.to_s.to_sym) + send(method_or_key.to_s.to_sym) else - before_method(method) + before_method(method_or_key) end end diff --git a/test/lib/liquid/drop_test.rb b/test/lib/liquid/drop_test.rb index 303d14a..4d74a1d 100644 --- a/test/lib/liquid/drop_test.rb +++ b/test/lib/liquid/drop_test.rb @@ -36,7 +36,7 @@ class ProductDrop < Liquid::Drop class CatchallDrop < Liquid::Drop def before_method(method) - return 'method: ' << method + return 'method: ' << method.to_s end end @@ -88,12 +88,17 @@ class DropsTest < Test::Unit::TestCase end - def test_text_drop + def test_unknown_method output = Liquid::Template.parse( ' {{ product.catchall.unknown }} ' ).render('product' => ProductDrop.new) assert_equal ' method: unknown ', output end + def test_integer_argument_drop + output = Liquid::Template.parse( ' {{ product.catchall[8] }} ' ).render('product' => ProductDrop.new) + assert_equal ' method: 8 ', output + end + def test_text_array_drop output = Liquid::Template.parse( '{% for text in product.texts.array %} {{text}} {% endfor %}' ).render('product' => ProductDrop.new) assert_equal ' text1 text2 ', output