factory_bro 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
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: []