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/float"
require "arel/algebra/attributes/integer" require "arel/algebra/attributes/integer"
require "arel/algebra/attributes/string" 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) def eq(other)
Predicates::Equality.new(self, other) Predicates::Equality.new(self, other)
end end
def eq_any(*others) def eq_any(*others)
Predicates::Any.build(Predicates::Equality, self, *others) Predicates::Any.build(Predicates::Equality, self, *others)
end end
def eq_all(*others) def eq_all(*others)
Predicates::All.build(Predicates::Equality, self, *others) Predicates::All.build(Predicates::Equality, self, *others)
end end
def not_eq(other) def not_eq(other)
Predicates::Inequality.new(self, other) Predicates::Inequality.new(self, other)
end end
def not_eq_any(*others) def not_eq_any(*others)
Predicates::Any.build(Predicates::Inequality, self, *others) Predicates::Any.build(Predicates::Inequality, self, *others)
end end
def not_eq_all(*others) def not_eq_all(*others)
Predicates::All.build(Predicates::Inequality, self, *others) Predicates::All.build(Predicates::Inequality, self, *others)
end end
def lt(other) def lt(other)
Predicates::LessThan.new(self, other) Predicates::LessThan.new(self, other)
end end
def lt_any(*others) def lt_any(*others)
Predicates::Any.build(Predicates::LessThan, self, *others) Predicates::Any.build(Predicates::LessThan, self, *others)
end end
def lt_all(*others) def lt_all(*others)
Predicates::All.build(Predicates::LessThan, self, *others) Predicates::All.build(Predicates::LessThan, self, *others)
end end
def lteq(other) def lteq(other)
Predicates::LessThanOrEqualTo.new(self, other) Predicates::LessThanOrEqualTo.new(self, other)
end end
def lteq_any(*others) def lteq_any(*others)
Predicates::Any.build(Predicates::LessThanOrEqualTo, self, *others) Predicates::Any.build(Predicates::LessThanOrEqualTo, self, *others)
end end
def lteq_all(*others) def lteq_all(*others)
Predicates::All.build(Predicates::LessThanOrEqualTo, self, *others) Predicates::All.build(Predicates::LessThanOrEqualTo, self, *others)
end end
def gt(other) def gt(other)
Predicates::GreaterThan.new(self, other) Predicates::GreaterThan.new(self, other)
end end
def gt_any(*others) def gt_any(*others)
Predicates::Any.build(Predicates::GreaterThan, self, *others) Predicates::Any.build(Predicates::GreaterThan, self, *others)
end end
def gt_all(*others) def gt_all(*others)
Predicates::All.build(Predicates::GreaterThan, self, *others) Predicates::All.build(Predicates::GreaterThan, self, *others)
end end
def gteq(other) def gteq(other)
Predicates::GreaterThanOrEqualTo.new(self, other) Predicates::GreaterThanOrEqualTo.new(self, other)
end end
def gteq_any(*others) def gteq_any(*others)
Predicates::Any.build(Predicates::GreaterThanOrEqualTo, self, *others) Predicates::Any.build(Predicates::GreaterThanOrEqualTo, self, *others)
end end
def gteq_all(*others) def gteq_all(*others)
Predicates::All.build(Predicates::GreaterThanOrEqualTo, self, *others) Predicates::All.build(Predicates::GreaterThanOrEqualTo, self, *others)
end end
def matches(other) def matches(other)
Predicates::Match.new(self, other) Predicates::Match.new(self, other)
end end
def matches_any(*others) def matches_any(*others)
Predicates::Any.build(Predicates::Match, self, *others) Predicates::Any.build(Predicates::Match, self, *others)
end end
def matches_all(*others) def matches_all(*others)
Predicates::All.build(Predicates::Match, self, *others) Predicates::All.build(Predicates::Match, self, *others)
end end
def not_matches(other) def not_matches(other)
Predicates::NotMatch.new(self, other) Predicates::NotMatch.new(self, other)
end end
def not_matches_any(*others) def not_matches_any(*others)
Predicates::Any.build(Predicates::NotMatch, self, *others) Predicates::Any.build(Predicates::NotMatch, self, *others)
end end
def not_matches_all(*others) def not_matches_all(*others)
Predicates::All.build(Predicates::NotMatch, self, *others) Predicates::All.build(Predicates::NotMatch, self, *others)
end end
def in(other) def in(other)
Predicates::In.new(self, other) Predicates::In.new(self, other)
end end
def in_any(*others) def in_any(*others)
Predicates::Any.build(Predicates::In, self, *others) Predicates::Any.build(Predicates::In, self, *others)
end end
def in_all(*others) def in_all(*others)
Predicates::All.build(Predicates::In, self, *others) Predicates::All.build(Predicates::In, self, *others)
end end
def not_in(other) def not_in(other)
Predicates::NotIn.new(self, other) Predicates::NotIn.new(self, other)
end end
def not_in_any(*others) def not_in_any(*others)
Predicates::Any.build(Predicates::NotIn, self, *others) Predicates::Any.build(Predicates::NotIn, self, *others)
end end
def not_in_all(*others) def not_in_all(*others)
Predicates::All.build(Predicates::NotIn, self, *others) Predicates::All.build(Predicates::NotIn, self, *others)
end end

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -28,4 +28,4 @@ describe "Arel" do
end end
end 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]] } expected = @expected.select { |r| r[@relation[:age]] != @pivot[@relation[:age]] }
@relation.where(@relation[:age].not_eq(@pivot[@relation[:age]])).should have_rows(expected) @relation.where(@relation[:age].not_eq(@pivot[@relation[:age]])).should have_rows(expected)
end end
it "finds rows with an not eq complement predicate" do it "finds rows with an not eq complement predicate" do
expected = @expected.select { |r| r[@relation[:age]] == @pivot[@relation[:age]] } expected = @expected.select { |r| r[@relation[:age]] == @pivot[@relation[:age]] }
@relation.where(@relation[:age].not_eq(@pivot[@relation[:age]]).complement).should have_rows(expected) @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]] } expected = @expected.select { |r| r[@relation[:age]] < @pivot[@relation[:age]] }
@relation.where(@relation[:age].lt(@pivot[@relation[:age]])).should have_rows(expected) @relation.where(@relation[:age].lt(@pivot[@relation[:age]])).should have_rows(expected)
end end
it "finds rows with a less than complement predicate" do it "finds rows with a less than complement predicate" do
expected = @expected.select { |r| r[@relation[:age]] >= @pivot[@relation[:age]] } expected = @expected.select { |r| r[@relation[:age]] >= @pivot[@relation[:age]] }
@relation.where(@relation[:age].lt(@pivot[@relation[:age]]).complement).should have_rows(expected) @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]] } expected = @expected.select { |r| r[@relation[:age]] <= @pivot[@relation[:age]] }
@relation.where(@relation[:age].lteq(@pivot[@relation[:age]])).should have_rows(expected) @relation.where(@relation[:age].lteq(@pivot[@relation[:age]])).should have_rows(expected)
end end
it "finds rows with a less than or equal to complement predicate" do it "finds rows with a less than or equal to complement predicate" do
expected = @expected.select { |r| r[@relation[:age]] > @pivot[@relation[:age]] } expected = @expected.select { |r| r[@relation[:age]] > @pivot[@relation[:age]] }
@relation.where(@relation[:age].lteq(@pivot[@relation[:age]]).complement).should have_rows(expected) @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]] } expected = @expected.select { |r| r[@relation[:age]] > @pivot[@relation[:age]] }
@relation.where(@relation[:age].gt(@pivot[@relation[:age]])).should have_rows(expected) @relation.where(@relation[:age].gt(@pivot[@relation[:age]])).should have_rows(expected)
end end
it "finds rows with a greater than complement predicate" do it "finds rows with a greater than complement predicate" do
expected = @expected.select { |r| r[@relation[:age]] <= @pivot[@relation[:age]] } expected = @expected.select { |r| r[@relation[:age]] <= @pivot[@relation[:age]] }
@relation.where(@relation[:age].gt(@pivot[@relation[:age]]).complement).should have_rows(expected) @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]] } expected = @expected.select { |r| r[@relation[:age]] >= @pivot[@relation[:age]] }
@relation.where(@relation[:age].gteq(@pivot[@relation[:age]])).should have_rows(expected) @relation.where(@relation[:age].gteq(@pivot[@relation[:age]])).should have_rows(expected)
end end
it "finds rows with a greater than or equal to complement predicate" do it "finds rows with a greater than or equal to complement predicate" do
expected = @expected.select { |r| r[@relation[:age]] < @pivot[@relation[:age]] } expected = @expected.select { |r| r[@relation[:age]] < @pivot[@relation[:age]] }
@relation.where(@relation[:age].gteq(@pivot[@relation[:age]]).complement).should have_rows(expected) @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]]}/ } expected = @expected.select { |r| r[@relation[:name]] =~ /#{@pivot[@relation[:name]]}/ }
@relation.where(@relation[:name].matches(/#{@pivot[@relation[:name]]}/)).should have_rows(expected) @relation.where(@relation[:name].matches(/#{@pivot[@relation[:name]]}/)).should have_rows(expected)
end end
it "finds rows with a matches complement predicate" do it "finds rows with a matches complement predicate" do
expected = @expected.select { |r| r[@relation[:name]] !~ /#{@pivot[@relation[:name]]}/ } expected = @expected.select { |r| r[@relation[:name]] !~ /#{@pivot[@relation[:name]]}/ }
@relation.where(@relation[:name].matches(/#{@pivot[@relation[:name]]}/).complement).should have_rows(expected) @relation.where(@relation[:name].matches(/#{@pivot[@relation[:name]]}/).complement).should have_rows(expected)
end end
it "finds rows with a not matches predicate" do it "finds rows with a not matches predicate" do
expected = @expected.select { |r| r[@relation[:name]] !~ /#{@pivot[@relation[:name]]}/ } expected = @expected.select { |r| r[@relation[:name]] !~ /#{@pivot[@relation[:name]]}/ }
@relation.where(@relation[:name].not_matches(/#{@pivot[@relation[:name]]}/)).should have_rows(expected) @relation.where(@relation[:name].not_matches(/#{@pivot[@relation[:name]]}/)).should have_rows(expected)
end end
it "finds rows with a not matches complement predicate" do it "finds rows with a not matches complement predicate" do
expected = @expected.select { |r| r[@relation[:name]] =~ /#{@pivot[@relation[:name]]}/ } expected = @expected.select { |r| r[@relation[:name]] =~ /#{@pivot[@relation[:name]]}/ }
@relation.where(@relation[:name].not_matches(/#{@pivot[@relation[:name]]}/).complement).should have_rows(expected) @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} expected = @expected.select {|r| r[@relation[:age]] >=3 && r[@relation[:age]] <= 20}
@relation.where(@relation[:age].in(3..20)).should have_rows(expected) @relation.where(@relation[:age].in(3..20)).should have_rows(expected)
end end
it "finds rows with an in complement predicate" do it "finds rows with an in complement predicate" do
expected = @expected.select {|r| !(r[@relation[:age]] >=3 && r[@relation[:age]] <= 20)} expected = @expected.select {|r| !(r[@relation[:age]] >=3 && r[@relation[:age]] <= 20)}
@relation.where(@relation[:age].in(3..20).complement).should have_rows(expected) @relation.where(@relation[:age].in(3..20).complement).should have_rows(expected)
end end
it "finds rows with a not in predicate" do it "finds rows with a not in predicate" do
expected = @expected.select {|r| !(r[@relation[:age]] >=3 && r[@relation[:age]] <= 20)} expected = @expected.select {|r| !(r[@relation[:age]] >=3 && r[@relation[:age]] <= 20)}
@relation.where(@relation[:age].not_in(3..20)).should have_rows(expected) @relation.where(@relation[:age].not_in(3..20)).should have_rows(expected)
end end
it "finds rows with a not in complement predicate" do it "finds rows with a not in complement predicate" do
expected = @expected.select {|r| r[@relation[:age]] >=3 && r[@relation[:age]] <= 20} 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) @relation.where(@relation[:age].not_in(3..20).complement).should have_rows(expected)
end end
it "finds rows with a polyadic predicate of class Any" do it "finds rows with a polyadic predicate of class Any" do
expected = @expected.select {|r| [2,4,8,16].include?(r[@relation[:age]])} 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) @relation.where(@relation[:age].in_any([2,4], [8, 16])).should have_rows(expected)
end end
it "finds rows with a polyadic predicate of class Any complement" do it "finds rows with a polyadic predicate of class Any complement" do
expected = @expected.select {|r| ![2,4,8,16].include?(r[@relation[:age]])} 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) @relation.where(@relation[:age].in_any([2,4], [8, 16]).complement).should have_rows(expected)
end end
it "finds rows with a polyadic predicate of class All" do it "finds rows with a polyadic predicate of class All" do
expected = @expected.select {|r| r[@relation[:name]] =~ /Name/ && r[@relation[:name]] =~ /1/} expected = @expected.select {|r| r[@relation[:name]] =~ /Name/ && r[@relation[:name]] =~ /1/}
@relation.where(@relation[:name].matches_all(/Name/, /1/)).should have_rows(expected) @relation.where(@relation[:name].matches_all(/Name/, /1/)).should have_rows(expected)
end end
it "finds rows with a polyadic predicate of class All complement" do it "finds rows with a polyadic predicate of class All complement" do
expected = @expected.select {|r| !(r[@relation[:name]] =~ /Name/ && r[@relation[:name]] =~ /1/)} 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) @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] actual.should == expected[3..-1]
end end
end end
end end

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,4 +1,4 @@
require "support/matchers/be_like" require "support/matchers/be_like"
require "support/matchers/disambiguate_attributes" require "support/matchers/disambiguate_attributes"
require "support/matchers/hash_the_same_as" 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 found.compact.length == expected.length && got.compact.length == expected.length
end end
end end
end end

View file

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