class NoBrainer::Criteria::Where::MultiOperator

Public Instance Methods

simplify() click to toggle source
# File lib/no_brainer/criteria/where.rb, line 47
def simplify
  clauses = self.clauses.map(&:simplify)
  if clauses.size == 1 && clauses.first.is_a?(self.class)
    return clauses.first
  end

  same_op_clauses, other_clauses = clauses.partition do |v|
    v.is_a?(self.class) && (v.clauses.size == 1 || v.op == self.op)
  end
  simplified_clauses = other_clauses + same_op_clauses.flat_map(&:clauses)
  simplified_clauses = BinaryOperator.simplify_clauses(op, simplified_clauses.uniq)
  self.class.new(op, simplified_clauses)
end
to_rql(doc) click to toggle source
# File lib/no_brainer/criteria/where.rb, line 61
def to_rql(doc)
  case op
  when :and then clauses.map { |c| c.to_rql(doc) }.reduce(:&)
  when :or  then clauses.map { |c| c.to_rql(doc) }.reduce(:|)
  end
end