Sha256: b35260c1939fa7845e9f01505671a5a81bd2ca894310185c7edd87bd571aa827

Contents?: true

Size: 1.54 KB

Versions: 1

Compression:

Stored size: 1.54 KB

Contents

require 'active_model/serializer/adapter/json/fragment_cache'

module ActiveModel
  class Serializer
    class Adapter
      class Json < Adapter
        def serializable_hash(options = {})
          if serializer.respond_to?(:each)
            @result = serializer.map{|s| self.class.new(s).serializable_hash }
          else
            @hash = {}

            @core = cache_check(serializer) do
              serializer.attributes(options)
            end

            serializer.each_association do |name, association, opts|
              if association.respond_to?(:each)
                array_serializer = association
                @hash[name] = array_serializer.map do |item|
                  cache_check(item) do
                    item.attributes(opts)
                  end
                end
              else
                if association
                  @hash[name] = cache_check(association) do
                    association.attributes(options)
                  end
                elsif opts[:virtual_value]
                  @hash[name] = opts[:virtual_value]
                else
                  @hash[name] = nil
                end
              end
            end
            @result = @core.merge @hash
          end

          if root = options.fetch(:root, serializer.json_key)
            @result = { root => @result }
          end
          @result
        end
      end

      def fragment_cache(cached_hash, non_cached_hash)
        Json::FragmentCache.new().fragment_cache(cached_hash, non_cached_hash)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
active_model_serializers-0.10.0.rc1 lib/active_model/serializer/adapter/json.rb