factory_bro 0.0.8 → 0.0.10

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 +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