seamless_database_pool 1.0.14 → 1.0.15

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 49f36daf8b3d407d0a64c919cd55d41edb67299c
4
+ data.tar.gz: 27a40dda0546f89699c713a692119fc312da0da6
5
+ SHA512:
6
+ metadata.gz: 90c9a05dfb35afff08add517f6ddc3ab4f5ffeb2fe50d28a6102c9321c2d9fee384a6bbbccc08170a9290bf66950f3d8d72e50e952069a819293066367da6596
7
+ data.tar.gz: 37090f84c9134e7fe74657d0ff66623871b23aefbbae54d20fa6d17e59809773a9ffccfee5cc8e9d5d94c0fbbab3f5498eb30082e2525df911272228ea10736f
@@ -257,6 +257,10 @@ module ActiveRecord
257
257
  end
258
258
  end
259
259
 
260
+ def to_s
261
+ "#<#{self.class.name}:0x#{object_id.to_s(16)} #{all_connections.size} connections>"
262
+ end
263
+
260
264
  class DatabaseConnectionError < StandardError
261
265
  end
262
266
 
@@ -371,6 +375,7 @@ module ActiveRecord
371
375
  raise e if conn == master_connection
372
376
  end
373
377
  end
378
+ nil
374
379
  end
375
380
  end
376
381
  end
@@ -13,7 +13,11 @@ describe "Test connection adapters" do
13
13
  let(:master_connection){ connection.master_connection }
14
14
 
15
15
  before(:all) do
16
- ActiveRecord::Base.configurations = {'adapter' => "sqlite3", 'database' => ":memory:"}
16
+ if ActiveRecord::VERSION::MAJOR < 3 || (ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR == 0)
17
+ ActiveRecord::Base.configurations = {'adapter' => "sqlite3", 'database' => ":memory:"}
18
+ else
19
+ ActiveRecord::Base.configurations = {"test" => {'adapter' => "sqlite3", 'database' => ":memory:"}}
20
+ end
17
21
  ActiveRecord::Base.establish_connection('adapter' => "sqlite3", 'database' => ":memory:")
18
22
  ActiveRecord::Base.connection
19
23
  SeamlessDatabasePool::TestModel.db_model(adapter).create_tables
@@ -51,7 +51,7 @@ describe "SeamlessDatabasePoolAdapter ActiveRecord::Base extension" do
51
51
  ]
52
52
  }
53
53
 
54
- pool_connection = mock(:connection)
54
+ pool_connection = double(:connection)
55
55
  master_connection = SeamlessDatabasePool::MockConnection.new("master")
56
56
  read_connection_1 = SeamlessDatabasePool::MockConnection.new("read_1")
57
57
  read_connection_2 = SeamlessDatabasePool::MockConnection.new("read_2")
@@ -62,7 +62,7 @@ describe "SeamlessDatabasePoolAdapter ActiveRecord::Base extension" do
62
62
  ActiveRecord::Base.should_receive(:reader_connection).with('adapter' => 'reader', 'host' => 'read_host_1', 'username' => 'user', 'pool_weight' => 1).and_return(read_connection_1)
63
63
  ActiveRecord::Base.should_receive(:reader_connection).with('adapter' => 'reader', 'host' => 'read_host_2', 'username' => 'user', 'pool_weight' => 2).and_return(read_connection_2)
64
64
 
65
- klass = mock(:class)
65
+ klass = double(:class)
66
66
  ActiveRecord::ConnectionAdapters::SeamlessDatabasePoolAdapter.should_receive(:adapter_class).with(master_connection).and_return(klass)
67
67
  klass.should_receive(:new).with(nil, logger, master_connection, [read_connection_1, read_connection_2], weights).and_return(pool_connection)
68
68
 
@@ -88,6 +88,10 @@ describe "SeamlessDatabasePoolAdapter" do
88
88
  connection_class.new(nil, nil, master_connection, [read_connection_1, read_connection_2], weights)
89
89
  end
90
90
 
91
+ it "should be able to be converted to a string" do
92
+ pool_connection.to_s.should =~ /\A#<ActiveRecord::ConnectionAdapters::SeamlessDatabasePoolAdapter::Abstract:0x[0-9a-f]+ 3 connections>\z/
93
+ end
94
+
91
95
  context "selecting a connection from the pool" do
92
96
  it "should initialize the connection pool" do
93
97
  pool_connection.master_connection.should == master_connection
@@ -104,7 +108,8 @@ describe "SeamlessDatabasePoolAdapter" do
104
108
  end
105
109
 
106
110
  it "should select a random read connection" do
107
- mock_connection = stub(:connection, :active? => true)
111
+ mock_connection = double(:connection)
112
+ mock_connection.stub(:active? => true)
108
113
  pool_connection.should_receive(:available_read_connections).and_return([:fake1, :fake2, mock_connection])
109
114
  pool_connection.should_receive(:rand).with(3).and_return(2)
110
115
  pool_connection.random_read_connection.should == mock_connection
@@ -117,7 +122,7 @@ describe "SeamlessDatabasePoolAdapter" do
117
122
 
118
123
  it "should use the master connection in a block" do
119
124
  connection_class = ActiveRecord::ConnectionAdapters::SeamlessDatabasePoolAdapter.adapter_class(master_connection)
120
- connection = connection_class.new(nil, mock(:logger), master_connection, [read_connection_1], {read_connection_1 => 1})
125
+ connection = connection_class.new(nil, double(:logger), master_connection, [read_connection_1], {read_connection_1 => 1})
121
126
  connection.random_read_connection.should == read_connection_1
122
127
  connection.use_master_connection do
123
128
  connection.random_read_connection.should == master_connection
@@ -127,7 +132,7 @@ describe "SeamlessDatabasePoolAdapter" do
127
132
 
128
133
  it "should use the master connection inside a transaction" do
129
134
  connection_class = ActiveRecord::ConnectionAdapters::SeamlessDatabasePoolAdapter.adapter_class(master_connection)
130
- connection = connection_class.new(nil, mock(:logger), master_connection, [read_connection_1], {read_connection_1 => 1})
135
+ connection = connection_class.new(nil, double(:logger), master_connection, [read_connection_1], {read_connection_1 => 1})
131
136
  master_connection.should_receive(:begin_db_transaction)
132
137
  master_connection.should_receive(:commit_db_transaction)
133
138
  master_connection.should_receive(:select).with('Transaction SQL', nil)
@@ -236,12 +241,12 @@ describe "SeamlessDatabasePoolAdapter" do
236
241
  end
237
242
 
238
243
  it "should try to reconnect dead connections when they become available again" do
239
- master_connection.stub!(:select).and_raise("SQL ERROR")
244
+ master_connection.stub(:select).and_raise("SQL ERROR")
240
245
  master_connection.should_receive(:active?).and_return(false, false, true)
241
246
  master_connection.should_receive(:reconnect!)
242
247
  now = Time.now
243
248
  lambda{pool_connection.select_value("SQL")}.should raise_error("SQL ERROR")
244
- Time.stub!(:now).and_return(now + 31)
249
+ Time.stub(:now => now + 31)
245
250
  lambda{pool_connection.select_value("SQL")}.should raise_error("SQL ERROR")
246
251
  end
247
252
 
@@ -11,16 +11,15 @@ describe "SeamlessDatabasePool" do
11
11
  end
12
12
 
13
13
  it "should use the master connection by default" do
14
- connection = stub(:connection, :master_connection => :master_db_connection)
15
- connection.stub!(:using_master_connection?).and_return(false)
14
+ connection = double(:connection, :master_connection => :master_db_connection, :using_master_connection? => false)
16
15
  SeamlessDatabasePool.read_only_connection_type.should == :master
17
16
  SeamlessDatabasePool.read_only_connection(connection).should == :master_db_connection
18
17
  end
19
18
 
20
19
  it "should be able to set using persistent read connections" do
21
- connection = mock(:connection)
20
+ connection = double(:connection)
22
21
  connection.should_receive(:random_read_connection).once.and_return(:read_db_connection)
23
- connection.stub!(:using_master_connection?).and_return(false)
22
+ connection.stub(:using_master_connection? => false)
24
23
  SeamlessDatabasePool.use_persistent_read_connection
25
24
  SeamlessDatabasePool.read_only_connection_type.should == :persistent
26
25
  SeamlessDatabasePool.read_only_connection(connection).should == :read_db_connection
@@ -28,9 +27,9 @@ describe "SeamlessDatabasePool" do
28
27
  end
29
28
 
30
29
  it "should be able to set using random read connections" do
31
- connection = mock(:connection)
30
+ connection = double(:connection)
32
31
  connection.should_receive(:random_read_connection).and_return(:read_db_connection_1, :read_db_connection_2)
33
- connection.stub!(:using_master_connection?).and_return(false)
32
+ connection.stub(:using_master_connection? => false)
34
33
  SeamlessDatabasePool.use_random_read_connection
35
34
  SeamlessDatabasePool.read_only_connection_type.should == :random
36
35
  SeamlessDatabasePool.read_only_connection(connection).should == :read_db_connection_1
@@ -38,23 +37,23 @@ describe "SeamlessDatabasePool" do
38
37
  end
39
38
 
40
39
  it "should use the master connection if the connection is forcing it" do
41
- connection = stub(:connection, :master_connection => :master_db_connection)
40
+ connection = double(:connection, :master_connection => :master_db_connection)
42
41
  connection.should_receive(:using_master_connection?).and_return(true)
43
42
  SeamlessDatabasePool.use_persistent_read_connection
44
43
  SeamlessDatabasePool.read_only_connection(connection).should == :master_db_connection
45
44
  end
46
45
 
47
46
  it "should be able to set using the master connection" do
48
- connection = stub(:connection, :master_connection => :master_db_connection)
49
- connection.stub!(:using_master_connection?).and_return(false)
47
+ connection = double(:connection, :master_connection => :master_db_connection)
48
+ connection.stub(:using_master_connection? => false)
50
49
  SeamlessDatabasePool.use_master_connection
51
50
  SeamlessDatabasePool.read_only_connection(connection).should == :master_db_connection
52
51
  end
53
52
 
54
53
  it "should be able to use persistent read connections within a block" do
55
- connection = stub(:connection, :master_connection => :master_db_connection)
54
+ connection = double(:connection, :master_connection => :master_db_connection)
56
55
  connection.should_receive(:random_read_connection).once.and_return(:read_db_connection)
57
- connection.stub!(:using_master_connection?).and_return(false)
56
+ connection.stub(:using_master_connection? => false)
58
57
  SeamlessDatabasePool.read_only_connection(connection).should == :master_db_connection
59
58
  SeamlessDatabasePool.use_persistent_read_connection do
60
59
  SeamlessDatabasePool.read_only_connection(connection).should == :read_db_connection
@@ -65,9 +64,9 @@ describe "SeamlessDatabasePool" do
65
64
  end
66
65
 
67
66
  it "should be able to use random read connections within a block" do
68
- connection = stub(:connection, :master_connection => :master_db_connection)
67
+ connection = double(:connection, :master_connection => :master_db_connection)
69
68
  connection.should_receive(:random_read_connection).and_return(:read_db_connection_1, :read_db_connection_2)
70
- connection.stub!(:using_master_connection?).and_return(false)
69
+ connection.stub(:using_master_connection? => false)
71
70
  SeamlessDatabasePool.read_only_connection(connection).should == :master_db_connection
72
71
  SeamlessDatabasePool.use_random_read_connection do
73
72
  SeamlessDatabasePool.read_only_connection(connection).should == :read_db_connection_1
@@ -78,9 +77,9 @@ describe "SeamlessDatabasePool" do
78
77
  end
79
78
 
80
79
  it "should be able to use the master connection within a block" do
81
- connection = stub(:connection, :master_connection => :master_db_connection)
80
+ connection = double(:connection, :master_connection => :master_db_connection)
82
81
  connection.should_receive(:random_read_connection).once.and_return(:read_db_connection)
83
- connection.stub!(:using_master_connection?).and_return(false)
82
+ connection.stub(:using_master_connection? => false)
84
83
  SeamlessDatabasePool.use_persistent_read_connection
85
84
  SeamlessDatabasePool.read_only_connection(connection).should == :read_db_connection
86
85
  SeamlessDatabasePool.use_master_connection do
@@ -92,9 +91,9 @@ describe "SeamlessDatabasePool" do
92
91
  end
93
92
 
94
93
  it "should be able to use connection blocks within connection blocks" do
95
- connection = stub(:connection, :master_connection => :master_db_connection)
96
- connection.should_receive(:random_read_connection).any_number_of_times.and_return(:read_db_connection)
97
- connection.stub!(:using_master_connection?).and_return(false)
94
+ connection = double(:connection, :master_connection => :master_db_connection)
95
+ connection.stub(:random_read_connection => :read_db_connection)
96
+ connection.stub(:using_master_connection? => false)
98
97
  SeamlessDatabasePool.use_persistent_read_connection do
99
98
  SeamlessDatabasePool.read_only_connection(connection).should == :read_db_connection
100
99
  SeamlessDatabasePool.use_master_connection do
@@ -109,9 +108,8 @@ describe "SeamlessDatabasePool" do
109
108
  end
110
109
 
111
110
  it "should be able to change the persistent connection" do
112
- connection = mock(:connection)
113
- connection.stub!(:random_read_connection).and_return(:read_db_connection)
114
- connection.stub!(:using_master_connection?).and_return(false)
111
+ connection = double(:connection)
112
+ connection.stub(:random_read_connection => :read_db_connection, :using_master_connection? => false)
115
113
 
116
114
  SeamlessDatabasePool.use_persistent_read_connection
117
115
  SeamlessDatabasePool.read_only_connection_type.should == :persistent
metadata CHANGED
@@ -1,110 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seamless_database_pool
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.14
5
- prerelease:
4
+ version: 1.0.15
6
5
  platform: ruby
7
6
  authors:
8
7
  - Brian Durand
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-07-18 00:00:00.000000000 Z
11
+ date: 2014-06-19 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: activerecord
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: 3.0.20
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: 3.0.20
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rspec
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: '2.0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: '2.0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: jeweler
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: sqlite3
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - ">="
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - ">="
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: mysql
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ! '>='
73
+ - - ">="
84
74
  - !ruby/object:Gem::Version
85
75
  version: '0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ! '>='
80
+ - - ">="
92
81
  - !ruby/object:Gem::Version
93
82
  version: '0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: pg
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ! '>='
87
+ - - ">="
100
88
  - !ruby/object:Gem::Version
101
89
  version: '0'
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ! '>='
94
+ - - ">="
108
95
  - !ruby/object:Gem::Version
109
96
  version: '0'
110
97
  description:
@@ -135,27 +122,26 @@ files:
135
122
  - spec/test_model.rb
136
123
  homepage: http://github.com/bdurand/seamless_database_pool
137
124
  licenses: []
125
+ metadata: {}
138
126
  post_install_message:
139
127
  rdoc_options: []
140
128
  require_paths:
141
129
  - lib
142
130
  required_ruby_version: !ruby/object:Gem::Requirement
143
- none: false
144
131
  requirements:
145
- - - ! '>='
132
+ - - ">="
146
133
  - !ruby/object:Gem::Version
147
134
  version: '0'
148
135
  required_rubygems_version: !ruby/object:Gem::Requirement
149
- none: false
150
136
  requirements:
151
- - - ! '>='
137
+ - - ">="
152
138
  - !ruby/object:Gem::Version
153
139
  version: '0'
154
140
  requirements: []
155
141
  rubyforge_project:
156
- rubygems_version: 1.8.25
142
+ rubygems_version: 2.2.2
157
143
  signing_key:
158
- specification_version: 3
144
+ specification_version: 4
159
145
  summary: Add support for master/slave database clusters in ActiveRecord to improve
160
146
  performance.
161
147
  test_files: []