diff options
-rw-r--r-- | lib/arel/tree_manager.rb | 5 | ||||
-rw-r--r-- | spec/arel/insert_manager_spec.rb | 11 | ||||
-rw-r--r-- | spec/arel/select_manager_spec.rb | 11 | ||||
-rw-r--r-- | spec/arel/update_manager_spec.rb | 12 | ||||
-rw-r--r-- | spec/spec_helper.rb | 1 | ||||
-rw-r--r-- | spec/support/shared/tree_manager_shared.rb | 9 |
6 files changed, 49 insertions, 0 deletions
diff --git a/lib/arel/tree_manager.rb b/lib/arel/tree_manager.rb index d2027bedfa..24df5e0c09 100644 --- a/lib/arel/tree_manager.rb +++ b/lib/arel/tree_manager.rb @@ -15,5 +15,10 @@ module Arel viz = Visitors::ToSql.new @engine viz.accept @head end + + def initialize_copy other + super + @head = @head.clone + end end end diff --git a/spec/arel/insert_manager_spec.rb b/spec/arel/insert_manager_spec.rb index 14cb749b25..ed0725e79d 100644 --- a/spec/arel/insert_manager_spec.rb +++ b/spec/arel/insert_manager_spec.rb @@ -110,5 +110,16 @@ module Arel } end end + + describe "TreeManager" do + subject do + table = Table.new(:users) + Arel::InsertManager.new(Table.engine).tap do |manager| + manager.insert [[table[:id], nil]] + end + end + + it_should_behave_like "TreeManager" + end end end diff --git a/spec/arel/select_manager_spec.rb b/spec/arel/select_manager_spec.rb index 01d1b35004..3984bec3fd 100644 --- a/spec/arel/select_manager_spec.rb +++ b/spec/arel/select_manager_spec.rb @@ -166,5 +166,16 @@ module Arel manager.to_sql.should be_like 'SELECT "users"."id" FROM "users"' end end + + describe "TreeManager" do + subject do + table = Table.new :users + Arel::SelectManager.new(Table.engine).tap do |manager| + manager.from(table).project(table['id']) + end + end + + it_should_behave_like "TreeManager" + end end end diff --git a/spec/arel/update_manager_spec.rb b/spec/arel/update_manager_spec.rb index 8c4c4f93b8..4aeb15bb14 100644 --- a/spec/arel/update_manager_spec.rb +++ b/spec/arel/update_manager_spec.rb @@ -73,5 +73,17 @@ module Arel um.where(table[:id].eq(1)).should == um end end + + describe "TreeManager" do + subject do + table = Table.new :users + Arel::UpdateManager.new(Table.engine).tap do |manager| + manager.table table + manager.where table[:id].eq(1) + end + end + + it_should_behave_like "TreeManager" + end end end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 12cbe0170e..4ea3071515 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -5,6 +5,7 @@ require 'arel' require 'support/matchers/be_like' require 'support/check' +Dir[File.join(File.dirname(__FILE__),'support/shared/*')].each { |f| require f } if adapter = ENV['ADAPTER'] require "support/connections/#{adapter}_connection.rb" diff --git a/spec/support/shared/tree_manager_shared.rb b/spec/support/shared/tree_manager_shared.rb new file mode 100644 index 0000000000..48b561e1fb --- /dev/null +++ b/spec/support/shared/tree_manager_shared.rb @@ -0,0 +1,9 @@ +shared_examples_for "TreeManager" do + describe "clone" do + it "clones the insert statement" do + subject.instance_variable_get("@head").should_receive(:clone).and_return(:foo) # TODO: ick. + dolly = subject.clone + dolly.instance_variable_get("@head").should == :foo + end + end +end |