Class: PredicateScope::Evaluator

Inherits:
Object
  • Object
show all
Defined in:
lib/predicate_scope.rb

Instance Method Summary collapse

Constructor Details

#initialize(relation, instance) ⇒ Evaluator

Returns a new instance of Evaluator.



51
52
53
54
55
56
57
58
59
60
61
# File 'lib/predicate_scope.rb', line 51

def initialize(relation, instance)
  @relation = relation
  @instance = instance

  @instances_by_table = { instance.class.table_name => instance }
  associations = relation.values[:joins].to_a.chain(relation.values[:includes].to_a)
  associations.each do |association_name|
    object = instance.public_send(association_name)
    @instances_by_table[object.class.table_name] = object
  end
end

Instance Method Details

#evalObject



63
64
65
66
67
68
69
70
# File 'lib/predicate_scope.rb', line 63

def eval
  cores = @relation.arel.ast.cores
  if cores.length > 1
    raise Errors::MultipleCores.new
  end
  root = cores.first
  eval_node(root)
end