lib/syncify/normalize_associations.rb in syncify-0.1.6 vs lib/syncify/normalize_associations.rb in syncify-0.1.10

- old
+ new

@@ -17,24 +17,42 @@ Hash[association, {}] when Array association.map { |node| normalize_associations(node) } when Hash association.reduce([]) do |memo, (key, value)| - values = normalize_associations(value) - - if values.empty? - memo << Hash[key, {}] + if polymorphic_values?(value) + value = value.reduce({}, :merge) if value.is_a? Array + memo << Hash[key, value] else - values.each do |value| - memo << Hash[key, value] + values = normalize_associations(value) + + if values.empty? + memo << Hash[key, {}] + else + values.each do |value| + memo << Hash[key, value] + end end end memo end else association end ).flatten + end + + private + + def polymorphic_values?(values) + if values.is_a? Hash + values.keys.all? { |key| key.is_a? Class } + elsif values.is_a? Array + return false unless values.all? { |value| value.is_a? Hash } + return polymorphic_values?(values.reduce({}, :merge)) + else + false + end end end end