Sha256: ea77e40d57ab322e2e8cfe4879c2e2e333cb8fa41f3a5e1e4720ec1cc0012201

Contents?: true

Size: 732 Bytes

Versions: 17

Compression:

Stored size: 732 Bytes

Contents

class Graphiti::Sideload::HasMany < Graphiti::Sideload
  def type
    :has_many
  end

  def load_params(parents, query)
    query.hash.tap do |hash|
      hash[:filter] ||= {}
      hash[:filter].merge!(base_filter(parents))
    end
  end

  def base_filter(parents)
    { foreign_key => ids_for_parents(parents).join(',') }
  end

  private

  def child_map(children)
    children.group_by(&foreign_key)
  end

  def children_for(parent, map)
    pk = parent.send(primary_key)
    children = map[pk]
    return children if children

    keys = map.keys
    if pk.is_a?(String) && keys[0].is_a?(Integer)
      pk = pk.to_i
    elsif pk.is_a?(Integer) && keys[0].is_a?(String)
      pk = pk.to_s
    end
    map[pk] || []
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
graphiti-1.0.rc.21 lib/graphiti/sideload/has_many.rb
graphiti-1.0.rc.19 lib/graphiti/sideload/has_many.rb
graphiti-1.0.rc.18 lib/graphiti/sideload/has_many.rb
graphiti-1.0.rc.17 lib/graphiti/sideload/has_many.rb
graphiti-1.0.rc.16 lib/graphiti/sideload/has_many.rb
graphiti-1.0.rc.15 lib/graphiti/sideload/has_many.rb
graphiti-1.0.rc.14 lib/graphiti/sideload/has_many.rb
graphiti-1.0.rc.12 lib/graphiti/sideload/has_many.rb
graphiti-1.0.rc.11 lib/graphiti/sideload/has_many.rb
graphiti-1.0.rc.10 lib/graphiti/sideload/has_many.rb
graphiti-1.0.rc.9 lib/graphiti/sideload/has_many.rb
graphiti-1.0.rc.8 lib/graphiti/sideload/has_many.rb
graphiti-1.0.rc.7 lib/graphiti/sideload/has_many.rb
graphiti-1.0.rc.6 lib/graphiti/sideload/has_many.rb
graphiti-1.0.rc.5 lib/graphiti/sideload/has_many.rb
graphiti-1.0.rc.4 lib/graphiti/sideload/has_many.rb
graphiti-1.0.rc.3 lib/graphiti/sideload/has_many.rb