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.
Files changed (38) hide show
  1. data/.gitignore +2 -1
  2. data/Gemfile +0 -1
  3. data/LICENSE.txt +1 -1
  4. data/README.md +115 -55
  5. data/Rakefile +2 -0
  6. data/connection_manager.gemspec +9 -3
  7. data/lib/connection_manager/connection_builder.rb +81 -0
  8. data/lib/connection_manager/connection_manager_railtie.rb +4 -3
  9. data/lib/connection_manager/helpers/abstract_adapter_helper.rb +40 -0
  10. data/lib/connection_manager/helpers/connection_helpers.rb +105 -0
  11. data/lib/connection_manager/{cross_schema_patch.rb → patches/cross_schema_patch.rb} +2 -3
  12. data/lib/connection_manager/replication.rb +165 -0
  13. data/lib/connection_manager/shards.rb +25 -0
  14. data/lib/connection_manager/using.rb +95 -0
  15. data/lib/connection_manager/version.rb +1 -1
  16. data/lib/connection_manager.rb +19 -8
  17. data/spec/factories.rb +7 -11
  18. data/spec/helpers/database_spec_helper.rb +52 -41
  19. data/spec/helpers/models_spec_helper.rb +23 -0
  20. data/spec/jdbcmysql_database.yml +55 -0
  21. data/spec/lib/connection_builder_spec.rb +29 -0
  22. data/spec/lib/connection_helpers_spec.rb +74 -0
  23. data/spec/lib/replication_spec.rb +134 -0
  24. data/spec/lib/shards_spec.rb +40 -0
  25. data/spec/lib/using_spec.rb +77 -0
  26. data/spec/mysql2_database.yml +28 -2
  27. data/spec/spec_helper.rb +20 -6
  28. metadata +42 -39
  29. data/Gemfile.lock +0 -56
  30. data/lib/connection_manager/associations.rb +0 -28
  31. data/lib/connection_manager/connections.rb +0 -124
  32. data/lib/connection_manager/method_recorder.rb +0 -57
  33. data/lib/connection_manager/secondary_connection_builder.rb +0 -180
  34. data/spec/integration/secondary_connection_builder_spec.rb +0 -115
  35. data/spec/lib/associations_spec.rb +0 -30
  36. data/spec/lib/connections_spec.rb +0 -92
  37. data/spec/lib/method_recorder_spec.rb +0 -43
  38. 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
-