class Pragma::AssociationIncluder::ActiveRecord

Public Class Methods

supports?(relation) click to toggle source
# File lib/pragma/association_includer/active_record.rb, line 7
def supports?(relation)
  defined?(::ActiveRecord::Relation) && relation.is_a?(::ActiveRecord::Relation)
end

Public Instance Methods

include_associations(expands) click to toggle source
# File lib/pragma/association_includer/active_record.rb, line 12
def include_associations(expands)
  relation.includes(validate_associations(
    relation.model,
    destruct_associations(expands)
  ))
end

Private Instance Methods

destruct_associations(expands) click to toggle source
# File lib/pragma/association_includer/active_record.rb, line 21
def destruct_associations(expands)
  associations = {}

  expands.each do |expand|
    expand.split('.').inject(associations) do |accumulator, association|
      accumulator[association] ||= {}
    end
  end

  associations
end
validate_associations(model, associations) click to toggle source
# File lib/pragma/association_includer/active_record.rb, line 33
def validate_associations(model, associations)
  Hash[associations.map do |(key, value)|
    reflection = model.reflect_on_association(key.to_sym)
    reflection ? [key, validate_associations(reflection.klass, value)] : [false, false]
  end.select { |_, v| v }]
end