diff --git a/lib/active_model/serializer.rb b/lib/active_model/serializer.rb index e3108196..cfad42b1 100644 --- a/lib/active_model/serializer.rb +++ b/lib/active_model/serializer.rb @@ -134,7 +134,7 @@ module ActiveModel object.id if object end - def type + def json_api_type object.class.model_name.plural end diff --git a/lib/active_model/serializer/adapter/json_api.rb b/lib/active_model/serializer/adapter/json_api.rb index f03a5c7d..0671262e 100644 --- a/lib/active_model/serializer/adapter/json_api.rb +++ b/lib/active_model/serializer/adapter/json_api.rb @@ -44,7 +44,7 @@ module ActiveModel def add_relationships(resource, name, serializers) resource[:relationships] ||= {} resource[:relationships][name] ||= { data: [] } - resource[:relationships][name][:data] += serializers.map { |serializer| { type: serializer.type, id: serializer.id.to_s } } + resource[:relationships][name][:data] += serializers.map { |serializer| { type: serializer.json_api_type, id: serializer.id.to_s } } end def add_relationship(resource, name, serializer, val=nil) @@ -52,7 +52,7 @@ module ActiveModel resource[:relationships][name] = { data: val } if serializer && serializer.object - resource[:relationships][name][:data] = { type: serializer.type, id: serializer.id.to_s } + resource[:relationships][name][:data] = { type: serializer.json_api_type, id: serializer.id.to_s } end end @@ -97,14 +97,14 @@ module ActiveModel def resource_object_for(serializer, options) options[:fields] = @fieldset && @fieldset.fields_for(serializer) - options[:required_fields] = [:id, :type] + options[:required_fields] = [:id, :json_api_type] cache_check(serializer) do attributes = serializer.attributes(options) result = { id: attributes.delete(:id).to_s, - type: attributes.delete(:type) + type: attributes.delete(:json_api_type) } result[:attributes] = attributes if attributes.any? diff --git a/test/serializers/attribute_test.rb b/test/serializers/attribute_test.rb index d545a60e..9399b935 100644 --- a/test/serializers/attribute_test.rb +++ b/test/serializers/attribute_test.rb @@ -4,7 +4,7 @@ module ActiveModel class Serializer class AttributeTest < Minitest::Test def setup - @blog = Blog.new({ id: 1, name: 'AMS Hints' }) + @blog = Blog.new({ id: 1, name: 'AMS Hints', type: "stuff" }) @blog_serializer = AlternateBlogSerializer.new(@blog) end @@ -42,6 +42,21 @@ module ActiveModel adapter = ActiveModel::Serializer::Adapter::Json.new(serializer.new(@blog)) assert_equal({ blog: { id: "AMS Hints" } }, adapter.serializable_hash) end + + def test_type_attribute + attribute_serializer = Class.new(ActiveModel::Serializer) do + attribute :id, key: :type + end + attributes_serializer = Class.new(ActiveModel::Serializer) do + attributes :type + end + + adapter = ActiveModel::Serializer::Adapter::Json.new(attribute_serializer.new(@blog)) + assert_equal({ blog: { type: 1} }, adapter.serializable_hash) + + adapter = ActiveModel::Serializer::Adapter::Json.new(attributes_serializer.new(@blog)) + assert_equal({ blog: { type: "stuff" } }, adapter.serializable_hash) + end end end end