class Graphiti::Sideload::BelongsTo

Public Class Methods

new(name, opts) click to toggle source
Calls superclass method Graphiti::Sideload::new
# File lib/graphiti/sideload/belongs_to.rb, line 2
def initialize(name, opts)
  opts = {always_include_resource_ids: false}.merge(opts)
  super(name, opts)
end

Public Instance Methods

base_filter(parents) click to toggle source
# File lib/graphiti/sideload/belongs_to.rb, line 18
def base_filter(parents)
  parent_ids = ids_for_parents(parents)
  {primary_key => parent_ids.join(",")}
end
ids_for_parents(parents) click to toggle source
# File lib/graphiti/sideload/belongs_to.rb, line 23
def ids_for_parents(parents)
  parent_ids = parents.map(&foreign_key)
  parent_ids.compact!
  parent_ids.uniq!
  parent_ids
end
infer_foreign_key() click to toggle source
# File lib/graphiti/sideload/belongs_to.rb, line 30
def infer_foreign_key
  return parent.foreign_key if polymorphic_child?

  if resource.remote?
    namespace = namespace_for(resource.class)
    resource_name = resource.class.name
      .gsub("#{namespace}::", "")
      .gsub("Resource", "")
    if resource_name.include?(".remote")
      resource_name = resource_name.split(".remote")[0].split(".")[1]
    end
    :"#{resource_name.singularize.underscore}_id"
  else
    model = resource.model
    namespace = namespace_for(model)
    model_name = model.name.gsub("#{namespace}::", "")
    :"#{model_name.underscore}_id"
  end
end
load_params(parents, query) click to toggle source
# File lib/graphiti/sideload/belongs_to.rb, line 11
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/belongs_to.rb, line 7
def type
  :belongs_to
end

Private Instance Methods

child_map(children) click to toggle source
# File lib/graphiti/sideload/belongs_to.rb, line 52
def child_map(children)
  children.index_by(&primary_key)
end
children_for(parent, map) click to toggle source
# File lib/graphiti/sideload/belongs_to.rb, line 56
def children_for(parent, map)
  fk = parent.send(foreign_key)
  children = map[fk]
  return children if children

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