activerecord-mysql-reconnect 0.3.6 → 0.3.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aa9520e56f0c5726a4abb72bd8bdc719e94d709f
4
- data.tar.gz: fb4302265396c109b2be9f328be48aa4f4351b35
3
+ metadata.gz: edc9b88122246d91bb12caad426b895a663b3ac3
4
+ data.tar.gz: 4d33d7b9b4aca402c5548ecd972cc7fe944dab06
5
5
  SHA512:
6
- metadata.gz: 7ab2e9a0f7aed38b65408fa5f9c7077047617c5c9275c753c9f6fd195cf4ef37708622bf8165be4a77d347694085e3cecc925e2db95aa6a986b2ff1ab181f6d3
7
- data.tar.gz: bce551e66baf1dd0a6e6717d15d2a53206d05c1698602ab6921375ab6b18082d3c85fcf4f540099a53508d1444ab643ba617dba4175dd1d495c66b3e58813dd7
6
+ metadata.gz: c12fbc120985b3f3d8f6b9b4fdcf0fa34ae431ca149ae152f8951f3f372b65f322398b5d8e33c261a66156654cc9645ab42714d5a5d866065badb234015b18c1
7
+ data.tar.gz: 08adf77b43b394d8e96a896ff0c17506743e0688cc2eae2feaf518276c96ac14e1d1bd3256e7edac1701bf9831b0a971210fa6e063fbec859f27b725c90db4f0
data/README.md CHANGED
@@ -90,7 +90,11 @@ gem 'activerecord-mysql-reconnect'
90
90
  MyApp::Application.configure do
91
91
  ...
92
92
  config.active_record.enable_retry = true
93
- #config.active_record.retry_databases = :employees # or [:employees], ['employees']
93
+ #config.active_record.retry_databases = :employees
94
+ # e.g. [:employees]
95
+ # ['employees', 'localhost:test', '192.168.1.1:users']
96
+ # ['192.168.%:emp\_all']
97
+ # ['emp%']
94
98
  # retry_databases -> nil: retry all databases (default)
95
99
  config.active_record.execution_tries = 10 # times
96
100
  # execution_tries -> 0: retry indefinitely
@@ -23,6 +23,6 @@ Gem::Specification.new do |spec|
23
23
  spec.add_dependency 'mysql2'
24
24
  spec.add_development_dependency 'bundler', '~> 1.3'
25
25
  spec.add_development_dependency 'rake'
26
- spec.add_development_dependency 'rspec', '>= 2.14.1', '< 3.0.0'
26
+ spec.add_development_dependency 'rspec', '>= 3.0.0'
27
27
  spec.add_development_dependency 'rspec-instafail'
28
28
  end
@@ -1,6 +1,7 @@
1
1
  require 'mysql2'
2
2
  require 'logger'
3
3
  require 'bigdecimal'
4
+ require 'strscan'
4
5
 
5
6
  require 'active_record'
6
7
  require 'active_record/connection_adapters/abstract_adapter'
@@ -85,7 +86,21 @@ module Activerecord::Mysql::Reconnect
85
86
  v = [v]
86
87
  end
87
88
 
88
- @activerecord_mysql_reconnect_retry_databases = v.map {|i| i.to_s }
89
+ @activerecord_mysql_reconnect_retry_databases = v.map do |database|
90
+ if database.instance_of?(Symbol)
91
+ database = Regexp.escape(database.to_s)
92
+ [/.*/, /\A#{database}\z/]
93
+ else
94
+ host = '%'
95
+ database = database.to_s
96
+
97
+ if database =~ /:/
98
+ host, database = database.split(':', 2)
99
+ end
100
+
101
+ [create_pattern_match_regex(host), create_pattern_match_regex(database)]
102
+ end
103
+ end
89
104
  end
90
105
 
91
106
  def retry_databases
@@ -185,7 +200,12 @@ module Activerecord::Mysql::Reconnect
185
200
 
186
201
  if conn and not retry_databases.empty?
187
202
  conn_info = connection_info(conn)
188
- return false unless retry_databases.include?(conn_info[:database])
203
+
204
+ included = retry_databases.any? do |host, database|
205
+ host =~ conn_info[:host] and database =~ conn_info[:database]
206
+ end
207
+
208
+ return false unless included
189
209
  end
190
210
 
191
211
  unless HANDLE_ERROR.any? {|i| e.kind_of?(i) }
@@ -220,5 +240,28 @@ module Activerecord::Mysql::Reconnect
220
240
 
221
241
  return conn_info
222
242
  end
243
+
244
+ private
245
+
246
+ def create_pattern_match_regex(str)
247
+ ss = StringScanner.new(str)
248
+ buf = []
249
+
250
+ until ss.eos?
251
+ if (tok = ss.scan(/[^\\%_]+/))
252
+ buf << Regexp.escape(tok)
253
+ elsif (tok = ss.scan(/\\/))
254
+ buf << Regexp.escape(ss.getch)
255
+ elsif (tok = ss.scan(/%/))
256
+ buf << '.*'
257
+ elsif (tok = ss.scan(/_/))
258
+ buf << '.'
259
+ else
260
+ raise 'must not happen'
261
+ end
262
+ end
263
+
264
+ /\A#{buf.join}\z/
265
+ end
223
266
  end # end of class methods
224
267
  end
@@ -1,7 +1,7 @@
1
1
  module Activerecord
2
2
  module Mysql
3
3
  module Reconnect
4
- VERSION = '0.3.6'
4
+ VERSION = '0.3.7'
5
5
  end
6
6
  end
7
7
  end
@@ -369,19 +369,41 @@ describe 'activerecord-mysql-reconnect' do
369
369
  end
370
370
  end
371
371
 
372
- it 'retry specific database' do
373
- retry_databases(:employees2) do
372
+ [
373
+ :employees2,
374
+ '127.0.0.2:employees',
375
+ '127.0.0.\_:employees',
376
+ ].each do |db|
377
+ it "retry specific database: #{db}" do
378
+ retry_databases(db) do
379
+ expect {
380
+ expect(Employee.all.length).to eq(300024)
381
+ mysql_restart
382
+ expect(Employee.all.length).to eq(300024)
383
+ }.to raise_error(ActiveRecord::StatementInvalid)
384
+ end
385
+
374
386
  expect {
375
387
  expect(Employee.all.length).to eq(300024)
376
388
  mysql_restart
377
389
  expect(Employee.all.length).to eq(300024)
378
- }.to raise_error(ActiveRecord::StatementInvalid)
390
+ }.to_not raise_error
379
391
  end
392
+ end
380
393
 
381
- expect {
382
- expect(Employee.all.length).to eq(300024)
383
- mysql_restart
384
- expect(Employee.all.length).to eq(300024)
385
- }.to_not raise_error
394
+ [
395
+ :employees,
396
+ '127.0.0.1:employees',
397
+ '127.0.0._:e%',
398
+ ].each do |db|
399
+ it "retry specific database: #{db}" do
400
+ retry_databases(db) do
401
+ expect {
402
+ expect(Employee.all.length).to eq(300024)
403
+ mysql_restart
404
+ expect(Employee.all.length).to eq(300024)
405
+ }.to_not raise_error
406
+ end
407
+ end
386
408
  end
387
409
  end
data/spec/spec_helper.rb CHANGED
@@ -119,8 +119,8 @@ RSpec.configure do |config|
119
119
  system("git checkout #{employees_sql}")
120
120
  end
121
121
 
122
- config.before(:each) do
123
- desc = RSpec.current_example.metadata[:full_description]
122
+ config.before(:each) do |context|
123
+ desc = context.metadata[:full_description]
124
124
  puts <<-EOS
125
125
 
126
126
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-mysql-reconnect
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.6
4
+ version: 0.3.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-23 00:00:00.000000000 Z
11
+ date: 2014-07-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -71,9 +71,6 @@ dependencies:
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - '>='
74
- - !ruby/object:Gem::Version
75
- version: 2.14.1
76
- - - <
77
74
  - !ruby/object:Gem::Version
78
75
  version: 3.0.0
79
76
  type: :development
@@ -81,9 +78,6 @@ dependencies:
81
78
  version_requirements: !ruby/object:Gem::Requirement
82
79
  requirements:
83
80
  - - '>='
84
- - !ruby/object:Gem::Version
85
- version: 2.14.1
86
- - - <
87
81
  - !ruby/object:Gem::Version
88
82
  version: 3.0.0
89
83
  - !ruby/object:Gem::Dependency