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:
parent
89b354bf97
commit
42c42bfa50
8 changed files with 28 additions and 33 deletions
1
Rakefile
1
Rakefile
|
@ -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|
|
||||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue