From 3dd4928279bfbca638f9ff43673fc50717547381 Mon Sep 17 00:00:00 2001 From: Tema Bolshakov Date: Fri, 29 Aug 2014 10:58:14 +0400 Subject: [PATCH] * Do not ingerit array serializer from Serializer * Tests for ArraySerializer --- .../serializer/array_serializer.rb | 12 ++++----- test/array_serializer_test.rb | 27 +++++++++++++++++++ 2 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 test/array_serializer_test.rb diff --git a/lib/active_model/serializer/array_serializer.rb b/lib/active_model/serializer/array_serializer.rb index de4adfdc..697c4454 100644 --- a/lib/active_model/serializer/array_serializer.rb +++ b/lib/active_model/serializer/array_serializer.rb @@ -1,13 +1,13 @@ module ActiveModel class Serializer - class ArraySerializer < Serializer + class ArraySerializer include Enumerable - delegate :each, to: :object + delegate :each, to: :@objects - def initialize(object) - @object = object.map do |item| - serializer_class = ActiveModel::Serializer.serializer_for(item) - serializer_class.new(item) + def initialize(objects, options = {}) + @objects = objects.map do |object| + serializer_class = ActiveModel::Serializer.serializer_for(object) + serializer_class.new(object) end end end diff --git a/test/array_serializer_test.rb b/test/array_serializer_test.rb new file mode 100644 index 00000000..66840a4a --- /dev/null +++ b/test/array_serializer_test.rb @@ -0,0 +1,27 @@ +require 'test_helper' + +module ActiveModel + class Serializer + class ArraySerializerTest < Minitest::Test + def setup + @comment = Comment.new + @post= Post.new + @serializer = ArraySerializer.new([@comment, @post]) + end + + def test_respond_to_each + assert_respond_to @serializer, :each + end + + def test_each_object_should_be_serializer_with_appropriate_serializer + serializers = @serializer.to_a + + assert_kind_of CommentSerializer, serializers.first + assert_kind_of Comment, serializers.first.object + + assert_kind_of PostSerializer, serializers.last + assert_kind_of Post, serializers.last.object + end + end + end +end