Skip to content

Commit a3d75c9

Browse files
committed
Merge pull request #1037 from engineyard/type-attribute
allow for type attribute
2 parents f7a1585 + 033ce8e commit a3d75c9

File tree

3 files changed

+23
-8
lines changed

3 files changed

+23
-8
lines changed

lib/active_model/serializer.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ def id
134134
object.id if object
135135
end
136136

137-
def type
137+
def json_api_type
138138
object.class.model_name.plural
139139
end
140140

lib/active_model/serializer/adapter/json_api.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,15 @@ def fragment_cache(cached_hash, non_cached_hash)
4444
def add_relationships(resource, name, serializers)
4545
resource[:relationships] ||= {}
4646
resource[:relationships][name] ||= { data: [] }
47-
resource[:relationships][name][:data] += serializers.map { |serializer| { type: serializer.type, id: serializer.id.to_s } }
47+
resource[:relationships][name][:data] += serializers.map { |serializer| { type: serializer.json_api_type, id: serializer.id.to_s } }
4848
end
4949

5050
def add_relationship(resource, name, serializer, val=nil)
5151
resource[:relationships] ||= {}
5252
resource[:relationships][name] = { data: val }
5353

5454
if serializer && serializer.object
55-
resource[:relationships][name][:data] = { type: serializer.type, id: serializer.id.to_s }
55+
resource[:relationships][name][:data] = { type: serializer.json_api_type, id: serializer.id.to_s }
5656
end
5757
end
5858

@@ -97,14 +97,14 @@ def attributes_for_serializer(serializer, options)
9797

9898
def resource_object_for(serializer, options)
9999
options[:fields] = @fieldset && @fieldset.fields_for(serializer)
100-
options[:required_fields] = [:id, :type]
100+
options[:required_fields] = [:id, :json_api_type]
101101

102102
cache_check(serializer) do
103103
attributes = serializer.attributes(options)
104104

105105
result = {
106106
id: attributes.delete(:id).to_s,
107-
type: attributes.delete(:type)
107+
type: attributes.delete(:json_api_type)
108108
}
109109

110110
result[:attributes] = attributes if attributes.any?
@@ -151,8 +151,8 @@ def add_resource_relationships(attrs, serializer, options = {})
151151
end
152152

153153
if options[:add_included]
154-
Array(serializer).each do |serializer|
155-
add_included(key, serializer)
154+
Array(serializer).each do |s|
155+
add_included(key, s)
156156
end
157157
end
158158
end

test/serializers/attribute_test.rb

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ module ActiveModel
44
class Serializer
55
class AttributeTest < Minitest::Test
66
def setup
7-
@blog = Blog.new({ id: 1, name: 'AMS Hints' })
7+
@blog = Blog.new({ id: 1, name: 'AMS Hints', type: "stuff" })
88
@blog_serializer = AlternateBlogSerializer.new(@blog)
99
end
1010

@@ -42,6 +42,21 @@ def test_id_attribute_override
4242
adapter = ActiveModel::Serializer::Adapter::Json.new(serializer.new(@blog))
4343
assert_equal({ blog: { id: "AMS Hints" } }, adapter.serializable_hash)
4444
end
45+
46+
def test_type_attribute
47+
attribute_serializer = Class.new(ActiveModel::Serializer) do
48+
attribute :id, key: :type
49+
end
50+
attributes_serializer = Class.new(ActiveModel::Serializer) do
51+
attributes :type
52+
end
53+
54+
adapter = ActiveModel::Serializer::Adapter::Json.new(attribute_serializer.new(@blog))
55+
assert_equal({ blog: { type: 1} }, adapter.serializable_hash)
56+
57+
adapter = ActiveModel::Serializer::Adapter::Json.new(attributes_serializer.new(@blog))
58+
assert_equal({ blog: { type: "stuff" } }, adapter.serializable_hash)
59+
end
4560
end
4661
end
4762
end

0 commit comments

Comments
 (0)