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

moved bind to factory of select

This commit is contained in:
Nick Kallen 2008-04-11 13:47:06 -07:00
parent 89b354bf97
commit 42c42bfa50
8 changed files with 28 additions and 33 deletions

View file

@ -1,5 +1,4 @@
require 'rubygems' require 'rubygems'
require 'spec'
require 'spec/rake/spectask' require 'spec/rake/spectask'
Spec::Rake::SpecTask.new do |t| Spec::Rake::SpecTask.new do |t|

View file

@ -1,27 +1,28 @@
todo: todo:
- re-evaluate bind -- does bind belong inside the relation / predicate classes or in the factory methods?
- - mock out database
- #bind in Attribute and Expression should be doing a descend?
- try to make aggegration testing in join spec to be a bit more unit-like
- finish pending tests
- test relation, table reset
- standardize quoting
- use strings everywhere, not symbols ?
- "unit" test sql strategies
- use real world examples, so they should be like a tutorial.
- string passthrough: - string passthrough:
:joins=>"INNER JOIN posts ON comments.post_id = posts.id" :joins=>"INNER JOIN posts ON comments.post_id = posts.id"
- shit this one is hard at the moment. - shit this one is hard at the moment.
- need adapters for this form: - need adapters for this form:
{:conditions=>["approved = ?", false]} {:conditions=>["approved = ?", false]}
{:conditions=>{:approved=>false}} {:conditions=>{:approved=>false}}
{:conditions=>{"topics.approved"=>false}} {:conditions=>{"topics.approved"=>false}}
{:conditions=>{:address=>#<Address:0x3489b3c @street="Funny Street", @country="Loony Land", @city="Scary Town">, "customers.name"=>"David1"}} {:conditions=>{:address=>#<Address:0x3489b3c @street="Funny Street", @country="Loony Land", @city="Scary Town">, "customers.name"=>"David1"}}
- re-evaluate bind -- does bind belong inside the relation / predicate classes or in the factory methods?
- #bind in Attribute and Expression should be doing a descend?
- try to make aggration testing in join spec to be a bit more unit-like
- finish pending tests
- test relation, table reset
- cache expiry on write - cache expiry on write
- rewrite of querycache test in light of this - rewrite of querycache test in light of this
- standardize quoting
- use strings everywhere, not symbols ?
- "unit" test sql strategies
- use real world examples, so they should be like a tutorial.
- rename the tion (Selection) classes so that words that don't end in tion don't seem inconsistent - rename the tion (Selection) classes so that words that don't end in tion don't seem inconsistent
- mock out database
done: done:
. Relation <=> Relation -> InnerJoinOperation . Relation <=> Relation -> InnerJoinOperation

View file

@ -46,27 +46,19 @@ module ActiveRelation
end end
class GreaterThanOrEqualTo < Binary class GreaterThanOrEqualTo < Binary
def predicate_sql def predicate_sql; '>=' end
'>='
end
end end
class GreaterThan < Binary class GreaterThan < Binary
def predicate_sql def predicate_sql; '>' end
'>'
end
end end
class LessThanOrEqualTo < Binary class LessThanOrEqualTo < Binary
def predicate_sql def predicate_sql; '<=' end
'<='
end
end end
class LessThan < Binary class LessThan < Binary
def predicate_sql def predicate_sql; '<' end
'<'
end
end end
class Match < Binary class Match < Binary
@ -74,8 +66,6 @@ module ActiveRelation
end end
class In < Binary class In < Binary
def predicate_sql def predicate_sql; operand2.inclusion_predicate_sql end
operand2.inclusion_predicate_sql
end
end end
end end

View file

@ -38,7 +38,7 @@ module ActiveRelation
end end
def select(*predicates) def select(*predicates)
Selection.new(self, *predicates.collect {|p| p.bind(self)}) Selection.new(self, *predicates)
end end
def project(*attributes) def project(*attributes)

View file

@ -3,8 +3,9 @@ module ActiveRelation
attr_reader :predicate attr_reader :predicate
def initialize(relation, *predicates) def initialize(relation, *predicates)
@predicate = predicates.shift predicate = predicates.shift
@relation = predicates.empty?? relation : Selection.new(relation, *predicates) @relation = predicates.empty?? relation : Selection.new(relation, *predicates)
@predicate = predicate.bind(@relation)
end end
def ==(other) def ==(other)

View file

@ -91,7 +91,7 @@ module ActiveRelation
end end
it "accepts arbitrary strings" do it "accepts arbitrary strings" do
@relation.select("arbitrary").should == Selection.new(@relation, Value.new("arbitrary", @relation)) @relation.select("arbitrary").should == Selection.new(@relation, "arbitrary")
end end
end end

View file

@ -26,9 +26,13 @@ module ActiveRelation
end end
describe '#descend' do describe '#descend' do
before do
@selection = Selection.new(@relation, @predicate)
end
it "distributes a block over the relation and predicates" do it "distributes a block over the relation and predicates" do
Selection.new(@relation, @predicate).descend(&:qualify). \ @selection.descend(&:qualify). \
should == Selection.new(@relation.descend(&:qualify), @predicate.descend(&:qualify)) should == Selection.new(@selection.relation.descend(&:qualify), @selection.predicate.qualify)
end end
end end
@ -45,7 +49,7 @@ module ActiveRelation
describe 'when given a string' do describe 'when given a string' do
before do before do
@string = "asdf".bind(@relation) @string = "asdf"
end end
it "passes the string through to the where clause" do it "passes the string through to the where clause" do