class Graphiti::Adapters::ActiveRecord::ManyToManySideload
Public Instance Methods
Source
# File lib/graphiti/adapters/active_record/many_to_many_sideload.rb, line 22 def belongs_to_many_filter(scope, value) if polymorphic? clauses = value.group_by { |v| v["type"] }.map { |group| ids = group[1].map { |g| g["id"] } filter_for(scope, ids, group[0]) } scope = clauses.shift clauses.each { |c| scope = scope.or(c) } scope else filter_for(scope, value) end end
Source
# File lib/graphiti/adapters/active_record/many_to_many_sideload.rb, line 36 def ids_for_parents(parents) if polymorphic? parents.group_by(&:class).map do |group| {id: super(group[1]), type: group[0].name}.to_json end else super end end
Calls superclass method
Graphiti::Sideload#ids_for_parents
Source
# File lib/graphiti/adapters/active_record/many_to_many_sideload.rb, line 10 def inverse_filter return @inverse_filter if @inverse_filter inferred_name = infer_inverse_association if inferred_name "#{inferred_name.to_s.singularize}_id" else super end end
Calls superclass method
Graphiti::Sideload::ManyToMany#inverse_filter
Source
# File lib/graphiti/adapters/active_record/many_to_many_sideload.rb, line 6 def through_relationship_name foreign_key.keys.first end
Source
# File lib/graphiti/adapters/active_record/many_to_many_sideload.rb, line 2 def through_table_name @through_table_name ||= resource_class.model.reflections[through.to_s].klass.table_name end
Private Instance Methods
Source
# File lib/graphiti/adapters/active_record/many_to_many_sideload.rb, line 54 def belongs_to_many_clause(value, type) where = {true_foreign_key => value} if polymorphic? && type where[foreign_type_column] = type end {through_table_name => where} end
Source
# File lib/graphiti/adapters/active_record/many_to_many_sideload.rb, line 48 def filter_for(scope, value, type = nil) scope .includes(through_relationship_name) .where(belongs_to_many_clause(value, type)) end
Source
# File lib/graphiti/adapters/active_record/many_to_many_sideload.rb, line 62 def foreign_type_column through_reflection.type end
Source
# File lib/graphiti/adapters/active_record/many_to_many_sideload.rb, line 66 def foreign_type_value through_reflection.active_record.name end
Source
# File lib/graphiti/adapters/active_record/many_to_many_sideload.rb, line 84 def infer_foreign_key key = parent_reflection.options[:through] value = through_reflection.foreign_key.to_sym {key => value} end
Source
# File lib/graphiti/adapters/active_record/many_to_many_sideload.rb, line 90 def infer_inverse_association through_class = through_reflection.klass foreign_reflection = through_class.reflections[name.to_s.singularize] foreign_reflection && foreign_reflection.options[:inverse_of] end
Source
# File lib/graphiti/adapters/active_record/many_to_many_sideload.rb, line 79 def parent_reflection parent_model = parent_resource_class.model parent_model.reflections[association_name.to_s] end
Source
# File lib/graphiti/adapters/active_record/many_to_many_sideload.rb, line 70 def polymorphic? !!foreign_type_column end
Source
# File lib/graphiti/adapters/active_record/many_to_many_sideload.rb, line 74 def through_reflection through = parent_reflection.options[:through] parent_resource_class.model.reflections[through.to_s] end