From ceef214f1e8d8cbb35ab3b2422097a3d8fd3071d Mon Sep 17 00:00:00 2001 From: Benjamin Fleischer Date: Fri, 4 Sep 2015 04:09:58 -0500 Subject: [PATCH] FlattenJson adapter no longer inherits Json adapter --- lib/active_model/serializer/adapter.rb | 4 +- .../serializer/adapter/flatten_json.rb | 42 ++++++++++++++++++- lib/active_model/serializer/adapter/json.rb | 40 ++---------------- 3 files changed, 47 insertions(+), 39 deletions(-) diff --git a/lib/active_model/serializer/adapter.rb b/lib/active_model/serializer/adapter.rb index 6b5686b5..f7ab6e98 100644 --- a/lib/active_model/serializer/adapter.rb +++ b/lib/active_model/serializer/adapter.rb @@ -112,12 +112,14 @@ module ActiveModel end end + private + def meta serializer.meta if serializer.respond_to?(:meta) end def meta_key - serializer.meta_key || 'meta' + serializer.meta_key || 'meta'.freeze end def root diff --git a/lib/active_model/serializer/adapter/flatten_json.rb b/lib/active_model/serializer/adapter/flatten_json.rb index bf0a690e..429818dc 100644 --- a/lib/active_model/serializer/adapter/flatten_json.rb +++ b/lib/active_model/serializer/adapter/flatten_json.rb @@ -1,6 +1,44 @@ class ActiveModel::Serializer::Adapter::FlattenJson < ActiveModel::Serializer::Adapter::Json - def serializable_hash(options = {}) - super.each_value.first + def serializable_hash(options = nil) + options ||= {} + if serializer.respond_to?(:each) + result = serializer.map { |s| FlattenJson.new(s).serializable_hash(options) } + else + hash = {} + + core = cache_check(serializer) do + serializer.attributes(options) + end + + serializer.associations.each do |association| + serializer = association.serializer + association_options = association.options + + if serializer.respond_to?(:each) + array_serializer = serializer + hash[association.key] = array_serializer.map do |item| + cache_check(item) do + item.attributes(association_options) + end + end + else + hash[association.key] = + if serializer && serializer.object + cache_check(serializer) do + serializer.attributes(options) + end + elsif association_options[:virtual_value] + association_options[:virtual_value] + end + end + end + result = core.merge hash + end + result + end + + def fragment_cache(cached_hash, non_cached_hash) + Json::FragmentCache.new.fragment_cache(cached_hash, non_cached_hash) end private diff --git a/lib/active_model/serializer/adapter/json.rb b/lib/active_model/serializer/adapter/json.rb index aec8fc4e..b2471936 100644 --- a/lib/active_model/serializer/adapter/json.rb +++ b/lib/active_model/serializer/adapter/json.rb @@ -4,44 +4,12 @@ class ActiveModel::Serializer::Adapter::Json < ActiveModel::Serializer::Adapter def serializable_hash(options = nil) options ||= {} - if serializer.respond_to?(:each) - result = serializer.map { |s| FlattenJson.new(s).serializable_hash(options) } - else - hash = {} - - core = cache_check(serializer) do - serializer.attributes(options) - end - - serializer.associations.each do |association| - serializer = association.serializer - association_options = association.options - - if serializer.respond_to?(:each) - array_serializer = serializer - hash[association.key] = array_serializer.map do |item| - cache_check(item) do - item.attributes(association_options) - end - end - else - hash[association.key] = - if serializer && serializer.object - cache_check(serializer) do - serializer.attributes(options) - end - elsif association_options[:virtual_value] - association_options[:virtual_value] - end - end - end - result = core.merge hash - end - - { root => result } + { root => FlattenJson.new(serializer).serializable_hash(options) } end + private + def fragment_cache(cached_hash, non_cached_hash) - ActiveModel::Serializer::Adapter::Json::FragmentCache.new().fragment_cache(cached_hash, non_cached_hash) + ActiveModel::Serializer::Adapter::Json::FragmentCache.new.fragment_cache(cached_hash, non_cached_hash) end end