mysql_framework 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4cd76e0de90b8c56e1ae4d941f054b34d578e60a98bfc0e81edc37027610ae7b
4
- data.tar.gz: b3059ba0eb90274b18211fc5efcf6a01a7eb6ad68c7397fbfa7964747638dd37
3
+ metadata.gz: 94c25e3c9a25a0ecd4c51807bb1c5906b44ac526af023445e4c6411d057b764a
4
+ data.tar.gz: 428bf47cf5598c9c5c14593447e329685f3c52af39a45e45e92b18215bdc5323
5
5
  SHA512:
6
- metadata.gz: 38d21a76909ce03ba7877483b6aa588a651a52839d9e2339e7700f71913173267c725577591e5767b9e9014ce14437d2518757beffbfba67bc8595f2329277d2
7
- data.tar.gz: 0429588b4d222a0c361d1516ad5ec89118787f284e79c242bd506e60c9fa132a673637cd06e183809c1d03a0ae7fdd12bcc7ee193d7d939eef9f20b25ed8d98c
6
+ metadata.gz: 9c3d58636754dfb8414caf2860b1c02c50d866a32d2c4610a2ff6e3779222bf567bb0779cbc4809555303b4477331f27e967f3b3dc80d0e7e86a1277256e7b82
7
+ data.tar.gz: 82d72de51ec32da66e77f793a813af8f8da1f074916c77fc40d30f2cda9dfac6e1756669668595405e89ff92091ef87cb1765a9f72259613b03c167f19eecbda
@@ -38,8 +38,7 @@ module MysqlFramework
38
38
  def check_out
39
39
  client = @connection_pool.pop(true)
40
40
 
41
- # Prevent "mysql server has gone away" errors by detecting dead clients and creating a new one instead.
42
- client = new_client if client.closed?
41
+ client.ping if @options[:reconnect]
43
42
 
44
43
  client
45
44
  rescue ThreadError
@@ -56,6 +55,8 @@ module MysqlFramework
56
55
 
57
56
  # This method is called to check a client back in to the connection when no longer needed.
58
57
  def check_in(client)
58
+ client = new_client if client.closed?
59
+
59
60
  @connection_pool.push(client)
60
61
  end
61
62
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MysqlFramework
4
- VERSION = '0.0.8'
4
+ VERSION = '0.0.9'
5
5
  end
@@ -23,7 +23,7 @@ describe MysqlFramework::Connector do
23
23
  reconnect: false
24
24
  }
25
25
  end
26
- let(:client) { double(close: true, closed?: false) }
26
+ let(:client) { double(close: true, ping: true, closed?: false) }
27
27
  let(:gems) { MysqlFramework::SqlTable.new('gems') }
28
28
  let(:existing_client) { Mysql2::Client.new(default_options) }
29
29
 
@@ -88,19 +88,36 @@ describe MysqlFramework::Connector do
88
88
  it 'returns a client instance from the pool' do
89
89
  expect(subject.check_out).to eq(client)
90
90
  end
91
- end
92
91
 
93
- context '' do
94
- let(:closed_client) { double(close: true, closed?: true) }
92
+ context 'and :reconnect is set to true' do
93
+ let(:options) do
94
+ {
95
+ host: ENV.fetch('MYSQL_HOST'),
96
+ port: ENV.fetch('MYSQL_PORT'),
97
+ database: "#{ENV.fetch('MYSQL_DATABASE')}_2",
98
+ username: ENV.fetch('MYSQL_USERNAME'),
99
+ password: ENV.fetch('MYSQL_PASSWORD'),
100
+ reconnect: true
101
+ }
102
+ end
95
103
 
96
- before do
97
- subject.connections.clear
98
- subject.connections.push(closed_client)
104
+ subject { described_class.new(options) }
105
+
106
+ it 'pings the server to force a reconnect' do
107
+ expect(client).to receive(:ping)
108
+
109
+ subject.check_out
110
+ end
99
111
  end
100
112
 
101
- it 'instantiates a new connection and returns it' do
102
- expect(Mysql2::Client).to receive(:new).with(default_options).and_return(client)
103
- expect(subject.check_out).to eq(client)
113
+ context 'and :reconnect is set to false' do
114
+ subject { described_class.new(options) }
115
+
116
+ it 'pings the server to force a reconnect' do
117
+ expect(client).not_to receive(:ping)
118
+
119
+ subject.check_out
120
+ end
104
121
  end
105
122
  end
106
123
 
@@ -139,6 +156,17 @@ describe MysqlFramework::Connector do
139
156
 
140
157
  subject.check_in(client)
141
158
  end
159
+
160
+ context 'when the connection has been closed by the server' do
161
+ let(:closed_client) { double(close: true, closed?: true) }
162
+
163
+ it 'instantiates a new connection and returns it' do
164
+ expect(Mysql2::Client).to receive(:new).with(default_options).and_return(client)
165
+ expect(subject.connections).to receive(:push).with(client)
166
+
167
+ subject.check_in(closed_client)
168
+ end
169
+ end
142
170
  end
143
171
 
144
172
  describe '#with_client' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mysql_framework
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sage
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-02 00:00:00.000000000 Z
11
+ date: 2018-08-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler