From abb15b9622183f29e7c0e9221a83cc7def294c6f Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Tue, 16 Aug 2016 18:15:02 -0500 Subject: [PATCH] Simplify Relationship --- .../adapter/json_api.rb | 9 +-------- .../adapter/json_api/relationship.rb | 11 +++++++---- test/adapter/json_api/relationship_test.rb | 18 ++++++++++++++++-- 3 files changed, 24 insertions(+), 14 deletions(-) diff --git a/lib/active_model_serializers/adapter/json_api.rb b/lib/active_model_serializers/adapter/json_api.rb index 9b516f8d..203c1240 100644 --- a/lib/active_model_serializers/adapter/json_api.rb +++ b/lib/active_model_serializers/adapter/json_api.rb @@ -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 diff --git a/lib/active_model_serializers/adapter/json_api/relationship.rb b/lib/active_model_serializers/adapter/json_api/relationship.rb index c4e9636e..7c597314 100644 --- a/lib/active_model_serializers/adapter/json_api/relationship.rb +++ b/lib/active_model_serializers/adapter/json_api/relationship.rb @@ -6,17 +6,20 @@ module ActiveModelSerializers # {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 Document Meta} - def initialize(parent_serializer, serializer, serializable_resource_options, args = {}) + 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 diff --git a/test/adapter/json_api/relationship_test.rb b/test/adapter/json_api/relationship_test.rb index 1708d5f3..8b443df6 100644 --- a/test/adapter/json_api/relationship_test.rb +++ b/test/adapter/json_api/relationship_test.rb @@ -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