connection_manager 0.2.6 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +2 -1
- data/Gemfile +0 -1
- data/LICENSE.txt +1 -1
- data/README.md +115 -55
- data/Rakefile +2 -0
- data/connection_manager.gemspec +9 -3
- data/lib/connection_manager/connection_builder.rb +81 -0
- data/lib/connection_manager/connection_manager_railtie.rb +4 -3
- data/lib/connection_manager/helpers/abstract_adapter_helper.rb +40 -0
- data/lib/connection_manager/helpers/connection_helpers.rb +105 -0
- data/lib/connection_manager/{cross_schema_patch.rb → patches/cross_schema_patch.rb} +2 -3
- data/lib/connection_manager/replication.rb +165 -0
- data/lib/connection_manager/shards.rb +25 -0
- data/lib/connection_manager/using.rb +95 -0
- data/lib/connection_manager/version.rb +1 -1
- data/lib/connection_manager.rb +19 -8
- data/spec/factories.rb +7 -11
- data/spec/helpers/database_spec_helper.rb +52 -41
- data/spec/helpers/models_spec_helper.rb +23 -0
- data/spec/jdbcmysql_database.yml +55 -0
- data/spec/lib/connection_builder_spec.rb +29 -0
- data/spec/lib/connection_helpers_spec.rb +74 -0
- data/spec/lib/replication_spec.rb +134 -0
- data/spec/lib/shards_spec.rb +40 -0
- data/spec/lib/using_spec.rb +77 -0
- data/spec/mysql2_database.yml +28 -2
- data/spec/spec_helper.rb +20 -6
- metadata +42 -39
- data/Gemfile.lock +0 -56
- data/lib/connection_manager/associations.rb +0 -28
- data/lib/connection_manager/connections.rb +0 -124
- data/lib/connection_manager/method_recorder.rb +0 -57
- data/lib/connection_manager/secondary_connection_builder.rb +0 -180
- data/spec/integration/secondary_connection_builder_spec.rb +0 -115
- data/spec/lib/associations_spec.rb +0 -30
- data/spec/lib/connections_spec.rb +0 -92
- data/spec/lib/method_recorder_spec.rb +0 -43
- data/spec/lib/secondary_connection_builder_spec.rb +0 -77
@@ -1,77 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe ConnectionManager::SecondaryConnectionBuilder do
|
4
|
-
|
5
|
-
context '#database_name' do
|
6
|
-
it "should return the name of the database the model is using" do
|
7
|
-
Fruit.database_name.should eql('cm_test')
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
context '#other_association_options' do
|
12
|
-
|
13
|
-
it "should add :class_name options set to the replication subclass if :class_name is blank" do
|
14
|
-
options = Fruit.secondary_association_options(:has_one, :plant, 'Slave')
|
15
|
-
options[:class_name].should eql("Plant::Slave")
|
16
|
-
end
|
17
|
-
|
18
|
-
it "should append :class_name with the replication subclass if :class_name is not bank" do
|
19
|
-
options = Fruit.secondary_association_options(:has_one, :plant, 'Slave', :class_name => 'Plant')
|
20
|
-
options[:class_name].should eql("Plant::Slave")
|
21
|
-
end
|
22
|
-
|
23
|
-
context "has_one or has_many" do
|
24
|
-
it "should add the :foreign_key if the :foreign_key options is not present" do
|
25
|
-
options = Fruit.secondary_association_options(:has_one, :plant, 'Slave')
|
26
|
-
options[:foreign_key].should eql('fruit_id')
|
27
|
-
options = Fruit.secondary_association_options(:has_many, :plant, 'Slave')
|
28
|
-
options[:foreign_key].should eql('fruit_id')
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
context '#secondary_connection_classes' do
|
34
|
-
it "should return the :using array with the array elements classified and append with Connection" do
|
35
|
-
Fruit.secondary_connection_classes({:using => ['slave_1_test_db','slave_2_test_db']}).
|
36
|
-
should eql(["Slave1TestDbConnection", "Slave2TestDbConnection"])
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
context '#replicated' do
|
42
|
-
it "should raise an exception if no replication_connection_classes are found" do
|
43
|
-
Fruit.stubs(:secondary_connection_classes).returns([])
|
44
|
-
lambda { Fruit.replicated }.should raise_error
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
context "cross database joins" do
|
50
|
-
ConnectionManager::Connections.initialize(:env => 'test')
|
51
|
-
|
52
|
-
class Foo < ActiveRecord::Base
|
53
|
-
set_table_name_for_joins
|
54
|
-
belongs_to :user
|
55
|
-
end
|
56
|
-
|
57
|
-
class User < CmUserConnection
|
58
|
-
set_table_name_for_joins
|
59
|
-
has_many :foos
|
60
|
-
end
|
61
|
-
|
62
|
-
before :all do
|
63
|
-
@user = User.new(:name => "Testing")
|
64
|
-
@user.save
|
65
|
-
@foo = Foo.new(:user_id => @user.id)
|
66
|
-
@foo.save
|
67
|
-
end
|
68
|
-
|
69
|
-
it "should work" do
|
70
|
-
@user.foos.blank?.should be_false
|
71
|
-
found = Foo.select('users.name AS user_name').joins(:user).where(:id => @foo.id).first
|
72
|
-
puts Foo.select('users.name AS user_name').joins(:user).where(:id => @foo.id).to_sql
|
73
|
-
found.user_name.blank?.should be_false
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|