Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Active Model JSON serializer now supports custom root option

[#4515 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
  • Loading branch information...
commit bce2c0ce37cbd4abb45ca36362fbb8fae3bbc6b9 1 parent 7aad851
@rubymerchant rubymerchant authored jeremy committed
View
5 activemodel/CHANGELOG
@@ -1,3 +1,8 @@
+*Rails 3.0.0 [beta 4/release candidate] (unreleased)*
+
+* JSON supports a custom root option: to_json(:root => 'custom') #4515 [Jatinder Singh]
+
+
*Rails 3.0.0 [beta 3] (April 13th, 2010)*
* No changes
View
6 activemodel/lib/active_model/serializers/json.rb
@@ -79,7 +79,11 @@ module JSON
# "title": "So I was thinking"}]}
def encode_json(encoder)
hash = serializable_hash(encoder.options)
- hash = { self.class.model_name.element => hash } if include_root_in_json
+ if include_root_in_json
+ custom_root = encoder.options && encoder.options[:root]
+ hash = { custom_root || self.class.model_name.element => hash }
+ end
+
ActiveSupport::JSON.encode(hash)
end
View
16 activemodel/test/cases/serializeration/json_serialization_test.rb
@@ -37,6 +37,22 @@ def setup
end
end
+ test "should include custom root in json" do
+ begin
+ Contact.include_root_in_json = true
+ json = @contact.to_json(:root => 'json_contact')
+
+ assert_match %r{^\{"json_contact":\{}, json
+ assert_match %r{"name":"Konata Izumi"}, json
+ assert_match %r{"age":16}, json
+ assert json.include?(%("created_at":#{ActiveSupport::JSON.encode(Time.utc(2006, 8, 1))}))
+ assert_match %r{"awesome":true}, json
+ assert_match %r{"preferences":\{"shows":"anime"\}}, json
+ ensure
+ Contact.include_root_in_json = false
+ end
+ end
+
test "should encode all encodable attributes" do
json = @contact.to_json
Please sign in to comment.
Something went wrong with that request. Please try again.