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 /activemodel | |
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
Diffstat (limited to 'activemodel')
-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) |