Sha256: 15900c2de77b418a616e83841981df9f33a4f791ad199e3078f3516e59de249e

Contents?: true

Size: 1.52 KB

Versions: 30

Compression:

Stored size: 1.52 KB

Contents

module Graphiti
  module SerializableHash
    def to_hash(fields: nil, include: {})
      {}.tap do |hash|
        _fields = fields[jsonapi_type] if fields
        attrs = requested_attributes(_fields).each_with_object({}) do |(k, v), h|
          h[k] = instance_eval(&v)
        end
        rels = @_relationships.select { |k,v| !!include[k] }
        rels.each_with_object({}) do |(k, v), h|
          serializers = v.send(:resources)
          attrs[k] = if serializers.is_a?(Array)
              serializers.map do |rr| # use private method to avoid array casting
                rr.to_hash(fields: fields, include: include[k])
              end
            elsif serializers.nil?
              nil
            else
              serializers.to_hash(fields: fields, include: include[k])
            end
        end

        hash[:id] = jsonapi_id
        hash.merge!(attrs) if attrs.any?
      end
    end
  end

  class HashRenderer
    def initialize(resource)
      @resource = resource
    end

    def render(options)
      serializers = options[:data]
      opts = options.slice(:fields, :include)
      to_hash(serializers, opts).tap do |hash|
        hash.merge!(options.slice(:meta)) if !options[:meta].empty?
      end
    end

    private

    def to_hash(serializers, opts)
      {}.tap do |hash|
        if serializers.is_a?(Array)
          hash[@resource.type] = serializers.map do |s|
            s.to_hash(opts)
          end
        else
          hash[@resource.type] = serializers.to_hash(opts)
        end
      end
    end
  end
end

Version data entries

30 entries across 30 versions & 1 rubygems

Version Path
graphiti-1.0.alpha.19 lib/graphiti/hash_renderer.rb
graphiti-1.0.alpha.18 lib/graphiti/hash_renderer.rb
graphiti-1.0.alpha.17 lib/graphiti/hash_renderer.rb
graphiti-1.0.alpha.16 lib/graphiti/hash_renderer.rb
graphiti-1.0.alpha.15 lib/graphiti/hash_renderer.rb
graphiti-1.0.alpha.14 lib/graphiti/hash_renderer.rb
graphiti-1.0.alpha.12 lib/graphiti/hash_renderer.rb
graphiti-1.0.alpha.11 lib/graphiti/hash_renderer.rb
graphiti-1.0.alpha.10 lib/graphiti/hash_renderer.rb
graphiti-1.0.alpha.9 lib/graphiti/hash_renderer.rb