Sha256: b35a459173f256aba540437cbe91fe3a5f5bb74e93edf5a059f972bba8bda2cf

Contents?: true

Size: 1.26 KB

Versions: 28

Compression:

Stored size: 1.26 KB

Contents

class Graphiti::Adapters::ActiveRecord::ManyToManySideload < Graphiti::Sideload::ManyToMany
  def through_table_name
    @through_table_name ||= parent_resource_class.model
      .reflections[through.to_s].klass.table_name
  end

  def through_relationship_name
    foreign_key.keys.first
  end

  def belongs_to_many_filter(scope, value)
    scope
      .includes(through_relationship_name)
      .where(belongs_to_many_clause(value))
  end

  private

  def belongs_to_many_clause(value)
    where = { true_foreign_key => value }.tap do |c|
      if polymorphic?
        c[foreign_type_column] = foreign_type_value
      end
    end

    { through_table_name => where }
  end

  def foreign_type_column
    through_reflection.type
  end

  def foreign_type_value
    through_reflection.active_record.name
  end

  def polymorphic?
    !!foreign_type_column
  end

  def through_reflection
    through = parent_reflection.options[:through]
    parent_resource_class.model.reflections[through.to_s]
  end

  def parent_reflection
    parent_model = parent_resource_class.model
    parent_model.reflections[association_name.to_s]
  end

  def infer_foreign_key
    key = parent_reflection.options[:through]
    value = through_reflection.foreign_key.to_sym
    { key => value }
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
graphiti-1.0.rc.21 lib/graphiti/adapters/active_record/many_to_many_sideload.rb
graphiti-1.0.rc.19 lib/graphiti/adapters/active_record/many_to_many_sideload.rb
graphiti-1.0.rc.18 lib/graphiti/adapters/active_record/many_to_many_sideload.rb
graphiti-1.0.rc.17 lib/graphiti/adapters/active_record/many_to_many_sideload.rb
graphiti-1.0.rc.16 lib/graphiti/adapters/active_record/many_to_many_sideload.rb
graphiti-1.0.rc.15 lib/graphiti/adapters/active_record/many_to_many_sideload.rb
graphiti-1.0.rc.14 lib/graphiti/adapters/active_record/many_to_many_sideload.rb
graphiti-1.0.rc.12 lib/graphiti/adapters/active_record/many_to_many_sideload.rb
graphiti-1.0.rc.11 lib/graphiti/adapters/active_record/many_to_many_sideload.rb
graphiti-1.0.rc.10 lib/graphiti/adapters/active_record/many_to_many_sideload.rb
graphiti-1.0.rc.9 lib/graphiti/adapters/active_record/many_to_many_sideload.rb
graphiti-1.0.rc.8 lib/graphiti/adapters/active_record/many_to_many_sideload.rb
graphiti-1.0.rc.7 lib/graphiti/adapters/active_record/many_to_many_sideload.rb
graphiti-1.0.rc.6 lib/graphiti/adapters/active_record/many_to_many_sideload.rb
graphiti-1.0.rc.5 lib/graphiti/adapters/active_record/many_to_many_sideload.rb
graphiti-1.0.rc.4 lib/graphiti/adapters/active_record/many_to_many_sideload.rb
graphiti-1.0.rc.3 lib/graphiti/adapters/active_record/many_to_many_sideload.rb
graphiti-1.0.rc.2 lib/graphiti/adapters/active_record/many_to_many_sideload.rb
graphiti-1.0.rc.1 lib/graphiti/adapters/active_record/many_to_many_sideload.rb
graphiti-1.0.beta.23 lib/graphiti/adapters/active_record/many_to_many_sideload.rb