diff --git a/lib/active_model/serializer/lint.rb b/lib/active_model/serializer/lint.rb index 97ffcd7f..bf3b7a37 100644 --- a/lib/active_model/serializer/lint.rb +++ b/lib/active_model/serializer/lint.rb @@ -36,7 +36,17 @@ module ActiveModel::Serializer::Lint # Typically, it is implemented by including ActiveModel::Serialization. def test_read_attribute_for_serialization assert_respond_to resource, :read_attribute_for_serialization, "The resource should respond to read_attribute_for_serialization" - assert_equal resource.method(:read_attribute_for_serialization).arity, 1 + actual_arity = resource.method(:read_attribute_for_serialization).arity + if defined?(::Rubinius) + # 1 for def read_attribute_for_serialization(name); end + # -2 for alias :read_attribute_for_serialization :send for rbx because :shrug: + assert_includes [1, -2], actual_arity, "expected #{actual_arity.inspect} to be 1 or -2" + else + # using absolute value since arity is: + # 1 for def read_attribute_for_serialization(name); end + # -1 for alias :read_attribute_for_serialization :send + assert_includes [1, -1], actual_arity, "expected #{actual_arity.inspect} to be 1 or -1" + end end # Passes if the object responds to as_json and if it takes @@ -68,7 +78,7 @@ module ActiveModel::Serializer::Lint end # Passes if the object responds to cache_key and if it takes no - # arguments. + # arguments (Rails 4.0) or a splat (Rails 4.1+). # Fails otherwise. # # cache_key returns a (self-expiring) unique key for the object, @@ -76,7 +86,11 @@ module ActiveModel::Serializer::Lint # It is not required unless caching is enabled. def test_cache_key assert_respond_to resource, :cache_key - assert_equal resource.method(:cache_key).arity, 0 + actual_arity = resource.method(:cache_key).arity + # using absolute value since arity is: + # 0 for Rails 4.1+, *timestamp_names + # -1 for Rails 4.0, no arguments + assert_includes [-1, 0], actual_arity, "expected #{actual_arity.inspect} to be 0 or -1" end # Passes if the object responds to id and if it takes no