Skip to content

Commit abb15b9

Browse files
committed
Simplify Relationship
1 parent d66e272 commit abb15b9

File tree

3 files changed

+24
-14
lines changed

3 files changed

+24
-14
lines changed

lib/active_model_serializers/adapter/json_api.rb

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -438,14 +438,7 @@ def relationships_for(serializer, requested_associations)
438438
allow_wildcard: true
439439
)
440440
serializer.associations(include_directive).each_with_object({}) do |association, hash|
441-
hash[association.key] = Relationship.new(
442-
serializer,
443-
association.serializer,
444-
instance_options,
445-
options: association.options,
446-
links: association.links,
447-
meta: association.meta
448-
).as_json
441+
hash[association.key] = Relationship.new(serializer, instance_options, association).as_json
449442
end
450443
end
451444

lib/active_model_serializers/adapter/json_api/relationship.rb

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,20 @@ class Relationship
66
# {http://jsonapi.org/format/#document-links Document Links}
77
# {http://jsonapi.org/format/#document-resource-object-linkage Document Resource Relationship Linkage}
88
# {http://jsonapi.org/format/#document-meta Document Meta}
9-
def initialize(parent_serializer, serializer, serializable_resource_options, args = {})
9+
def initialize(parent_serializer, serializable_resource_options, association)
10+
serializer = association.serializer
11+
options = association.options
12+
links = association.links
13+
meta = association.meta
1014
@object = parent_serializer.object
1115
@scope = parent_serializer.scope
12-
@association_options = args.fetch(:options, {})
16+
@association_options = options || {}
1317
@serializable_resource_options = serializable_resource_options
1418
@data = data_for(serializer)
15-
@links = args.fetch(:links, {}).each_with_object({}) do |(key, value), hash|
19+
@links = (links || {}).each_with_object({}) do |(key, value), hash|
1620
result = Link.new(parent_serializer, value).as_json
1721
hash[key] = result if result
1822
end
19-
meta = args.fetch(:meta, nil)
2023
@meta = meta.respond_to?(:call) ? parent_serializer.instance_eval(&meta) : meta
2124
end
2225

test/adapter/json_api/relationship_test.rb

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,9 +150,23 @@ def test_relationship_with_everything
150150

151151
private
152152

153-
def test_relationship(expected, params = {})
153+
def test_relationship(expected, test_options = {})
154154
parent_serializer = AuthorSerializer.new(@author)
155-
relationship = Relationship.new(parent_serializer, @serializer, nil, params)
155+
156+
serializable_resource_options = {} # adapter.instance_options
157+
158+
meta = test_options.delete(:meta)
159+
options = test_options.delete(:options)
160+
links = test_options.delete(:links)
161+
association_serializer = @serializer
162+
if association_serializer && association_serializer.object
163+
association_name = association_serializer.json_key.to_sym
164+
association = ::ActiveModel::Serializer::Association.new(association_name, association_serializer, options, links, meta)
165+
else
166+
association = ::ActiveModel::Serializer::Association.new(:association_name_not_used, association, options, links, meta)
167+
end
168+
169+
relationship = Relationship.new(parent_serializer, serializable_resource_options, association)
156170
assert_equal(expected, relationship.as_json)
157171
end
158172
end

0 commit comments

Comments
 (0)