class Graphiti::Sideload::HasMany

Public Class Methods

new(name, opts) click to toggle source
Calls superclass method Graphiti::Sideload::new
# File lib/graphiti/sideload/has_many.rb, line 2
def initialize(name, opts)
  @inverse_filter = opts[:inverse_filter]

  super(name, opts)
end

Public Instance Methods

base_filter(parents) click to toggle source
# File lib/graphiti/sideload/has_many.rb, line 23
def base_filter(parents)
  {foreign_key => parent_filter(parents)}
end
inverse_filter() click to toggle source
# File lib/graphiti/sideload/has_many.rb, line 12
def inverse_filter
  @inverse_filter || foreign_key
end
load_params(parents, query) click to toggle source
# File lib/graphiti/sideload/has_many.rb, line 16
def load_params(parents, query)
  query.hash.tap do |hash|
    hash[:filter] ||= {}
    hash[:filter].merge!(base_filter(parents))
  end
end
type() click to toggle source
# File lib/graphiti/sideload/has_many.rb, line 8
def type
  :has_many
end

Private Instance Methods

child_map(children) click to toggle source
# File lib/graphiti/sideload/has_many.rb, line 37
def child_map(children)
  children.group_by(&foreign_key)
end
children_for(parent, map) click to toggle source
# File lib/graphiti/sideload/has_many.rb, line 41
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
parent_filter(parents) click to toggle source
# File lib/graphiti/sideload/has_many.rb, line 33
def parent_filter(parents)
  ids_for_parents(parents).join(",")
end