Skip to content

Commit

Permalink
Merge pull request #1052 from whatthewhat/underscored-json-root
Browse files Browse the repository at this point in the history
Use underscored json_root when serializing a collection
  • Loading branch information
joaomdmoura committed Aug 17, 2015
2 parents 8568ed5 + e8e4bde commit 6aba260
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 11 deletions.
2 changes: 1 addition & 1 deletion lib/active_model/serializer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ def initialize(object, options = {})
end

def json_key
@root || object.class.model_name.to_s.downcase
@root || object.class.model_name.to_s.underscore
end

def id
Expand Down
21 changes: 15 additions & 6 deletions test/adapter/json/collection_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,26 +17,27 @@ def setup
@first_post.blog = @blog
@second_post.blog = nil

@serializer = ArraySerializer.new([@first_post, @second_post])
@adapter = ActiveModel::Serializer::Adapter::Json.new(@serializer)
ActionController::Base.cache_store.clear
end

def test_with_serializer_option
@blog.special_attribute = "Special"
@blog.articles = [@first_post, @second_post]
@serializer = ArraySerializer.new([@blog], serializer: CustomBlogSerializer)
@adapter = ActiveModel::Serializer::Adapter::Json.new(@serializer)
serializer = ArraySerializer.new([@blog], serializer: CustomBlogSerializer)
adapter = ActiveModel::Serializer::Adapter::Json.new(serializer)

expected = {blogs:[{
id: 1,
special_attribute: "Special",
articles: [{id: 1,title: "Hello!!", body: "Hello, world!!"}, {id: 2, title: "New Post", body: "Body"}]
}]}
assert_equal expected, @adapter.serializable_hash
assert_equal expected, adapter.serializable_hash
end

def test_include_multiple_posts
serializer = ArraySerializer.new([@first_post, @second_post])
adapter = ActiveModel::Serializer::Adapter::Json.new(serializer)

expected = { posts: [{
title: "Hello!!",
body: "Hello, world!!",
Expand Down Expand Up @@ -64,7 +65,15 @@ def test_include_multiple_posts
name: "Custom blog"
}
}]}
assert_equal expected, @adapter.serializable_hash
assert_equal expected, adapter.serializable_hash
end

def test_root_is_underscored
virtual_value = VirtualValue.new(id: 1)
serializer = ArraySerializer.new([virtual_value])
adapter = ActiveModel::Serializer::Adapter::Json.new(serializer)

assert_equal 1, adapter.serializable_hash[:virtual_values].length
end
end
end
Expand Down
12 changes: 8 additions & 4 deletions test/serializers/root_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,17 @@ class Serializer
class RootTest < Minitest::Test

def setup
@profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
@profile_serializer = ProfileSerializer.new(@post, {root: 'smth'})
@virtual_value = VirtualValue.new(id: 1)
end

def test_overwrite_root
setup
assert_equal('smth', @profile_serializer.json_key)
serializer = VirtualValueSerializer.new(@virtual_value, {root: 'smth'})
assert_equal('smth', serializer.json_key)
end

def test_underscore_in_root
serializer = VirtualValueSerializer.new(@virtual_value)
assert_equal('virtual_value', serializer.json_key)
end

end
Expand Down

0 comments on commit 6aba260

Please sign in to comment.