From 55425c597aefbfd330ee280c1f1dd6b4166c2141 Mon Sep 17 00:00:00 2001 From: Dominique Rose-Rosette Date: Tue, 8 Oct 2013 11:57:38 +0200 Subject: [PATCH] Fix `#as_json` glitch caused by JSON and Rails This should solve rails-api/active_model_serializers#340. When requiring Rails, `as_json` somehow ends up with a JSON::Ext::Generator::State instance as arguments, instead of a plain old Hash, which causes this: ``` 2.0.0 (main):0 > require "active_model_serializers" => true 2.0.0 (main):0 > require "json" => true 2.0.0 (main):0 > JSON.dump ActiveModel::Serializer.new(Object.new) => "\"#\"" 2.0.0 (main):0 > require "rails" => true 2.0.0 (main):0 > JSON.dump ActiveModel::Serializer.new(Object.new) NoMethodError: undefined method `fetch' for # from /home/drr/code/af/map/code/.bundle/ruby/2.0.0/gems/active_model_serializers-0.8.1/lib/active_model/serializer.rb:341:in `as_json'`'` ``` --- lib/active_model/serializer.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index e2a6228b6..1aaa06edc 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -323,7 +323,7 @@ def url_options # Returns a json representation of the serializable # object including the root. def as_json(args={}) - super(root: args.fetch(:root, options.fetch(:root, root_name))) + super(root: args.to_hash.fetch(:root, options.fetch(:root, root_name))) end def serialize_object