Sha256: 49503dfa3962ae038e3a19269a92fd5008b10568d06c7684a7b2ebba177b711d

Contents?: true

Size: 1.51 KB

Versions: 28

Compression:

Stored size: 1.51 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[:data] = serializers.map do |s|
            s.to_hash(opts)
          end
        else
          hash[:data] = serializers.to_hash(opts)
        end
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
graphiti-1.0.rc.21 lib/graphiti/hash_renderer.rb
graphiti-1.0.rc.19 lib/graphiti/hash_renderer.rb
graphiti-1.0.rc.18 lib/graphiti/hash_renderer.rb
graphiti-1.0.rc.17 lib/graphiti/hash_renderer.rb
graphiti-1.0.rc.16 lib/graphiti/hash_renderer.rb
graphiti-1.0.rc.15 lib/graphiti/hash_renderer.rb
graphiti-1.0.rc.14 lib/graphiti/hash_renderer.rb
graphiti-1.0.rc.12 lib/graphiti/hash_renderer.rb
graphiti-1.0.rc.11 lib/graphiti/hash_renderer.rb
graphiti-1.0.rc.10 lib/graphiti/hash_renderer.rb
graphiti-1.0.rc.9 lib/graphiti/hash_renderer.rb
graphiti-1.0.rc.8 lib/graphiti/hash_renderer.rb
graphiti-1.0.rc.7 lib/graphiti/hash_renderer.rb
graphiti-1.0.rc.6 lib/graphiti/hash_renderer.rb
graphiti-1.0.rc.5 lib/graphiti/hash_renderer.rb
graphiti-1.0.rc.4 lib/graphiti/hash_renderer.rb
graphiti-1.0.rc.3 lib/graphiti/hash_renderer.rb
graphiti-1.0.rc.2 lib/graphiti/hash_renderer.rb
graphiti-1.0.rc.1 lib/graphiti/hash_renderer.rb
graphiti-1.0.beta.23 lib/graphiti/hash_renderer.rb