Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge pull request #3106 from mattetti/master

ActiveModel JSON serialization bug fix
  • Loading branch information...
commit c19c55582bf46541d0ae095ea70b65cf18aff775 2 parents 9d46823 + 6e78bbe
@josevalim josevalim authored
View
22 activemodel/lib/active_model/serializers/json.rb
@@ -88,19 +88,17 @@ module JSON
# "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)
View
10 activemodel/test/cases/serializers/json_serialization_test.rb
@@ -56,6 +56,16 @@ def setup
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)
Please sign in to comment.
Something went wrong with that request. Please try again.