From 0433b054eebd5a53ff6c5f35383a6c0aed0015b2 Mon Sep 17 00:00:00 2001 From: Ernie Miller Date: Tue, 30 Mar 2010 15:32:39 -0400 Subject: Tests for notmatches and notin, and fixes for issues found in tests --- lib/arel/algebra/predicates.rb | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'lib/arel/algebra') diff --git a/lib/arel/algebra/predicates.rb b/lib/arel/algebra/predicates.rb index 43606139b0..be80f2a987 100644 --- a/lib/arel/algebra/predicates.rb +++ b/lib/arel/algebra/predicates.rb @@ -14,19 +14,28 @@ module Arel end end - class Grouped < Predicate - attributes :operator, :operand1, :operands2 + class Polyadic < Predicate + attributes :operator, :operand1, :additional_operands - def initialize(operator, operand1, *operands2) + def initialize(operator, operand1, *additional_operands) @operator = operator @operand1 = operand1 - @operands2 = operands2.uniq + @additional_operands = additional_operands.uniq end def ==(other) self.class === other and + @operator == operator and @operand1 == other.operand1 and - same_elements?(@operands2, other.operands2) + same_elements?(@additional_operands, other.additional_operands) + end + + def bind(relation) + self.class.new( + operator, + operand1.find_correlate_in(relation), + *additional_operands.map {|o| o.find_correlate_in(relation)} + ) end private @@ -43,6 +52,10 @@ module Arel class Unary < Predicate attributes :operand deriving :initialize, :== + + def bind(relation) + self.class.new(operand.find_correlate_in(relation)) + end end class Binary < Predicate -- cgit v1.2.3