diff options
Diffstat (limited to 'spec')
15 files changed, 127 insertions, 162 deletions
diff --git a/spec/active_relation/predicates/binary_predicate_spec.rb b/spec/active_relation/predicates/binary_predicate_spec.rb index 0bddae8491..02c72ef96d 100644 --- a/spec/active_relation/predicates/binary_predicate_spec.rb +++ b/spec/active_relation/predicates/binary_predicate_spec.rb @@ -1,12 +1,12 @@ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper') -describe BinaryPredicate do +describe ActiveRelation::Predicates::Binary do before do - @relation1 = TableRelation.new(:foo) - @relation2 = TableRelation.new(:bar) - @attribute1 = Attribute.new(@relation1, :name1) - @attribute2 = Attribute.new(@relation2, :name2) - class ConcreteBinaryPredicate < BinaryPredicate + @relation1 = ActiveRelation::Relations::Table.new(:foo) + @relation2 = ActiveRelation::Relations::Table.new(:bar) + @attribute1 = ActiveRelation::Primitives::Attribute.new(@relation1, :name1) + @attribute2 = ActiveRelation::Primitives::Attribute.new(@relation2, :name2) + class ActiveRelation::Predicates::ConcreteBinary < ActiveRelation::Predicates::Binary def predicate_sql "<=>" end @@ -15,26 +15,26 @@ describe BinaryPredicate do describe '==' do it "obtains if attribute1 and attribute2 are identical" do - BinaryPredicate.new(@attribute1, @attribute2).should == BinaryPredicate.new(@attribute1, @attribute2) - BinaryPredicate.new(@attribute1, @attribute2).should_not == BinaryPredicate.new(@attribute1, @attribute1) + ActiveRelation::Predicates::Binary.new(@attribute1, @attribute2).should == ActiveRelation::Predicates::Binary.new(@attribute1, @attribute2) + ActiveRelation::Predicates::Binary.new(@attribute1, @attribute2).should_not == ActiveRelation::Predicates::Binary.new(@attribute1, @attribute1) end - it "obtains if the concrete type of the BinaryPredicates are identical" do - ConcreteBinaryPredicate.new(@attribute1, @attribute2).should == ConcreteBinaryPredicate.new(@attribute1, @attribute2) - BinaryPredicate.new(@attribute1, @attribute2).should_not == ConcreteBinaryPredicate.new(@attribute1, @attribute2) + it "obtains if the concrete type of the ActiveRelation::Predicates::Binarys are identical" do + ActiveRelation::Predicates::Binary.new(@attribute1, @attribute2).should == ActiveRelation::Predicates::Binary.new(@attribute1, @attribute2) + ActiveRelation::Predicates::Binary.new(@attribute1, @attribute2).should_not == ActiveRelation::Predicates::ConcreteBinary.new(@attribute1, @attribute2) end end describe '#qualify' do it "distributes over the predicates and attributes" do - ConcreteBinaryPredicate.new(@attribute1, @attribute2).qualify. \ - should == ConcreteBinaryPredicate.new(@attribute1.qualify, @attribute2.qualify) + ActiveRelation::Predicates::ConcreteBinary.new(@attribute1, @attribute2).qualify. \ + should == ActiveRelation::Predicates::ConcreteBinary.new(@attribute1.qualify, @attribute2.qualify) end end describe '#to_sql' do it 'manufactures correct sql' do - ConcreteBinaryPredicate.new(@attribute1, @attribute2).to_sql.should be_like(""" + ActiveRelation::Predicates::ConcreteBinary.new(@attribute1, @attribute2).to_sql.should be_like(""" `foo`.`name1` <=> `bar`.`name2` """) end diff --git a/spec/active_relation/predicates/equality_predicate_spec.rb b/spec/active_relation/predicates/equality_predicate_spec.rb index af43b754e0..b3c7b597a0 100644 --- a/spec/active_relation/predicates/equality_predicate_spec.rb +++ b/spec/active_relation/predicates/equality_predicate_spec.rb @@ -1,25 +1,25 @@ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper') -describe EqualityPredicate do +describe ActiveRelation::Predicates::Equality do before do - @relation1 = TableRelation.new(:foo) - @relation2 = TableRelation.new(:bar) - @attribute1 = Attribute.new(@relation1, :name) - @attribute2 = Attribute.new(@relation2, :name) + @relation1 = ActiveRelation::Relations::Table.new(:foo) + @relation2 = ActiveRelation::Relations::Table.new(:bar) + @attribute1 = ActiveRelation::Primitives::Attribute.new(@relation1, :name) + @attribute2 = ActiveRelation::Primitives::Attribute.new(@relation2, :name) end describe '==' do it "obtains if attribute1 and attribute2 are identical" do - EqualityPredicate.new(@attribute1, @attribute2).should == EqualityPredicate.new(@attribute1, @attribute2) - EqualityPredicate.new(@attribute1, @attribute2).should_not == EqualityPredicate.new(@attribute1, @attribute1) + ActiveRelation::Predicates::Equality.new(@attribute1, @attribute2).should == ActiveRelation::Predicates::Equality.new(@attribute1, @attribute2) + ActiveRelation::Predicates::Equality.new(@attribute1, @attribute2).should_not == ActiveRelation::Predicates::Equality.new(@attribute1, @attribute1) end it "obtains if the concrete type of the predicates are identical" do - EqualityPredicate.new(@attribute1, @attribute2).should_not == BinaryPredicate.new(@attribute1, @attribute2) + ActiveRelation::Predicates::Equality.new(@attribute1, @attribute2).should_not == ActiveRelation::Predicates::Binary.new(@attribute1, @attribute2) end it "is commutative on the attributes" do - EqualityPredicate.new(@attribute1, @attribute2).should == EqualityPredicate.new(@attribute2, @attribute1) + ActiveRelation::Predicates::Equality.new(@attribute1, @attribute2).should == ActiveRelation::Predicates::Equality.new(@attribute2, @attribute1) end end end
\ No newline at end of file diff --git a/spec/active_relation/predicates/relation_inclusion_predicate_spec.rb b/spec/active_relation/predicates/relation_inclusion_predicate_spec.rb index f8c911429b..a01f4fb76b 100644 --- a/spec/active_relation/predicates/relation_inclusion_predicate_spec.rb +++ b/spec/active_relation/predicates/relation_inclusion_predicate_spec.rb @@ -1,16 +1,16 @@ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper') -describe RelationInclusionPredicate do +describe ActiveRelation::Predicates::RelationInclusion do before do - @relation1 = TableRelation.new(:foo) - @relation2 = TableRelation.new(:bar) + @relation1 = ActiveRelation::Relations::Table.new(:foo) + @relation2 = ActiveRelation::Relations::Table.new(:bar) @attribute = @relation1[:baz] end - describe RelationInclusionPredicate, '==' do + describe ActiveRelation::Predicates::RelationInclusion, '==' do it "obtains if attribute1 and attribute2 are identical" do - RelationInclusionPredicate.new(@attribute, @relation1).should == RelationInclusionPredicate.new(@attribute, @relation1) - RelationInclusionPredicate.new(@attribute, @relation1).should_not == RelationInclusionPredicate.new(@attribute, @relation2) + ActiveRelation::Predicates::RelationInclusion.new(@attribute, @relation1).should == ActiveRelation::Predicates::RelationInclusion.new(@attribute, @relation1) + ActiveRelation::Predicates::RelationInclusion.new(@attribute, @relation1).should_not == ActiveRelation::Predicates::RelationInclusion.new(@attribute, @relation2) end end end
\ No newline at end of file diff --git a/spec/active_relation/relations/attribute_spec.rb b/spec/active_relation/relations/attribute_spec.rb index 4154a91b85..71bba26aff 100644 --- a/spec/active_relation/relations/attribute_spec.rb +++ b/spec/active_relation/relations/attribute_spec.rb @@ -1,14 +1,14 @@ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper') -describe Attribute do +describe ActiveRelation::Primitives::Attribute do before do - @relation1 = TableRelation.new(:foo) - @relation2 = TableRelation.new(:bar) + @relation1 = ActiveRelation::Relations::Table.new(:foo) + @relation2 = ActiveRelation::Relations::Table.new(:bar) end describe '#alias' do it "manufactures an aliased attributed" do - @relation1[:id].alias(:alias).should == Attribute.new(@relation1, :id, :alias) + @relation1[:id].alias(:alias).should == ActiveRelation::Primitives::Attribute.new(@relation1, :id, :alias) end end @@ -26,51 +26,51 @@ describe Attribute do describe '#eql?' do it "obtains if the relation and attribute name are identical" do - Attribute.new(@relation1, :name).should be_eql(Attribute.new(@relation1, :name)) - Attribute.new(@relation1, :name).should_not be_eql(Attribute.new(@relation1, :another_name)) - Attribute.new(@relation1, :name).should_not be_eql(Attribute.new(@relation2, :name)) + ActiveRelation::Primitives::Attribute.new(@relation1, :name).should be_eql(ActiveRelation::Primitives::Attribute.new(@relation1, :name)) + ActiveRelation::Primitives::Attribute.new(@relation1, :name).should_not be_eql(ActiveRelation::Primitives::Attribute.new(@relation1, :another_name)) + ActiveRelation::Primitives::Attribute.new(@relation1, :name).should_not be_eql(ActiveRelation::Primitives::Attribute.new(@relation2, :name)) end end describe 'predications' do before do - @attribute1 = Attribute.new(@relation1, :name) - @attribute2 = Attribute.new(@relation2, :name) + @attribute1 = ActiveRelation::Primitives::Attribute.new(@relation1, :name) + @attribute2 = ActiveRelation::Primitives::Attribute.new(@relation2, :name) end describe '==' do it "manufactures an equality predicate" do - (@attribute1 == @attribute2).should == EqualityPredicate.new(@attribute1, @attribute2) + (@attribute1 == @attribute2).should == ActiveRelation::Predicates::Equality.new(@attribute1, @attribute2) end end describe '<' do it "manufactures a less-than predicate" do - (@attribute1 < @attribute2).should == LessThanPredicate.new(@attribute1, @attribute2) + (@attribute1 < @attribute2).should == ActiveRelation::Predicates::LessThan.new(@attribute1, @attribute2) end end describe '<=' do it "manufactures a less-than or equal-to predicate" do - (@attribute1 <= @attribute2).should == LessThanOrEqualToPredicate.new(@attribute1, @attribute2) + (@attribute1 <= @attribute2).should == ActiveRelation::Predicates::LessThanOrEqualTo.new(@attribute1, @attribute2) end end describe '>' do it "manufactures a greater-than predicate" do - (@attribute1 > @attribute2).should == GreaterThanPredicate.new(@attribute1, @attribute2) + (@attribute1 > @attribute2).should == ActiveRelation::Predicates::GreaterThan.new(@attribute1, @attribute2) end end describe '>=' do it "manufactures a greater-than or equal to predicate" do - (@attribute1 >= @attribute2).should == GreaterThanOrEqualToPredicate.new(@attribute1, @attribute2) + (@attribute1 >= @attribute2).should == ActiveRelation::Predicates::GreaterThanOrEqualTo.new(@attribute1, @attribute2) end end describe '=~' do it "manufactures a match predicate" do - (@attribute1 =~ /.*/).should == MatchPredicate.new(@attribute1, @attribute2) + (@attribute1 =~ /.*/).should == ActiveRelation::Predicates::Match.new(@attribute1, @attribute2) end end end diff --git a/spec/active_relation/relations/deletion_relation_spec.rb b/spec/active_relation/relations/deletion_relation_spec.rb index 5e8c5137b2..b80589bde6 100644 --- a/spec/active_relation/relations/deletion_relation_spec.rb +++ b/spec/active_relation/relations/deletion_relation_spec.rb @@ -1,20 +1,20 @@ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper') -describe DeletionRelation do +describe ActiveRelation::Relations::Deletion do before do - @relation = TableRelation.new(:users) + @relation = ActiveRelation::Relations::Table.new(:users) end describe '#to_sql' do it 'manufactures sql deleting a table relation' do - DeletionRelation.new(@relation).to_sql.should be_like(""" + ActiveRelation::Relations::Deletion.new(@relation).to_sql.should be_like(""" DELETE FROM `users` """) end it 'manufactures sql deleting a selection relation' do - DeletionRelation.new(@relation.select(@relation[:id] == 1)).to_sql.should be_like(""" + ActiveRelation::Relations::Deletion.new(@relation.select(@relation[:id] == 1)).to_sql.should be_like(""" DELETE FROM `users` WHERE `users`.`id` = 1 diff --git a/spec/active_relation/relations/insertion_relation_spec.rb b/spec/active_relation/relations/insertion_relation_spec.rb index 177918a94a..da39edf773 100644 --- a/spec/active_relation/relations/insertion_relation_spec.rb +++ b/spec/active_relation/relations/insertion_relation_spec.rb @@ -1,13 +1,13 @@ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper') -describe InsertionRelation do +describe ActiveRelation::Relations::Insertion do before do - @relation = TableRelation.new(:users) + @relation = ActiveRelation::Relations::Table.new(:users) end describe '#to_sql' do it 'manufactures sql inserting the data for one item' do - InsertionRelation.new(@relation, @relation[:name] => "nick").to_sql.should be_like(""" + ActiveRelation::Relations::Insertion.new(@relation, @relation[:name] => "nick").to_sql.should be_like(""" INSERT INTO `users` (`users`.`name`) VALUES ('nick') @@ -15,8 +15,8 @@ describe InsertionRelation do end it 'manufactures sql inserting the data for multiple items' do - nested_insertion = InsertionRelation.new(@relation, @relation[:name] => "cobra") - InsertionRelation.new(nested_insertion, nested_insertion[:name] => "commander").to_sql.should be_like(""" + nested_insertion = ActiveRelation::Relations::Insertion.new(@relation, @relation[:name] => "cobra") + ActiveRelation::Relations::Insertion.new(nested_insertion, nested_insertion[:name] => "commander").to_sql.should be_like(""" INSERT INTO `users` (`users`.`name`) VALUES ('cobra'), ('commander') diff --git a/spec/active_relation/relations/join_operation_spec.rb b/spec/active_relation/relations/join_operation_spec.rb deleted file mode 100644 index a8ab85123b..0000000000 --- a/spec/active_relation/relations/join_operation_spec.rb +++ /dev/null @@ -1,39 +0,0 @@ -require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper') - -describe 'between two relations' do - before do - @relation1 = TableRelation.new(:foo) - @relation2 = TableRelation.new(:bar) - end - - describe '==' do - it "obtains if the relations of both joins are identical" do - JoinOperation.new(@relation1, @relation2).should == JoinOperation.new(@relation1, @relation2) - JoinOperation.new(@relation1, @relation2).should_not == JoinOperation.new(@relation1, @relation1) - end - - it "is commutative on the relations" do - JoinOperation.new(@relation1, @relation2).should == JoinOperation.new(@relation2, @relation1) - end - end - - describe 'on' do - before do - @predicate = Predicate.new - @join_operation = JoinOperation.new(@relation1, @relation2) - class << @join_operation - def relation_class - JoinRelation - end - end - end - - it "manufactures a join relation of the appropriate type" do - @join_operation.on(@predicate).should == JoinRelation.new(@relation1, @relation2, @predicate) - end - - it "accepts arbitrary strings" do - @join_operation.on("arbitrary").should == JoinRelation.new(@relation1, @relation2, "arbitrary") - end - end -end
\ No newline at end of file diff --git a/spec/active_relation/relations/join_relation_spec.rb b/spec/active_relation/relations/join_relation_spec.rb index 3e60cc4c34..32771428a8 100644 --- a/spec/active_relation/relations/join_relation_spec.rb +++ b/spec/active_relation/relations/join_relation_spec.rb @@ -1,27 +1,27 @@ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper') -describe JoinRelation do +describe ActiveRelation::Relations::Join do before do - @relation1 = TableRelation.new(:foo) - @relation2 = TableRelation.new(:bar) - @predicate = EqualityPredicate.new(@relation1[:id], @relation2[:id]) + @relation1 = ActiveRelation::Relations::Table.new(:foo) + @relation2 = ActiveRelation::Relations::Table.new(:bar) + @predicate = ActiveRelation::Predicates::Equality.new(@relation1[:id], @relation2[:id]) end describe '==' do it 'obtains if the two relations and the predicate are identical' do - JoinRelation.new(@relation1, @relation2, @predicate).should == JoinRelation.new(@relation1, @relation2, @predicate) - JoinRelation.new(@relation1, @relation2, @predicate).should_not == JoinRelation.new(@relation1, @relation1, @predicate) + ActiveRelation::Relations::Join.new("INNER JOIN", @relation1, @relation2, @predicate).should == ActiveRelation::Relations::Join.new("INNER JOIN", @relation1, @relation2, @predicate) + ActiveRelation::Relations::Join.new("INNER JOIN", @relation1, @relation2, @predicate).should_not == ActiveRelation::Relations::Join.new("INNER JOIN", @relation1, @relation1, @predicate) end it 'is commutative on the relations' do - JoinRelation.new(@relation1, @relation2, @predicate).should == JoinRelation.new(@relation2, @relation1, @predicate) + ActiveRelation::Relations::Join.new("INNER JOIN", @relation1, @relation2, @predicate).should == ActiveRelation::Relations::Join.new("INNER JOIN", @relation2, @relation1, @predicate) end end describe '#qualify' do it 'distributes over the relations and predicates' do - InnerJoinRelation.new(@relation1, @relation2, @predicate).qualify. \ - should == InnerJoinRelation.new(@relation1.qualify, @relation2.qualify, @predicate.qualify) + ActiveRelation::Relations::Join.new("INNER JOIN", @relation1, @relation2, @predicate).qualify. \ + should == ActiveRelation::Relations::Join.new("INNER JOIN", @relation1.qualify, @relation2.qualify, @predicate.qualify) end end @@ -31,7 +31,7 @@ describe JoinRelation do end it 'manufactures sql joining the two tables on the predicate, merging the selects' do - InnerJoinRelation.new(@relation1, @relation2, @predicate).to_sql.should be_like(""" + ActiveRelation::Relations::Join.new("INNER JOIN", @relation1, @relation2, @predicate).to_sql.should be_like(""" SELECT `foo`.`name`, `foo`.`id`, `bar`.`name`, `bar`.`foo_id`, `bar`.`id` FROM `foo` INNER JOIN `bar` ON `foo`.`id` = `bar`.`id` diff --git a/spec/active_relation/relations/order_relation_spec.rb b/spec/active_relation/relations/order_relation_spec.rb index 8655780c37..edf2faf455 100644 --- a/spec/active_relation/relations/order_relation_spec.rb +++ b/spec/active_relation/relations/order_relation_spec.rb @@ -1,23 +1,23 @@ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper') -describe OrderRelation do +describe ActiveRelation::Relations::Order do before do - @relation1 = TableRelation.new(:foo) - @relation2 = TableRelation.new(:bar) + @relation1 = ActiveRelation::Relations::Table.new(:foo) + @relation2 = ActiveRelation::Relations::Table.new(:bar) @attribute1 = @relation1[:id] @attribute2 = @relation2[:id] end describe '#qualify' do it "distributes over the relation and attributes" do - OrderRelation.new(@relation1, @attribute1).qualify. \ - should == OrderRelation.new(@relation1.qualify, @attribute1.qualify) + ActiveRelation::Relations::Order.new(@relation1, @attribute1).qualify. \ + should == ActiveRelation::Relations::Order.new(@relation1.qualify, @attribute1.qualify) end end describe '#to_sql' do it "manufactures sql with an order clause" do - OrderRelation.new(@relation1, @attribute1).to_sql.should be_like(""" + ActiveRelation::Relations::Order.new(@relation1, @attribute1).to_sql.should be_like(""" SELECT `foo`.`name`, `foo`.`id` FROM `foo` ORDER BY `foo`.`id` diff --git a/spec/active_relation/relations/projection_relation_spec.rb b/spec/active_relation/relations/projection_relation_spec.rb index 77722a17c5..8ba571e06c 100644 --- a/spec/active_relation/relations/projection_relation_spec.rb +++ b/spec/active_relation/relations/projection_relation_spec.rb @@ -1,31 +1,31 @@ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper') -describe ProjectionRelation do +describe ActiveRelation::Relations::Projection do before do - @relation1 = TableRelation.new(:foo) - @relation2 = TableRelation.new(:bar) + @relation1 = ActiveRelation::Relations::Table.new(:foo) + @relation2 = ActiveRelation::Relations::Table.new(:bar) @attribute1 = @relation1[:id] @attribute2 = @relation2[:id] end describe '==' do it "obtains if the relations and attributes are identical" do - ProjectionRelation.new(@relation1, @attribute1, @attribute2).should == ProjectionRelation.new(@relation1, @attribute1, @attribute2) - ProjectionRelation.new(@relation1, @attribute1).should_not == ProjectionRelation.new(@relation2, @attribute1) - ProjectionRelation.new(@relation1, @attribute1).should_not == ProjectionRelation.new(@relation1, @attribute2) + ActiveRelation::Relations::Projection.new(@relation1, @attribute1, @attribute2).should == ActiveRelation::Relations::Projection.new(@relation1, @attribute1, @attribute2) + ActiveRelation::Relations::Projection.new(@relation1, @attribute1).should_not == ActiveRelation::Relations::Projection.new(@relation2, @attribute1) + ActiveRelation::Relations::Projection.new(@relation1, @attribute1).should_not == ActiveRelation::Relations::Projection.new(@relation1, @attribute2) end end describe '#qualify' do it "distributes over teh relation and attributes" do - ProjectionRelation.new(@relation1, @attribute1).qualify. \ - should == ProjectionRelation.new(@relation1.qualify, @attribute1.qualify) + ActiveRelation::Relations::Projection.new(@relation1, @attribute1).qualify. \ + should == ActiveRelation::Relations::Projection.new(@relation1.qualify, @attribute1.qualify) end end describe '#to_sql' do it "manufactures sql with a limited select clause" do - ProjectionRelation.new(@relation1, @attribute1).to_sql.should be_like(""" + ActiveRelation::Relations::Projection.new(@relation1, @attribute1).to_sql.should be_like(""" SELECT `foo`.`id` FROM `foo` """) diff --git a/spec/active_relation/relations/range_relation_spec.rb b/spec/active_relation/relations/range_relation_spec.rb index 67e2b0d164..d4107259aa 100644 --- a/spec/active_relation/relations/range_relation_spec.rb +++ b/spec/active_relation/relations/range_relation_spec.rb @@ -1,9 +1,9 @@ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper') -describe RangeRelation do +describe ActiveRelation::Relations::Range do before do - @relation1 = TableRelation.new(:foo) - @relation2 = TableRelation.new(:bar) + @relation1 = ActiveRelation::Relations::Table.new(:foo) + @relation2 = ActiveRelation::Relations::Table.new(:bar) @range1 = 1..2 @range2 = 4..9 end @@ -18,7 +18,7 @@ describe RangeRelation do it "manufactures sql with limit and offset" do range_size = @range2.last - @range2.first + 1 range_start = @range2.first - RangeRelation.new(@relation1, @range2).to_s.should be_like(""" + ActiveRelation::Relations::Range.new(@relation1, @range2).to_s.should be_like(""" SELECT `foo`.`name`, `foo`.`id` FROM `foo` LIMIT #{range_size} diff --git a/spec/active_relation/relations/relation_spec.rb b/spec/active_relation/relations/relation_spec.rb index 5d7c40a530..caee3bb527 100644 --- a/spec/active_relation/relations/relation_spec.rb +++ b/spec/active_relation/relations/relation_spec.rb @@ -1,40 +1,44 @@ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper') -describe Relation do +describe ActiveRelation::Relations::Base do before do - @relation1 = TableRelation.new(:foo) - @relation2 = TableRelation.new(:bar) - @attribute1 = Attribute.new(@relation1, :id) - @attribute2 = Attribute.new(@relation1, :name) + @relation1 = ActiveRelation::Relations::Table.new(:foo) + @relation2 = ActiveRelation::Relations::Table.new(:bar) + @attribute1 = ActiveRelation::Primitives::Attribute.new(@relation1, :id) + @attribute2 = ActiveRelation::Primitives::Attribute.new(@relation1, :name) end describe '[]' do it "manufactures an attribute when given a symbol" do - @relation1[:id].should be_kind_of(Attribute) + @relation1[:id].should == ActiveRelation::Primitives::Attribute.new(@relation1, :id) end it "manufactures a range relation when given a range" do - @relation1[1..2].should be_kind_of(RangeRelation) + @relation1[1..2].should == ActiveRelation::Relations::Range.new(@relation1, 1..2) end end describe '#include?' do it "manufactures an inclusion predicate" do - @relation1.include?(@attribute1).should be_kind_of(RelationInclusionPredicate) + @relation1.include?(@attribute1).should be_kind_of(ActiveRelation::Predicates::RelationInclusion) end end describe 'read operations' do describe 'joins' do + before do + @predicate = @relation1[:id] == @relation2[:id] + end + describe '<=>' do it "manufactures an inner join operation between those two relations" do - (@relation1 <=> @relation2).should be_kind_of(InnerJoinOperation) + (@relation1 <=> @relation2).on(@predicate).should == ActiveRelation::Relations::Join.new("INNER JOIN", @relation1, @relation2, @predicate) end end describe '<<' do it "manufactures a left outer join operation between those two relations" do - (@relation1 << @relation2).should be_kind_of(LeftOuterJoinOperation) + (@relation1 << @relation2).on(@predicate).should == ActiveRelation::Relations::Join.new("LEFT OUTER JOIN", @relation1, @relation2, @predicate) end end end @@ -45,33 +49,33 @@ describe Relation do end it "manufactures a projection relation" do - @relation1.project(@attribute1, @attribute2).should be_kind_of(ProjectionRelation) + @relation1.project(@attribute1, @attribute2).should be_kind_of(ActiveRelation::Relations::Projection) end end describe '#rename' do it "manufactures a rename relation" do - @relation1.rename(@attribute1, :foo).should be_kind_of(RenameRelation) + @relation1.rename(@attribute1, :foo).should be_kind_of(ActiveRelation::Relations::Rename) end end describe '#select' do before do - @predicate = EqualityPredicate.new(@attribute1, @attribute2) + @predicate = ActiveRelation::Predicates::Equality.new(@attribute1, @attribute2) end it "manufactures a selection relation" do - @relation1.select(@predicate).should be_kind_of(SelectionRelation) + @relation1.select(@predicate).should be_kind_of(ActiveRelation::Relations::Selection) end it "accepts arbitrary strings" do - @relation1.select("arbitrary").should be_kind_of(SelectionRelation) + @relation1.select("arbitrary").should be_kind_of(ActiveRelation::Relations::Selection) end end describe '#order' do it "manufactures an order relation" do - @relation1.order(@attribute1, @attribute2).should be_kind_of(OrderRelation) + @relation1.order(@attribute1, @attribute2).should be_kind_of(ActiveRelation::Relations::Order) end end end @@ -79,13 +83,13 @@ describe Relation do describe 'write operations' do describe '#delete' do it 'manufactures a deletion relation' do - @relation1.delete.should be_kind_of(DeletionRelation) + @relation1.delete.should be_kind_of(ActiveRelation::Relations::Deletion) end end describe '#insert' do it 'manufactures an insertion relation' do - @relation1.insert(record = {:id => 1}).should be_kind_of(InsertionRelation) + @relation1.insert(record = {:id => 1}).should be_kind_of(ActiveRelation::Relations::Insertion) end end end diff --git a/spec/active_relation/relations/rename_relation_spec.rb b/spec/active_relation/relations/rename_relation_spec.rb index 664e9c6145..6fac206ff1 100644 --- a/spec/active_relation/relations/rename_relation_spec.rb +++ b/spec/active_relation/relations/rename_relation_spec.rb @@ -1,15 +1,15 @@ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper') -describe RenameRelation do +describe ActiveRelation::Relations::Rename do before do - @relation = TableRelation.new(:foo) - @renamed_relation = RenameRelation.new(@relation, @relation[:id] => :schmid) + @relation = ActiveRelation::Relations::Table.new(:foo) + @renamed_relation = ActiveRelation::Relations::Rename.new(@relation, @relation[:id] => :schmid) end describe '#initialize' do it "manufactures nested rename relations if multiple renames are provided" do - RenameRelation.new(@relation, @relation[:id] => :humpty, @relation[:name] => :dumpty). \ - should == RenameRelation.new(RenameRelation.new(@relation, @relation[:id] => :humpty), @relation[:name] => :dumpty) + ActiveRelation::Relations::Rename.new(@relation, @relation[:id] => :humpty, @relation[:name] => :dumpty). \ + should == ActiveRelation::Relations::Rename.new(ActiveRelation::Relations::Rename.new(@relation, @relation[:id] => :humpty), @relation[:name] => :dumpty) end it "raises an exception if the alias provided is already used" do @@ -25,7 +25,7 @@ describe RenameRelation do describe '#attributes' do it "manufactures a list of attributes with the renamed attribute aliased" do - RenameRelation.new(@relation, @relation[:id] => :schmid).attributes.should == + ActiveRelation::Relations::Rename.new(@relation, @relation[:id] => :schmid).attributes.should == (@relation.attributes - [@relation[:id]]) + [@relation[:id].alias(:schmid)] end end @@ -45,8 +45,8 @@ describe RenameRelation do describe '#qualify' do it "distributes over the relation and renames" do - RenameRelation.new(@relation, @relation[:id] => :schmid).qualify. \ - should == RenameRelation.new(@relation.qualify, @relation[:id].qualify => :schmid) + ActiveRelation::Relations::Rename.new(@relation, @relation[:id] => :schmid).qualify. \ + should == ActiveRelation::Relations::Rename.new(@relation.qualify, @relation[:id].qualify => :schmid) end end diff --git a/spec/active_relation/relations/selection_relation_spec.rb b/spec/active_relation/relations/selection_relation_spec.rb index ac1f227c67..90dc3169b6 100644 --- a/spec/active_relation/relations/selection_relation_spec.rb +++ b/spec/active_relation/relations/selection_relation_spec.rb @@ -1,30 +1,30 @@ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper') -describe SelectionRelation do +describe ActiveRelation::Relations::Selection do before do - @relation1 = TableRelation.new(:foo) - @relation2 = TableRelation.new(:bar) - @predicate1 = EqualityPredicate.new(@relation1[:id], @relation2[:foo_id]) - @predicate2 = LessThanPredicate.new(@relation1[:age], 2) + @relation1 = ActiveRelation::Relations::Table.new(:foo) + @relation2 = ActiveRelation::Relations::Table.new(:bar) + @predicate1 = ActiveRelation::Predicates::Equality.new(@relation1[:id], @relation2[:foo_id]) + @predicate2 = ActiveRelation::Predicates::LessThan.new(@relation1[:age], 2) end describe '#initialize' do it "manufactures nested selection relations if multiple predicates are provided" do - SelectionRelation.new(@relation1, @predicate1, @predicate2). \ - should == SelectionRelation.new(SelectionRelation.new(@relation1, @predicate2), @predicate1) + ActiveRelation::Relations::Selection.new(@relation1, @predicate1, @predicate2). \ + should == ActiveRelation::Relations::Selection.new(ActiveRelation::Relations::Selection.new(@relation1, @predicate2), @predicate1) end end describe '#qualify' do it "distributes over the relation and predicates" do - SelectionRelation.new(@relation1, @predicate1).qualify. \ - should == SelectionRelation.new(@relation1.qualify, @predicate1.qualify) + ActiveRelation::Relations::Selection.new(@relation1, @predicate1).qualify. \ + should == ActiveRelation::Relations::Selection.new(@relation1.qualify, @predicate1.qualify) end end describe '#to_sql' do it "manufactures sql with where clause conditions" do - SelectionRelation.new(@relation1, @predicate1).to_sql.should be_like(""" + ActiveRelation::Relations::Selection.new(@relation1, @predicate1).to_sql.should be_like(""" SELECT `foo`.`name`, `foo`.`id` FROM `foo` WHERE `foo`.`id` = `bar`.`foo_id` @@ -32,7 +32,7 @@ describe SelectionRelation do end it "allows arbitrary sql" do - SelectionRelation.new(@relation1, "asdf").to_sql.should be_like(""" + ActiveRelation::Relations::Selection.new(@relation1, "asdf").to_sql.should be_like(""" SELECT `foo`.`name`, `foo`.`id` FROM `foo` WHERE asdf diff --git a/spec/active_relation/relations/table_relation_spec.rb b/spec/active_relation/relations/table_relation_spec.rb index 79e9610e1b..62b8e44980 100644 --- a/spec/active_relation/relations/table_relation_spec.rb +++ b/spec/active_relation/relations/table_relation_spec.rb @@ -1,8 +1,8 @@ require File.join(File.dirname(__FILE__), '..', '..', 'spec_helper') -describe TableRelation do +describe ActiveRelation::Relations::Table do before do - @relation = TableRelation.new(:users) + @relation = ActiveRelation::Relations::Table.new(:users) end describe '#to_sql' do @@ -22,8 +22,8 @@ describe TableRelation do describe '#qualify' do it 'manufactures a rename relation with all attribute names qualified' do - @relation.qualify.should == RenameRelation.new( - RenameRelation.new(@relation, @relation[:id] => 'users.id'), @relation[:name] => 'users.name' + @relation.qualify.should == ActiveRelation::Relations::Rename.new( + ActiveRelation::Relations::Rename.new(@relation, @relation[:id] => 'users.id'), @relation[:name] => 'users.name' ) end end |