factory_bro 0.0.8 → 0.0.9

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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/factory_bro.rb +41 -9
  3. metadata +4 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3dcb2bfceacd76d523581ef27f60a5288191ec73
4
- data.tar.gz: ac758cfe634c7478b6db82d37f405be735df0628
3
+ metadata.gz: e12f25e427e7087744e62c7612dc01feb1d40443
4
+ data.tar.gz: e6dff640ac5da0dbfe21274a42824c8158d90410
5
5
  SHA512:
6
- metadata.gz: ab87b643dfbf083536445ea15e9a8de3063c725803d6df93fd00c6b67fb5305759effd7faef9debdfbabdf2672bda96772137564213d17fc0f9c9881bb3d861c
7
- data.tar.gz: b6cdd259fb39f94fd73be16fc4d46b20f5f21ee6445c473646e44154a7651a19355ce387de503aa3d82c35b83f7296461c4e4e23891c8b2d751ddacd246628ff
6
+ metadata.gz: 7ef31083d40b63338dac93c6584ad887251e3bd3c4eef6d90078de493bc5354cc5615dcf7c94db90e35c74ed6048f6b2d8404b4c458ce4df7dbd561f4e22b310
7
+ data.tar.gz: fa4374be89e8ba9e20650b039ec58ea6dffca7e3e87625d5212e149e93351bfe48f0b341896d63a1d55ae243a781b17f50319c7b534b9437538dd3d2cd93b5c6
@@ -8,28 +8,36 @@ class FactoryBro
8
8
  $conns = {}
9
9
  else
10
10
  $conns.each do |key, conn|
11
- if conn.finished?
11
+ if conn&.finished?
12
12
  $conns[key] = ''
13
13
  end
14
14
  end
15
15
  end
16
+ unless $dbs
17
+ $dbs = {}
18
+ end
19
+ $dbs[name] = db
16
20
  if db.include? 'postgres://'
17
21
  dbData = parse_url(db)
18
- $conns[name] = PG.connect( user: dbData[:user],
19
- password: dbData[:pw],
20
- host: dbData[:host],
21
- port: dbData[:port],
22
- dbname: dbData[:dbname]
23
- )
22
+ $conns[name] = safe_connect(name) do
23
+ PG.connect(
24
+ user: dbData[:user],
25
+ password: dbData[:pw],
26
+ host: dbData[:host],
27
+ port: dbData[:port],
28
+ dbname: dbData[:dbname]
29
+ )
30
+ end
24
31
  else
25
32
  # take arguments of user and pw
26
- $conns[name] = PG.connect( dbname: db)
33
+ $conns[name] = safe_connect { PG.connect(dbname: db) }
27
34
  end
28
35
  end
29
36
 
30
37
  def self.close(name)
31
38
  $conns[name].finish
32
39
  $conns[name] = ''
40
+ $dbs[name] = ''
33
41
  end
34
42
 
35
43
  def self.close_all
@@ -39,10 +47,12 @@ class FactoryBro
39
47
  end
40
48
  end
41
49
  $conns = nil
50
+ $dbs = nil
42
51
  end
43
52
 
44
53
  def self.exec(name, statement)
45
- run = $conns[name].exec(statement)
54
+ run = safe_connect(name) { $conns[name].exec(statement) }
55
+ $try = 0
46
56
  run.values
47
57
  end
48
58
 
@@ -154,4 +164,26 @@ end
154
164
  end
155
165
  { columns: columns, values: values}
156
166
  end
167
+
168
+ def self.safe_connect(name)
169
+ $try ||= 0
170
+ max_tries = 4
171
+ wait = 10
172
+ success = false
173
+ result = nil
174
+ until success
175
+ begin
176
+ result = yield
177
+ success = true
178
+ result
179
+ rescue PG::UnableToSend, PG::ConnectionBad => error
180
+ $try += 1
181
+ raise error if $try > max_tries
182
+ puts "FactoryBro error: Failed to connect to #{name}, try ##{$try} to reconnect in #{wait}s"
183
+ sleep wait
184
+ connect(name, $dbs[name])
185
+ end
186
+ end
187
+ result
188
+ end
157
189
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factory_bro
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
  - Nate Reynolds
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-13 00:00:00.000000000 Z
11
+ date: 2019-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg
@@ -60,7 +60,8 @@ extra_rdoc_files: []
60
60
  files:
61
61
  - lib/factory_bro.rb
62
62
  homepage: https://github.com/nvreynolds/factory_bro
63
- licenses: []
63
+ licenses:
64
+ - MIT
64
65
  metadata: {}
65
66
  post_install_message:
66
67
  rdoc_options: []