Merge pull request #1884 from bf4/simplify_relationship

* Simplify Relationship
This commit is contained in:
Benjamin Fleischer 2016-08-17 16:18:14 -05:00 committed by GitHub
commit 455068d455
4 changed files with 29 additions and 19 deletions

View File

@ -438,14 +438,7 @@ module ActiveModelSerializers
allow_wildcard: true
)
serializer.associations(include_directive).each_with_object({}) do |association, hash|
hash[association.key] = Relationship.new(
serializer,
association.serializer,
instance_options,
options: association.options,
links: association.links,
meta: association.meta
).as_json
hash[association.key] = Relationship.new(serializer, instance_options, association).as_json
end
end

View File

@ -5,18 +5,21 @@ module ActiveModelSerializers
# {http://jsonapi.org/format/#document-resource-object-related-resource-links Document Resource Object Related Resource Links}
# {http://jsonapi.org/format/#document-links Document Links}
# {http://jsonapi.org/format/#document-resource-object-linkage Document Resource Relationship Linkage}
# {http://jsonapi.org/format/#document-meta Docment Meta}
def initialize(parent_serializer, serializer, serializable_resource_options, args = {})
# {http://jsonapi.org/format/#document-meta Document Meta}
def initialize(parent_serializer, serializable_resource_options, association)
serializer = association.serializer
options = association.options
links = association.links
meta = association.meta
@object = parent_serializer.object
@scope = parent_serializer.scope
@association_options = args.fetch(:options, {})
@association_options = options || {}
@serializable_resource_options = serializable_resource_options
@data = data_for(serializer)
@links = args.fetch(:links, {}).each_with_object({}) do |(key, value), hash|
@links = (links || {}).each_with_object({}) do |(key, value), hash|
result = Link.new(parent_serializer, value).as_json
hash[key] = result if result
end
meta = args.fetch(:meta, nil)
@meta = meta.respond_to?(:call) ? parent_serializer.instance_eval(&meta) : meta
end

View File

@ -150,9 +150,23 @@ module ActiveModelSerializers
private
def test_relationship(expected, params = {})
def test_relationship(expected, test_options = {})
parent_serializer = AuthorSerializer.new(@author)
relationship = Relationship.new(parent_serializer, @serializer, nil, params)
serializable_resource_options = {} # adapter.instance_options
meta = test_options.delete(:meta)
options = test_options.delete(:options)
links = test_options.delete(:links)
association_serializer = @serializer
if association_serializer && association_serializer.object
association_name = association_serializer.json_key.to_sym
association = ::ActiveModel::Serializer::Association.new(association_name, association_serializer, options, links, meta)
else
association = ::ActiveModel::Serializer::Association.new(:association_name_not_used, association, options, links, meta)
end
relationship = Relationship.new(parent_serializer, serializable_resource_options, association)
assert_equal(expected, relationship.as_json)
end
end

View File

@ -9,12 +9,12 @@ module SerializationTesting
ActiveModelSerializers::SerializableResource.new(obj).to_json
end
def with_namespace_separator(seperator)
original_seperator = ActiveModelSerializers.config.jsonapi_namespace_separator
ActiveModelSerializers.config.jsonapi_namespace_separator = seperator
def with_namespace_separator(separator)
original_separator = ActiveModelSerializers.config.jsonapi_namespace_separator
ActiveModelSerializers.config.jsonapi_namespace_separator = separator
yield
ensure
ActiveModelSerializers.config.jsonapi_namespace_separator = original_seperator
ActiveModelSerializers.config.jsonapi_namespace_separator = original_separator
end
# Aliased as :with_configured_adapter to clarify that