aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel
diff options
context:
space:
mode:
authorMatt Aimonetti <mattaimonetti@gmail.com>2011-09-22 14:05:25 -0700
committerMatt Aimonetti <mattaimonetti@gmail.com>2011-09-22 14:05:25 -0700
commit6e78bbea90f744fb7de3bc93752d1519503a370d (patch)
tree35d9da3b1a7bd4ce9bda148ecd04bad8c5841cfa /activemodel
parent8aa537c9452d40aeaf25e6d7e0c5bb1205b05d1a (diff)
downloadrails-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.rb22
-rw-r--r--activemodel/test/cases/serializers/json_serialization_test.rb10
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)