Sha256: df7639e2d19981827a0acbd1f9ae439f865ef7f25f9670a7f4dd952ec42bf257
Contents?: true
Size: 1.49 KB
Versions: 3
Compression:
Stored size: 1.49 KB
Contents
module Graphiti module SerializableHash def to_hash(fields: nil, include: {}) {}.tap do |hash| fields_list = fields[jsonapi_type] if fields attrs = requested_attributes(fields_list).each_with_object({}) { |(k, v), h| h[k] = instance_eval(&v) } 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)) unless options[:meta].empty? end end private def to_hash(serializers, opts) {}.tap do |hash| hash[:data] = if serializers.is_a?(Array) serializers.map do |s| s.to_hash(**opts) end else serializers.to_hash(**opts) end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
graphiti-1.2.31 | lib/graphiti/hash_renderer.rb |
graphiti-1.2.30 | lib/graphiti/hash_renderer.rb |
graphiti-1.2.29 | lib/graphiti/hash_renderer.rb |