support different serializations in ArraySerializer

ArraySerializer can serialize arrays of Hash, ActiveModel::Serializer,
or any PORO that responds to :as_json

Each item in the array should not include its type as a root element,
since normal arrays do not do this. If you want "typed" collections,
don't use an Array.
This commit is contained in:
Tee Parham
2012-05-30 14:52:52 -06:00
parent 00db4dd6db
commit f35a2261d2
2 changed files with 20 additions and 4 deletions

View File

@@ -52,7 +52,15 @@ module ActiveModel
@options[:hash] = hash = {}
@options[:unique_values] = {}
array = serializable_array.map(&:serializable_hash)
array = serializable_array.map do |item|
if item.is_a?(Hash)
item
elsif item.respond_to?(:serializable_hash)
item.serializable_hash
else
item.as_json
end
end
if root = @options[:root]
hash.merge!(root => array)