diff options
author | Matt Aimonetti <mattaimonetti@gmail.com> | 2011-09-22 14:05:25 -0700 |
---|---|---|
committer | Matt Aimonetti <mattaimonetti@gmail.com> | 2011-09-22 14:05:25 -0700 |
commit | 6e78bbea90f744fb7de3bc93752d1519503a370d (patch) | |
tree | 35d9da3b1a7bd4ce9bda148ecd04bad8c5841cfa | |
parent | 8aa537c9452d40aeaf25e6d7e0c5bb1205b05d1a (diff) | |
download | rails-6e78bbea90f744fb7de3bc93752d1519503a370d.tar.gz rails-6e78bbea90f744fb7de3bc93752d1519503a370d.tar.bz2 rails-6e78bbea90f744fb7de3bc93752d1519503a370d.zip |
fixed a bug with the json serialization when the class setting is set to not include the root, but an instance is serialized with the root option passed as true
-rw-r--r-- | activemodel/lib/active_model/serializers/json.rb | 22 | ||||
-rw-r--r-- | activemodel/test/cases/serializers/json_serialization_test.rb | 10 |
2 files changed, 20 insertions, 12 deletions
diff --git a/activemodel/lib/active_model/serializers/json.rb b/activemodel/lib/active_model/serializers/json.rb index 4fbccd7419..3c713311fd 100644 --- a/activemodel/lib/active_model/serializers/json.rb +++ b/activemodel/lib/active_model/serializers/json.rb @@ -88,19 +88,17 @@ module ActiveModel # "title": "So I was thinking"}]} def as_json(options = nil) - hash = serializable_hash(options) - - include_root = include_root_in_json - if options.try(:key?, :root) - include_root = options[:root] - end - - if include_root - custom_root = options && options[:root] - hash = { custom_root || self.class.model_name.element => hash } + opts_root = options[:root] if options.try(:key?, :root) + if opts_root + custom_root = opts_root == true ? self.class.model_name.element : opts_root + { custom_root => serializable_hash(options) } + elsif opts_root == false + serializable_hash(options) + elsif include_root_in_json + { self.class.model_name.element => serializable_hash(options) } + else + serializable_hash(options) end - - hash end def from_json(json, include_root=include_root_in_json) diff --git a/activemodel/test/cases/serializers/json_serialization_test.rb b/activemodel/test/cases/serializers/json_serialization_test.rb index 5e1e7d897a..40fdcf20ca 100644 --- a/activemodel/test/cases/serializers/json_serialization_test.rb +++ b/activemodel/test/cases/serializers/json_serialization_test.rb @@ -56,6 +56,16 @@ class JsonSerializationTest < ActiveModel::TestCase end end + test "should include root in json (option) even if the default is set to false" do + begin + Contact.include_root_in_json = false + json = @contact.to_json(:root => true) + assert_match %r{^\{"contact":\{}, json + ensure + Contact.include_root_in_json = true + end + end + test "should not include root in json (option)" do json = @contact.to_json(:root => false) |