From b4bcb93276834448ad9b59e91793ad75da26ce87 Mon Sep 17 00:00:00 2001 From: Aaron Patterson Date: Tue, 7 Sep 2010 17:42:40 -0700 Subject: on can take multiple args --- lib/arel/select_manager.rb | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'lib/arel') diff --git a/lib/arel/select_manager.rb b/lib/arel/select_manager.rb index 2ad9555d27..d8e113d5ee 100644 --- a/lib/arel/select_manager.rb +++ b/lib/arel/select_manager.rb @@ -8,8 +8,8 @@ module Arel @ctx = @head.cores.last end - def on expr - @ctx.froms.last.constraint = Nodes::On.new(expr) + def on *exprs + @ctx.froms.last.constraint = Nodes::On.new(collapse(exprs)) self end @@ -89,5 +89,16 @@ module Arel def to_a raise NotImplementedError end + + private + def collapse exprs + return exprs.first if exprs.length == 1 + + right = exprs.pop + left = exprs.pop + + right = Nodes::And.new left, right + exprs.reverse.inject(right) { |memo,expr| Nodes::And.new(expr, memo) } + end end end -- cgit v1.2.3