Skip to content

Commit dc4ee94

Browse files
committed
Add ArraySerializer#object like Serializer
1 parent 87c47f8 commit dc4ee94

File tree

3 files changed

+25
-20
lines changed

3 files changed

+25
-20
lines changed

lib/active_model/serializer/adapter/json_api.rb

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -163,19 +163,21 @@ def add_resource_relationships(attrs, serializer, options = {})
163163

164164
def add_links(options)
165165
links = @hash.fetch(:links) { {} }
166-
resources = serializer.instance_variable_get(:@resource)
167-
@hash[:links] = add_pagination_links(links, resources, options) if is_paginated?(resources)
166+
collection = serializer.object
167+
if is_paginated?(collection)
168+
@hash[:links] = add_pagination_links(links, collection, options)
169+
end
168170
end
169171

170-
def add_pagination_links(links, resources, options)
171-
pagination_links = JsonApi::PaginationLinks.new(resources, options[:context]).serializable_hash(options)
172+
def add_pagination_links(links, collection, options)
173+
pagination_links = JsonApi::PaginationLinks.new(collection, options[:context]).serializable_hash(options)
172174
links.update(pagination_links)
173175
end
174176

175-
def is_paginated?(resource)
176-
resource.respond_to?(:current_page) &&
177-
resource.respond_to?(:total_pages) &&
178-
resource.respond_to?(:size)
177+
def is_paginated?(collection)
178+
collection.respond_to?(:current_page) &&
179+
collection.respond_to?(:total_pages) &&
180+
collection.respond_to?(:size)
179181
end
180182
end
181183
end

lib/active_model/serializer/array_serializer.rb

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,30 @@ class Serializer
33
class ArraySerializer
44
NoSerializerError = Class.new(StandardError)
55
include Enumerable
6-
delegate :each, to: :@objects
6+
delegate :each, to: :@serializers
77

8-
attr_reader :root, :meta, :meta_key
8+
attr_reader :object, :root, :meta, :meta_key
99

10-
def initialize(objects, options = {})
10+
def initialize(resources, options = {})
1111
@root = options[:root]
12-
@resource = objects
13-
@objects = objects.map do |object|
14-
serializer_class = options.fetch(
15-
:serializer,
16-
ActiveModel::Serializer.serializer_for(object)
17-
)
12+
@object = resources
13+
@serializers = resources.map do |resource|
14+
serializer_class = options.fetch(:serializer) {
15+
ActiveModel::Serializer.serializer_for(resource)
16+
}
1817

1918
if serializer_class.nil?
20-
fail NoSerializerError, "No serializer found for object: #{object.inspect}"
19+
fail NoSerializerError, "No serializer found for resource: #{resource.inspect}"
2120
else
22-
serializer_class.new(object, options.except(:serializer))
21+
serializer_class.new(resource, options.except(:serializer))
2322
end
2423
end
2524
@meta = options[:meta]
2625
@meta_key = options[:meta_key]
2726
end
2827

2928
def json_key
30-
key = root || @objects.first.try(:json_key) || @resource.try(:name).try(:underscore)
29+
key = root || @serializers.first.try(:json_key) || object.try(:name).try(:underscore)
3130
key.try(:pluralize)
3231
end
3332
end

test/array_serializer_test.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ def build_named_collection(*resource)
1515
resource
1616
end
1717

18+
def test_has_object_reader_serializer_interface
19+
assert_equal @serializer.object, @resource
20+
end
21+
1822
def test_respond_to_each
1923
assert_respond_to @serializer, :each
2024
end

0 commit comments

Comments
 (0)