1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Merge branch 'brynary'

This commit is contained in:
Ernie Miller 2010-05-26 20:49:39 -04:00
commit c69dfd53de
32 changed files with 116 additions and 116 deletions

View file

@ -4,4 +4,4 @@ require "arel/algebra/attributes/decimal"
require "arel/algebra/attributes/float"
require "arel/algebra/attributes/integer"
require "arel/algebra/attributes/string"
require "arel/algebra/attributes/time"
require "arel/algebra/attributes/time"

View file

@ -85,119 +85,119 @@ module Arel
def eq(other)
Predicates::Equality.new(self, other)
end
def eq_any(*others)
Predicates::Any.build(Predicates::Equality, self, *others)
end
def eq_all(*others)
Predicates::All.build(Predicates::Equality, self, *others)
end
def not_eq(other)
Predicates::Inequality.new(self, other)
end
def not_eq_any(*others)
Predicates::Any.build(Predicates::Inequality, self, *others)
end
def not_eq_all(*others)
Predicates::All.build(Predicates::Inequality, self, *others)
end
def lt(other)
Predicates::LessThan.new(self, other)
end
def lt_any(*others)
Predicates::Any.build(Predicates::LessThan, self, *others)
end
def lt_all(*others)
Predicates::All.build(Predicates::LessThan, self, *others)
end
def lteq(other)
Predicates::LessThanOrEqualTo.new(self, other)
end
def lteq_any(*others)
Predicates::Any.build(Predicates::LessThanOrEqualTo, self, *others)
end
def lteq_all(*others)
Predicates::All.build(Predicates::LessThanOrEqualTo, self, *others)
end
def gt(other)
Predicates::GreaterThan.new(self, other)
end
def gt_any(*others)
Predicates::Any.build(Predicates::GreaterThan, self, *others)
end
def gt_all(*others)
Predicates::All.build(Predicates::GreaterThan, self, *others)
end
def gteq(other)
Predicates::GreaterThanOrEqualTo.new(self, other)
end
def gteq_any(*others)
Predicates::Any.build(Predicates::GreaterThanOrEqualTo, self, *others)
end
def gteq_all(*others)
Predicates::All.build(Predicates::GreaterThanOrEqualTo, self, *others)
end
def matches(other)
Predicates::Match.new(self, other)
end
def matches_any(*others)
Predicates::Any.build(Predicates::Match, self, *others)
end
def matches_all(*others)
Predicates::All.build(Predicates::Match, self, *others)
end
def not_matches(other)
Predicates::NotMatch.new(self, other)
end
def not_matches_any(*others)
Predicates::Any.build(Predicates::NotMatch, self, *others)
end
def not_matches_all(*others)
Predicates::All.build(Predicates::NotMatch, self, *others)
end
def in(other)
Predicates::In.new(self, other)
end
def in_any(*others)
Predicates::Any.build(Predicates::In, self, *others)
end
def in_all(*others)
Predicates::All.build(Predicates::In, self, *others)
end
def not_in(other)
Predicates::NotIn.new(self, other)
end
def not_in_any(*others)
Predicates::Any.build(Predicates::NotIn, self, *others)
end
def not_in_all(*others)
Predicates::All.build(Predicates::NotIn, self, *others)
end

View file

@ -7,4 +7,4 @@ module Arel
end
end
end

View file

@ -64,4 +64,4 @@ module Arel
end
end
end
end
end

View file

@ -8,23 +8,23 @@ module Arel
def and(other_predicate)
And.new(self, other_predicate)
end
def complement
Not.new(self)
end
def not
self.complement
end
end
class Polyadic < Predicate
attributes :predicates
def initialize(*predicates)
@predicates = predicates
end
# Build a Polyadic predicate based on:
# * <tt>operator</tt> - The Predicate subclass that defines the type of operation
# (LessThan, Equality, etc)
@ -37,19 +37,19 @@ module Arel
end
)
end
def ==(other)
same_elements?(@predicates, other.predicates)
end
def bind(relation)
self.class.new(
*predicates.map {|p| p.find_correlate_in(relation)}
)
end
private
def same_elements?(a1, a2)
[:select, :inject, :size].each do |m|
return false unless [a1, a2].each {|a| a.respond_to?(m) }
@ -58,28 +58,28 @@ module Arel
a2.inject({}) { |h,e| h[e] = a2.select { |i| i == e }.size; h }
end
end
class Any < Polyadic
def complement
All.new(*predicates.map {|p| p.complement})
end
end
class All < Polyadic
def complement
Any.new(*predicates.map {|p| p.complement})
end
end
class Unary < Predicate
attributes :operand
deriving :initialize, :==
def bind(relation)
self.class.new(operand.find_correlate_in(relation))
end
end
class Not < Unary
def complement
operand
@ -100,7 +100,7 @@ module Arel
self.class.new(operand1.find_correlate_in(relation), operand2.find_correlate_in(relation))
end
end
class CompoundPredicate < Binary; end
class And < CompoundPredicate
@ -108,7 +108,7 @@ module Arel
Or.new(operand1.complement, operand2.complement)
end
end
class Or < CompoundPredicate
def complement
And.new(operand1.complement, operand2.complement)
@ -121,7 +121,7 @@ module Arel
((operand1 == other.operand1 and operand2 == other.operand2) or
(operand1 == other.operand2 and operand2 == other.operand1))
end
def complement
Inequality.new(operand1, operand2)
end
@ -133,54 +133,54 @@ module Arel
((operand1 == other.operand1 and operand2 == other.operand2) or
(operand1 == other.operand2 and operand2 == other.operand1))
end
def complement
Equality.new(operand1, operand2)
end
end
class GreaterThanOrEqualTo < Binary
def complement
LessThan.new(operand1, operand2)
end
end
class GreaterThan < Binary
def complement
LessThanOrEqualTo.new(operand1, operand2)
end
end
class LessThanOrEqualTo < Binary
def complement
GreaterThan.new(operand1, operand2)
end
end
class LessThan < Binary
def complement
GreaterThanOrEqualTo.new(operand1, operand2)
end
end
class Match < Binary
def complement
NotMatch.new(operand1, operand2)
end
end
class NotMatch < Binary
def complement
Match.new(operand1, operand2)
end
end
class In < Binary
def complement
NotIn.new(operand1, operand2)
end
end
class NotIn < Binary
def complement
In.new(operand1, operand2)

View file

@ -5,19 +5,19 @@ module Arel
operand1.eval(row).send(operator, operand2.eval(row))
end
end
class Unary < Predicate
def eval(row)
operand.eval(row).send(operator)
end
end
class Not < Unary
def eval(row)
!operand.eval(row)
end
end
class Polyadic < Predicate
def eval(row)
predicates.send(compounder) do |operation|
@ -25,15 +25,15 @@ module Arel
end
end
end
class Any < Polyadic
def compounder; :any? end
end
class All < Polyadic
def compounder; :all? end
end
class CompoundPredicate < Binary
def eval(row)
eval "operand1.eval(row) #{operator} operand2.eval(row)"
@ -77,7 +77,7 @@ module Arel
class Match < Binary
def operator; :=~ end
end
class NotMatch < Binary
def eval(row)
operand1.eval(row) !~ operand2.eval(row)
@ -89,7 +89,7 @@ module Arel
operand2.eval(row).include?(operand1.eval(row))
end
end
class NotIn < Binary
def eval(row)
!(operand2.eval(row).include?(operand1.eval(row)))

View file

@ -37,4 +37,4 @@ module Arel
end
end
end
end
end

View file

@ -12,7 +12,7 @@ module Arel
def inclusion_predicate_sql
"IN"
end
def exclusion_predicate_sql
"NOT IN"
end

View file

@ -4,7 +4,7 @@ module Arel
def equality_predicate_sql
'IS'
end
def inequality_predicate_sql
'IS NOT'
end

View file

@ -8,7 +8,7 @@ module Arel
def equality_predicate_sql
'='
end
def inequality_predicate_sql
'!='
end

View file

@ -8,7 +8,7 @@ module Arel
def inclusion_predicate_sql
"BETWEEN"
end
def exclusion_predicate_sql
"NOT BETWEEN"
end

View file

@ -5,13 +5,13 @@ module Arel
"#{operand1.to_sql} #{predicate_sql} #{operand1.format(operand2)}"
end
end
class Unary < Predicate
def to_sql(formatter = nil)
"#{predicate_sql} (#{operand.to_sql(formatter)})"
end
end
class Not < Unary
def predicate_sql; "NOT" end
end
@ -29,19 +29,19 @@ module Arel
class And < CompoundPredicate
def predicate_sql; "AND" end
end
class Polyadic < Predicate
def to_sql(formatter = nil)
"(" +
"(" +
predicates.map {|p| p.to_sql(formatter)}.join(" #{predicate_sql} ") +
")"
end
end
class Any < Polyadic
def predicate_sql; "OR" end
end
class All < Polyadic
def predicate_sql; "AND" end
end
@ -77,7 +77,7 @@ module Arel
class Match < Binary
def predicate_sql; 'LIKE' end
end
class NotMatch < Binary
def predicate_sql; 'NOT LIKE' end
end
@ -92,10 +92,10 @@ module Arel
super
end
end
def predicate_sql; operand2.inclusion_predicate_sql end
end
class NotIn < Binary
def predicate_sql; operand2.exclusion_predicate_sql end
end

View file

@ -29,7 +29,7 @@ module Arel
def inclusion_predicate_sql
value.inclusion_predicate_sql
end
def exclusion_predicate_sql
value.exclusion_predicate_sql
end
@ -37,7 +37,7 @@ module Arel
def equality_predicate_sql
value.equality_predicate_sql
end
def inequality_predicate_sql
value.inequality_predicate_sql
end

View file

@ -21,7 +21,7 @@ module Arel
def inclusion_predicate_sql
"IN"
end
def exclusion_predicate_sql
"NOT IN"
end

View file

@ -54,4 +54,4 @@ module Arel
end
end
end
end
end

View file

@ -116,4 +116,4 @@ module Arel
end
end
end
end
end

View file

@ -39,4 +39,4 @@ module Arel
end
end
end
end
end

View file

@ -116,4 +116,4 @@ module Arel
end
end
end
end
end

View file

@ -40,4 +40,4 @@ module Arel
end
end
end
end
end

View file

@ -21,4 +21,4 @@ module Arel
end
end
end
end
end

View file

@ -99,7 +99,7 @@ module Arel
end
end
end
describe 'when relating to a range with an excluded end' do
before do
@range = 1...3

View file

@ -39,4 +39,4 @@ describe "Arel" do
it_should_behave_like 'A Relation'
end
end
end

View file

@ -28,4 +28,4 @@ describe "Arel" do
end
end
end
end
end

View file

@ -44,7 +44,7 @@ share_examples_for 'A Relation' do
expected = @expected.select { |r| r[@relation[:age]] != @pivot[@relation[:age]] }
@relation.where(@relation[:age].not_eq(@pivot[@relation[:age]])).should have_rows(expected)
end
it "finds rows with an not eq complement predicate" do
expected = @expected.select { |r| r[@relation[:age]] == @pivot[@relation[:age]] }
@relation.where(@relation[:age].not_eq(@pivot[@relation[:age]]).complement).should have_rows(expected)
@ -54,7 +54,7 @@ share_examples_for 'A Relation' do
expected = @expected.select { |r| r[@relation[:age]] < @pivot[@relation[:age]] }
@relation.where(@relation[:age].lt(@pivot[@relation[:age]])).should have_rows(expected)
end
it "finds rows with a less than complement predicate" do
expected = @expected.select { |r| r[@relation[:age]] >= @pivot[@relation[:age]] }
@relation.where(@relation[:age].lt(@pivot[@relation[:age]]).complement).should have_rows(expected)
@ -64,7 +64,7 @@ share_examples_for 'A Relation' do
expected = @expected.select { |r| r[@relation[:age]] <= @pivot[@relation[:age]] }
@relation.where(@relation[:age].lteq(@pivot[@relation[:age]])).should have_rows(expected)
end
it "finds rows with a less than or equal to complement predicate" do
expected = @expected.select { |r| r[@relation[:age]] > @pivot[@relation[:age]] }
@relation.where(@relation[:age].lteq(@pivot[@relation[:age]]).complement).should have_rows(expected)
@ -74,7 +74,7 @@ share_examples_for 'A Relation' do
expected = @expected.select { |r| r[@relation[:age]] > @pivot[@relation[:age]] }
@relation.where(@relation[:age].gt(@pivot[@relation[:age]])).should have_rows(expected)
end
it "finds rows with a greater than complement predicate" do
expected = @expected.select { |r| r[@relation[:age]] <= @pivot[@relation[:age]] }
@relation.where(@relation[:age].gt(@pivot[@relation[:age]]).complement).should have_rows(expected)
@ -84,7 +84,7 @@ share_examples_for 'A Relation' do
expected = @expected.select { |r| r[@relation[:age]] >= @pivot[@relation[:age]] }
@relation.where(@relation[:age].gteq(@pivot[@relation[:age]])).should have_rows(expected)
end
it "finds rows with a greater than or equal to complement predicate" do
expected = @expected.select { |r| r[@relation[:age]] < @pivot[@relation[:age]] }
@relation.where(@relation[:age].gteq(@pivot[@relation[:age]]).complement).should have_rows(expected)
@ -94,17 +94,17 @@ share_examples_for 'A Relation' do
expected = @expected.select { |r| r[@relation[:name]] =~ /#{@pivot[@relation[:name]]}/ }
@relation.where(@relation[:name].matches(/#{@pivot[@relation[:name]]}/)).should have_rows(expected)
end
it "finds rows with a matches complement predicate" do
expected = @expected.select { |r| r[@relation[:name]] !~ /#{@pivot[@relation[:name]]}/ }
@relation.where(@relation[:name].matches(/#{@pivot[@relation[:name]]}/).complement).should have_rows(expected)
end
it "finds rows with a not matches predicate" do
expected = @expected.select { |r| r[@relation[:name]] !~ /#{@pivot[@relation[:name]]}/ }
@relation.where(@relation[:name].not_matches(/#{@pivot[@relation[:name]]}/)).should have_rows(expected)
end
it "finds rows with a not matches complement predicate" do
expected = @expected.select { |r| r[@relation[:name]] =~ /#{@pivot[@relation[:name]]}/ }
@relation.where(@relation[:name].not_matches(/#{@pivot[@relation[:name]]}/).complement).should have_rows(expected)
@ -114,37 +114,37 @@ share_examples_for 'A Relation' do
expected = @expected.select {|r| r[@relation[:age]] >=3 && r[@relation[:age]] <= 20}
@relation.where(@relation[:age].in(3..20)).should have_rows(expected)
end
it "finds rows with an in complement predicate" do
expected = @expected.select {|r| !(r[@relation[:age]] >=3 && r[@relation[:age]] <= 20)}
@relation.where(@relation[:age].in(3..20).complement).should have_rows(expected)
end
it "finds rows with a not in predicate" do
expected = @expected.select {|r| !(r[@relation[:age]] >=3 && r[@relation[:age]] <= 20)}
@relation.where(@relation[:age].not_in(3..20)).should have_rows(expected)
end
it "finds rows with a not in complement predicate" do
expected = @expected.select {|r| r[@relation[:age]] >=3 && r[@relation[:age]] <= 20}
@relation.where(@relation[:age].not_in(3..20).complement).should have_rows(expected)
end
it "finds rows with a polyadic predicate of class Any" do
expected = @expected.select {|r| [2,4,8,16].include?(r[@relation[:age]])}
@relation.where(@relation[:age].in_any([2,4], [8, 16])).should have_rows(expected)
end
it "finds rows with a polyadic predicate of class Any complement" do
expected = @expected.select {|r| ![2,4,8,16].include?(r[@relation[:age]])}
@relation.where(@relation[:age].in_any([2,4], [8, 16]).complement).should have_rows(expected)
end
it "finds rows with a polyadic predicate of class All" do
expected = @expected.select {|r| r[@relation[:name]] =~ /Name/ && r[@relation[:name]] =~ /1/}
@relation.where(@relation[:name].matches_all(/Name/, /1/)).should have_rows(expected)
end
it "finds rows with a polyadic predicate of class All complement" do
expected = @expected.select {|r| !(r[@relation[:name]] =~ /Name/ && r[@relation[:name]] =~ /1/)}
@relation.where(@relation[:name].matches_all(/Name/, /1/).complement).should have_rows(expected)
@ -252,4 +252,4 @@ share_examples_for 'A Relation' do
actual.should == expected[3..-1]
end
end
end
end

View file

@ -3,4 +3,4 @@ module Check
# See: https://rspec.lighthouseapp.com/projects/5645/tickets/504
def check(*args)
end
end
end

View file

@ -11,4 +11,4 @@ ActiveRecord::Base.configurations = {
:encoding => 'utf8',
:database => 'arel_unit',
}
}
}

View file

@ -14,4 +14,4 @@ ActiveRecord::Base.configurations = {
:password => 'arel_unit',
:database => 'orcl',
}
}
}

View file

@ -10,4 +10,4 @@ ActiveRecord::Base.configurations = {
:encoding => 'utf8',
:database => 'arel_unit',
}
}
}

View file

@ -25,4 +25,4 @@ module AdapterGuards
def valid_adapters
%w[mysql postgresql sqlite3 oracle]
end
end
end

View file

@ -1,4 +1,4 @@
require "support/matchers/be_like"
require "support/matchers/disambiguate_attributes"
require "support/matchers/hash_the_same_as"
require "support/matchers/have_rows"
require "support/matchers/have_rows"

View file

@ -15,4 +15,4 @@ module Matchers
found.compact.length == expected.length && got.compact.length == expected.length
end
end
end
end

View file

@ -59,4 +59,4 @@ module Arel
insert.record
end
end
end
end