connection_manager 1.0.4 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +8 -8
  2. data/CHANGE.md +12 -1
  3. data/README.md +99 -82
  4. data/connection_manager.gemspec +7 -11
  5. data/lib/connection_manager/builder.rb +56 -0
  6. data/lib/connection_manager/connection_adapters/abstract_adapter.rb +50 -0
  7. data/lib/connection_manager/connection_adapters/mysql_adapter.rb +39 -0
  8. data/lib/connection_manager/connection_handling.rb +91 -0
  9. data/lib/connection_manager/core.rb +24 -0
  10. data/lib/connection_manager/querying.rb +13 -0
  11. data/lib/connection_manager/railtie.rb +10 -0
  12. data/lib/connection_manager/relation.rb +21 -0
  13. data/lib/connection_manager/replication.rb +56 -85
  14. data/lib/connection_manager/shards.rb +2 -1
  15. data/lib/connection_manager/using.rb +30 -24
  16. data/lib/connection_manager/version.rb +1 -1
  17. data/lib/connection_manager.rb +26 -16
  18. data/spec/{mysql2_database.yml → database.yml} +30 -26
  19. data/spec/factories.rb +1 -1
  20. data/spec/helpers/database_spec_helper.rb +91 -62
  21. data/spec/helpers/models_spec_helper.rb +23 -12
  22. data/spec/lib/builder_spec.rb +31 -0
  23. data/spec/lib/connection_adapters/abstract_adapter_spec.rb +48 -0
  24. data/spec/lib/connection_adapters/mysql_adapter_spec.rb +13 -0
  25. data/spec/lib/connection_handling_spec.rb +65 -0
  26. data/spec/lib/core_spec.rb +10 -0
  27. data/spec/lib/integration/cross_schema_spec.rb +35 -0
  28. data/spec/lib/querying_spec.rb +19 -0
  29. data/spec/lib/relation_spec.rb +21 -0
  30. data/spec/lib/replication_spec.rb +19 -57
  31. data/spec/lib/shards_spec.rb +3 -3
  32. data/spec/lib/using_proxy_spec.rb +27 -0
  33. data/spec/lib/using_spec.rb +28 -15
  34. data/spec/spec_helper.rb +2 -10
  35. metadata +73 -35
  36. data/lib/connection_manager/connection_builder.rb +0 -82
  37. data/lib/connection_manager/connection_manager_railtie.rb +0 -8
  38. data/lib/connection_manager/helpers/abstract_adapter_helper.rb +0 -95
  39. data/lib/connection_manager/helpers/connection_helpers.rb +0 -119
  40. data/lib/connection_manager/patches/cross_schema_patch.rb +0 -67
  41. data/spec/jdbcmysql_database.yml +0 -50
  42. data/spec/lib/connection_builder_spec.rb +0 -28
  43. data/spec/lib/connection_helpers_spec.rb +0 -79
  44. data/spec/lib/patches/cross_schema_path_spec.rb +0 -74
  45. data/spec/sqlite_database.yml +0 -26
@@ -1,79 +0,0 @@
1
- require 'spec_helper'
2
- describe ConnectionManager::ConnectionHelpers do
3
- before(:all) do
4
-
5
- class MyConnectionClass < ActiveRecord::Base
6
- establish_managed_connection(:test)
7
- end
8
-
9
- class MyReadonlyConnectionClass < ActiveRecord::Base
10
- establish_managed_connection({
11
- :database => "cm_test",
12
- :adapter => "mysql2",
13
- :username => TestDB.yml("mysql2")["test"]["username"],
14
- :password => TestDB.yml("mysql2")["test"]["password"]
15
-
16
- }, {:readonly => true})
17
- end
18
-
19
- class MyPrefixedConnection < MyConnectionClass
20
- self.abstract_class = true
21
- self.use_database("boo")
22
- end
23
-
24
- class MyFoo < MyConnectionClass
25
- self.table_name = 'foos'
26
- end
27
-
28
- class MyReadonlyFoo < MyReadonlyConnectionClass
29
- self.table_name = 'foos'
30
- end
31
- end
32
- describe '#establish_managed_connection' do
33
- context 'the connection class' do
34
-
35
- it "should create abstract class" do
36
- MyConnectionClass.abstract_class.should be_true
37
- end
38
-
39
- it "should checkin the connection" do
40
- ActiveRecord::Base.managed_connection_classes.include?("MyConnectionClass").should be_true
41
- ActiveRecord::Base.managed_connection_classes.include?("MyReadonlyConnectionClass").should be_true
42
- end
43
- end
44
- context 'the model' do
45
- it "should not be readonly" do
46
- u = MyFoo.new
47
- u.readonly?.should_not be_true
48
- end
49
- it "should be readonly if readonly option for establish_managed_connection from connaction class is true" do
50
- u = MyReadonlyFoo.new
51
- u.readonly?.should be_true
52
- end
53
- end
54
- end
55
-
56
- describe '#use_database' do
57
- it "should set the database/schema for the model to the supplied schema_name" do
58
- Fruit.use_database('my_schema')
59
- Fruit.current_database_name.should eql('my_schema')
60
- end
61
-
62
- it "should set the contactinate the schema_name and table_name; and set the table_name to that value" do
63
- Fruit.use_database('my_schema')
64
- Fruit.table_name.should eql('my_schema.fruits')
65
- Fruit.table_name_prefix.should eql('my_schema.')
66
- end
67
-
68
- it "should set the table_name if one is supplied" do
69
- Fruit.use_database('my_schema',{:table_name => 'apples'})
70
- Fruit.table_name.should eql('my_schema.apples')
71
- Fruit.table_name_prefix.should eql('my_schema.')
72
- end
73
- end
74
-
75
- it "should have the correct database name" do
76
- MyPrefixedConnection.current_database_name.should eql('boo')
77
- end
78
- end
79
-
@@ -1,74 +0,0 @@
1
- require 'spec_helper'
2
- describe ActiveRecord::ConnectionAdapters::AbstractAdapter do
3
-
4
- describe '#fetch_table_schema' do
5
- context "table is unique in DMS" do
6
- it "should return a string consisting of the schema name, a '.' and the table_name" do
7
- Fruit.connection.fetch_table_schema('fruits').should eql('cm_test')
8
- end
9
- end
10
-
11
- context "table is not unique in DMS" do
12
- it "should return a string consisting of the schema name, a '.' and the table_name" do
13
- Fruit.connection.fetch_table_schema('type').should eql(nil)
14
- end
15
- end
16
- end
17
-
18
- describe '#fetch_full_table_name' do
19
- it "should return a string consisting of the schema name, a '.' and the table_name" do
20
- Fruit.connection.fetch_full_table_name('fruits').should eql('cm_test.fruits')
21
- end
22
- end
23
-
24
- describe '#table_exists?' do
25
- it "should return true for unquoted full_names" do
26
- Fruit.connection.table_exists?('cm_test.fruits').should be_true
27
- end
28
- it "should return true for table only names" do
29
- Fruit.connection.table_exists?('fruits').should be_true
30
- end
31
- end
32
- end
33
- describe ActiveRecord::Base do
34
- describe '#arel_table' do
35
- it "should use quote_table_name" do
36
- Fruit.arel_table.name.should eql('cm_test.fruits')
37
- end
38
- end
39
-
40
- context "Cross Schema Joins" do
41
- before :each do
42
- @user = CmUser.new(:name => "Testing")
43
- @user.save
44
- @foo = Foo.new(:cm_user_id => @user.id)
45
- @foo.save
46
- end
47
-
48
- describe '#joins' do
49
- it "should work" do
50
- @user.foos.blank?.should be_false
51
- found = Foo.joins(:cm_user).select('cm_users.name AS user_name').where('cm_users.id = ?',@user.id).first
52
- found.user_name.blank?.should be_false
53
- end
54
- end
55
- describe '#includes' do
56
- before(:each) do
57
- @user.foos.blank?.should be_false
58
- search = Foo.includes(:cm_user).where('cm_users.id = ?',@user.id)
59
- search = search.references(:cm_user) if search.respond_to?(:references)
60
- @found = search.first
61
- end
62
- it "should return a results" do
63
- @found.should be_a(Foo) # Make sure results are returns
64
- end
65
- it "should loan associations" do
66
- if @found.respond_to?(:association)
67
- @found.association(:cm_user).loaded?.should be_true
68
- else
69
- @found.cm_user.loaded?.should be_true
70
- end
71
- end
72
- end
73
- end
74
- end
@@ -1,26 +0,0 @@
1
- # Warning: The database defined as "test" will be erased and
2
- # re-generated from your development database when you run "rake".
3
- # Do not set this db to the same as development or production.
4
- test:
5
- adapter: sqlite3
6
- database: spec/cm_test.sqlite3
7
- pool: 5
8
- timeout: 5000
9
-
10
- slave_1_cm_test:
11
- adapter: sqlite3
12
- database: spec/cm_test.sqlite3
13
- pool: 5
14
- timeout: 5000
15
-
16
- slave_2_cm_test:
17
- adapter: sqlite3
18
- database: spec/cm_test.sqlite3
19
- pool: 5
20
- timeout: 5000
21
-
22
- shard_1_cm_test:
23
- adapter: sqlite3
24
- database: spec/legacy_cm_test.sqlite3
25
- pool: 5
26
- timeout: 5000