factory_bro 0.0.8 → 0.0.10

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 +5 -5
  2. data/lib/factory_bro.rb +41 -9
  3. metadata +11 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 3dcb2bfceacd76d523581ef27f60a5288191ec73
4
- data.tar.gz: ac758cfe634c7478b6db82d37f405be735df0628
2
+ SHA256:
3
+ metadata.gz: 802a546afa0fc6bf1409edb79b18ab172994c6568a7b64920b1f74d0b801ee76
4
+ data.tar.gz: 97bee4ca138bed55a28c1567166f7c2e33ed5b7e6bf64404b2540fcadb93362f
5
5
  SHA512:
6
- metadata.gz: ab87b643dfbf083536445ea15e9a8de3063c725803d6df93fd00c6b67fb5305759effd7faef9debdfbabdf2672bda96772137564213d17fc0f9c9881bb3d861c
7
- data.tar.gz: b6cdd259fb39f94fd73be16fc4d46b20f5f21ee6445c473646e44154a7651a19355ce387de503aa3d82c35b83f7296461c4e4e23891c8b2d751ddacd246628ff
6
+ metadata.gz: f2f56133d25ce735c0829e36b254ac04bf4a002908a92ca5a18c552e207f2c4a82d23002ccf02dd9e7707a3803eeaff4319ef47c1d6d070dcb63841c5fca9d20
7
+ data.tar.gz: 6e28a0383ae72b3f1f80508da3ef127118812a1a8941f115cac76f9066cb9e822ef505a238307970525fb155d9ad0ad14f4d9191ab4a80d0ada4092c4692d65b
data/lib/factory_bro.rb CHANGED
@@ -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.10
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: 2023-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.1.4
19
+ version: 1.5.4
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.1.4
26
+ version: 1.5.4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: faker
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.9.3
33
+ version: 3.2.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.9.3
40
+ version: 3.2.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: pry
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.10.4
47
+ version: 0.14.2
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.10.4
54
+ version: 0.14.2
55
55
  description: PSQL Parser and Data Generation similar to factory_girl
56
56
  email: nate@n8r.us
57
57
  executables: []
@@ -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: []
@@ -77,8 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
77
78
  - !ruby/object:Gem::Version
78
79
  version: '0'
79
80
  requirements: []
80
- rubyforge_project:
81
- rubygems_version: 2.6.8
81
+ rubygems_version: 3.0.3.1
82
82
  signing_key:
83
83
  specification_version: 4
84
84
  summary: Factory Bro