From 8f6218c587043737d683f33bbb85d743a0cefd0a Mon Sep 17 00:00:00 2001 From: Adam Stanton Date: Sun, 10 Feb 2013 09:06:24 -0800 Subject: [PATCH] Create DefaultSerializer so that as_json uses same interface. This is to ensure that PORO's as_json is called if no serializer is specified. Original behaviour was that serializable_hash was being called, overriding the as_json method. --- active_model_serializers.gemspec | 1 + lib/active_model/array_serializer.rb | 11 ++++++++++- test/array_serializer_test.rb | 3 +-- test/test_fakes.rb | 2 +- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/active_model_serializers.gemspec b/active_model_serializers.gemspec index 2128b44a..c1298bc6 100644 --- a/active_model_serializers.gemspec +++ b/active_model_serializers.gemspec @@ -20,5 +20,6 @@ Gem::Specification.new do |gem| gem.add_dependency 'activemodel', '>= 3.0' gem.add_development_dependency "rails", ">= 3.0" gem.add_development_dependency "pry" + gem.add_development_dependency "pry-nav" gem.add_development_dependency "simplecov" end diff --git a/lib/active_model/array_serializer.rb b/lib/active_model/array_serializer.rb index b55f7dd2..a3b1ba38 100644 --- a/lib/active_model/array_serializer.rb +++ b/lib/active_model/array_serializer.rb @@ -1,6 +1,15 @@ require "active_support/core_ext/class/attribute" module ActiveModel + class DefaultSerializer + attr_reader :object + def initialize(object) + @object = object + end + def serializable_hash + @object.as_json + end + end # Active Model Array Serializer # # It serializes an Array, checking if each element that implements @@ -30,7 +39,7 @@ module ActiveModel if serializer serializer.new(item, @options) else - item + DefaultSerializer.new(item) end end end diff --git a/test/array_serializer_test.rb b/test/array_serializer_test.rb index 152defc2..a238eae7 100644 --- a/test/array_serializer_test.rb +++ b/test/array_serializer_test.rb @@ -12,7 +12,7 @@ class ArraySerializerTest < ActiveModel::TestCase serializer = array.active_model_serializer.new(array, :scope => {:scope => true}) assert_equal([ { :model => "Model" }, - { :last_name => "Valim", :ok => true, :first_name => "Jose", :scope => true }, + { :first_name => "Jose", :last_name => "Valim", :ok => true, :scope => true }, { :title => "Comment1" } ], serializer.as_json) end @@ -51,5 +51,4 @@ class ArraySerializerTest < ActiveModel::TestCase { :title => "Post2" } ], serializer.as_json) end - end diff --git a/test/test_fakes.rb b/test/test_fakes.rb index 73d57088..789fde92 100644 --- a/test/test_fakes.rb +++ b/test/test_fakes.rb @@ -68,7 +68,7 @@ class MyUserSerializer < ActiveModel::Serializer end end -class CommentSerializer +class CommentSerializer < ActiveModel::Serializer def initialize(comment, options={}) @object = comment end