1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
module Arel class Where < Compound attr_reader :predicates def initialize(relation, predicates) super(relation) @predicates = predicates.map { |p| p.bind(relation) } @wheres = nil end def wheres @wheres ||= relation.wheres + predicates end def eval unoperated_rows.select { |row| predicates.all? { |p| p.eval(row) } } end end end