mirror of
https://github.com/github/rails.git
synced 2026-04-04 03:00:58 -04:00
Hash#to_json takes :only or :except options to specific or omit certain hash keys. Enumerable#to_json passes through its options to each element. Closes #9751.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7736 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
module ActiveRecord #:nodoc:
|
||||
module Serialization
|
||||
def to_json(options = {}, &block)
|
||||
def to_json(options = {})
|
||||
JsonSerializer.new(self, options).to_s
|
||||
end
|
||||
|
||||
|
||||
@@ -68,11 +68,12 @@ class DatabaseConnectedJsonEncodingTest < Test::Unit::TestCase
|
||||
|
||||
def setup
|
||||
@david = authors(:david)
|
||||
@mary = authors(:mary)
|
||||
end
|
||||
|
||||
def test_includes_uses_association_name
|
||||
json = @david.to_json(:include => :posts)
|
||||
|
||||
|
||||
assert_match %r{"posts": \[}, json
|
||||
|
||||
assert_match %r{"id": 1}, json
|
||||
@@ -140,4 +141,37 @@ class DatabaseConnectedJsonEncodingTest < Test::Unit::TestCase
|
||||
assert_match %r{"favorite_quote": "Constraints are liberating"}, json
|
||||
assert_equal %r{"favorite_quote": }.match(json).size, 1
|
||||
end
|
||||
|
||||
def test_should_allow_only_option_for_list_of_authors
|
||||
authors = [@david, @mary]
|
||||
|
||||
assert_equal %([{"name": "David"}, {"name": "Mary"}]), authors.to_json(:only => :name)
|
||||
end
|
||||
|
||||
def test_should_allow_except_option_for_list_of_authors
|
||||
authors = [@david, @mary]
|
||||
|
||||
assert_equal %([{"id": 1}, {"id": 2}]), authors.to_json(:except => [:name, :author_address_id])
|
||||
end
|
||||
|
||||
def test_should_allow_includes_for_list_of_authors
|
||||
authors = [@david, @mary]
|
||||
json = authors.to_json(
|
||||
:only => :name,
|
||||
:include => {
|
||||
:posts => { :only => :id }
|
||||
}
|
||||
)
|
||||
|
||||
assert_equal %([{"name": "David", "posts": [{"id": 1}, {"id": 2}, {"id": 4}, {"id": 5}, {"id": 6}]}, {"name": "Mary", "posts": [{"id": 7}]}]), json
|
||||
end
|
||||
|
||||
def test_should_allow_options_for_hash_of_authors
|
||||
authors_hash = {
|
||||
1 => @david,
|
||||
2 => @mary
|
||||
}
|
||||
|
||||
assert_equal %({1: {"name": "David"}}), authors_hash.to_json(:only => [1, :name])
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user