diff --git a/lib/userializer/array_serializer.rb b/lib/userializer/array_serializer.rb index 81ced10..d192e30 100644 --- a/lib/userializer/array_serializer.rb +++ b/lib/userializer/array_serializer.rb @@ -4,10 +4,11 @@ module USerializer class HeterogeneousArray < StandardError; end class ArraySerializer - def initialize(objs, opts = {}) + def initialize(objs, opts = {}, embed_empty_array: false) @objs = objs.compact @opts = opts @meta = opts[:meta] + @embed_empty_array = embed_empty_array clss = @objs.map(&:class).uniq obj_class = clss.first @@ -29,6 +30,7 @@ def initialize(objs, opts = {}) end def merge_root(res, opts) + res[@root_key] ||= [] if @embed_empty_array @objs.each do |obj| serializer(obj, opts).merge_root(res, @root_key, false, opts) end diff --git a/lib/userializer/composite_serializer.rb b/lib/userializer/composite_serializer.rb index f442896..4010d09 100644 --- a/lib/userializer/composite_serializer.rb +++ b/lib/userializer/composite_serializer.rb @@ -64,7 +64,7 @@ def compose_objs(objs) if obj.is_a?(Hash) || !obj.is_a?(Enumerable) CompositeObject.new(obj, opts) else - ArraySerializer.new(obj, opts) + ArraySerializer.new(obj, opts, embed_empty_array: true) end end end diff --git a/spec/userializer/composite_serializer_spec.rb b/spec/userializer/composite_serializer_spec.rb index 9bbfd6a..df9a033 100644 --- a/spec/userializer/composite_serializer_spec.rb +++ b/spec/userializer/composite_serializer_spec.rb @@ -73,11 +73,12 @@ class Foo it do expect( USerializer::CompositeSerializer.new( - { key: foo, key_1: [foo] } + { key: foo, key_1: [foo], key_2: [] } ).to_hash ).to eq( - key: { id: 1, bar: 'bar' }, - key_1: [{ id: 1, bar: 'bar' }] + key: { id: 1, bar: 'bar' }, + key_1: [{ id: 1, bar: 'bar' }], + key_2: [] ) end @@ -132,7 +133,7 @@ class Foo serializer: { bar: USerializer::RawSerializer } ).to_hash ).to eq( - key: { id: 1, bar: 'bar' }, + key: { id: 1, bar: 'bar' }, bar: { buz: 'value' } ) end