From ec55866e398feb1a52701027ab86857b62622ab6 Mon Sep 17 00:00:00 2001 From: Xinjiang Lu Date: Sun, 12 May 2013 12:10:02 -0400 Subject: Support include_root_in_json for ActiveResource properly. This commit is a backport from https://github.com/rails/activeresource/pull/29. The ActiveResource's include_root_in_json option is broken for 3.2.x. --- activeresource/CHANGELOG.md | 4 +++- activeresource/lib/active_resource/base.rb | 2 +- activeresource/test/cases/base_test.rb | 16 +++++++++++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/activeresource/CHANGELOG.md b/activeresource/CHANGELOG.md index 77419bb904..1d084ec5d9 100644 --- a/activeresource/CHANGELOG.md +++ b/activeresource/CHANGELOG.md @@ -1,7 +1,9 @@ ## unreleased ## -* No changes. +* Fixes an issue that ActiveResource models ignores ActiveResource::Base.include_root_in_json. + Backported from the now separate repo rails/activeresouce. + *Xinjiang Lu* ## Rails 3.2.13 (Mar 18, 2013) ## diff --git a/activeresource/lib/active_resource/base.rb b/activeresource/lib/active_resource/base.rb index 032a245c3c..f9cc7d03c8 100644 --- a/activeresource/lib/active_resource/base.rb +++ b/activeresource/lib/active_resource/base.rb @@ -1336,7 +1336,7 @@ module ActiveResource end def to_json(options={}) - super({ :root => self.class.element_name }.merge(options)) + super(include_root_in_json ? { :root => self.class.element_name }.merge(options) : options) end def to_xml(options={}) diff --git a/activeresource/test/cases/base_test.rb b/activeresource/test/cases/base_test.rb index 983f0541a8..9176b5db93 100644 --- a/activeresource/test/cases/base_test.rb +++ b/activeresource/test/cases/base_test.rb @@ -1020,7 +1020,6 @@ class BaseTest < Test::Unit::TestCase end def test_to_json - Person.include_root_in_json = true joe = Person.find(6) encode = joe.encode json = joe.to_json @@ -1032,6 +1031,21 @@ class BaseTest < Test::Unit::TestCase assert_match %r{\}\}$}, json end + def test_to_json_without_root + ActiveResource::Base.include_root_in_json = false + joe = Person.find(6) + encode = joe.encode + json = joe.to_json + + assert_equal encode, json + assert_no_match %r{^\{"person":\}}, json + assert_match %r{"id":6}, json + assert_match %r{"name":"Joe"}, json + assert_match %r{\}$}, json + ensure + ActiveResource::Base.include_root_in_json = true + end + def test_to_json_with_element_name old_elem_name = Person.element_name Person.include_root_in_json = true -- cgit v1.2.3