zold 0.16.18 → 0.16.19

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: de86dbcab88573c76088a862afd47563bebee0d62df73b695bdae79dc2e47778
4
- data.tar.gz: 76f9b1a004ff1ef24acf833626b128bff9ac7663e16bc10c7a476e4667b349fc
3
+ metadata.gz: f5c735ab0c917e4b346f598206c82a224a81caf5e6e3629d73203cb918bd6200
4
+ data.tar.gz: 41f2241f736aab555d0fd2a32481814c2142121339488a7e6269506a398204d2
5
5
  SHA512:
6
- metadata.gz: 68cf2ad85d6eeaf93cb9d32d1e84f8c25c96f70826ca4dc9e68140e89c32bd9d9e584fcc94e9ccc7fbfcaec0e1e9b2c3c2a51313f717af97da577bf517ae7ade
7
- data.tar.gz: 2c45d5fee9bf53f9e2e09e9e961c3004755574fd23a5840c93767b15beba9b3c236464fd299b70b39b846a3126b4ce66792bb29f608158f5af69fbc94ae3bf9c
6
+ metadata.gz: 8b477ea12a0c08aff12a68c5f07af44e13ebd131c0c156b9cde6fcf62da81fe21ffab32c3dc13483ec330a0f8a01ad8efcb67bc8612b772ea812bff5fe5b2a8a
7
+ data.tar.gz: 2eed2bff0ee50b4136088e2ad3a8b7c1ca80cffe02115f25891eeb6d45129bc590387134afbe22ed3bce1bf8c944c507aff07aa4708d5e7395b5b90998c2d045
@@ -7,7 +7,7 @@ function start_node {
7
7
  zold node $3 --nohup --nohup-command='touch restarted' --nohup-log=log --nohup-max-cycles=0 --nohup-log-truncate=10240 \
8
8
  --expose-version=$2 --save-pid=pid --routine-immediately \
9
9
  --verbose --trace --invoice=REDEPLOY@ffffffffffffffff \
10
- --host=localhost --port=$1 --bind-port=$1 --threads=0 > /dev/null 2>&1
10
+ --host=localhost --port=$1 --bind-port=$1 --threads=1 --strength=20 > /dev/null 2>&1
11
11
  wait_for_port $1
12
12
  cat pid
13
13
  cd ..
@@ -18,12 +18,19 @@ primary=$(start_node ${high} 9.9.9 --standalone)
18
18
 
19
19
  low=$(reserve_port)
20
20
  secondary=$(start_node ${low} 1.1.1)
21
+
22
+ zold remote clean
21
23
  zold remote add localhost ${high} --home=${low} --skip-ping
22
24
 
23
25
  trap "halt_nodes ${high}" EXIT
24
26
 
25
27
  wait_for_file ${low}/restarted
26
28
 
29
+ if [ `ps ax | grep zold | grep "${low}"` -eq '' ]; then
30
+ echo "The score finder process is still there, it's a bug"
31
+ exit -1
32
+ fi
33
+
27
34
  echo "High node logs (port ${high}):"
28
35
  cat ${high}/log
29
36
  echo "Low node logs (port ${low}):"
@@ -36,7 +36,7 @@ module Zold
36
36
  end
37
37
 
38
38
  def run(_ = [])
39
- @wallets.all.each do |id|
39
+ @wallets.all.sort.each do |id|
40
40
  @wallets.find(id) do |wallet|
41
41
  msg = wallet.mnemo
42
42
  msg += " (net:#{wallet.network})" if wallet.network != Wallet::MAIN_NETWORK
@@ -168,12 +168,8 @@ module Zold
168
168
  Front.set(:logger, @log)
169
169
  Front.set(:trace, @log)
170
170
  Front.set(:nohup_log, opts['nohup-log']) if opts['nohup-log']
171
- Front.set(:version, opts['expose-version'])
172
171
  Front.set(:protocol, Zold::PROTOCOL)
173
172
  Front.set(:logging, @log.debug?)
174
- Front.set(:halt, opts['halt-code'])
175
- Front.set(:disable_push, opts['disable-push'])
176
- Front.set(:disable_fetch, opts['disable-fetch'])
177
173
  home = File.expand_path(opts['home'])
178
174
  Front.set(:home, home)
179
175
  @log.info("Time: #{Time.now.utc.iso8601}")
@@ -197,16 +193,14 @@ module Zold
197
193
  Zold::Remote.new(remotes: @remotes).run(['remote', 'remove', host, port.to_s])
198
194
  @log.info("Removed current node (#{address}) from list of remotes")
199
195
  end
200
- Front.set(:ignore_score_weakness, opts['ignore-score-weakness'])
201
- Front.set(:network, opts['network'])
202
196
  Front.set(:wallets, @wallets)
203
197
  Front.set(:remotes, @remotes)
204
198
  Front.set(:copies, @copies)
205
199
  Front.set(:address, address)
206
200
  Front.set(:root, home)
201
+ Front.set(:opts, opts)
207
202
  Front.set(:dump_errors, opts['dump-errors'])
208
203
  Front.set(:port, opts['bind-port'])
209
- Front.set(:reboot, !opts['never-reboot'])
210
204
  node_alias = opts[:alias] || address
211
205
  unless node_alias.eql?(address) || node_alias =~ /^[A-Za-z0-9]{4,16}$/
212
206
  raise "Alias should be a 4 to 16 char long alphanumeric string: #{node_alias}"
@@ -104,8 +104,10 @@ total score for #{id} is #{total}")
104
104
  r.assert_valid_score(score)
105
105
  r.assert_score_ownership(score)
106
106
  r.assert_score_strength(score) unless opts['ignore-score-weakness']
107
- @log.info("#{r} accepted #{wallet.mnemo} in #{Age.new(start, limit: 4)}: \
107
+ if @log.info?
108
+ @log.info("#{r} accepted #{wallet.mnemo} in #{Age.new(start, limit: 4)}: \
108
109
  #{Rainbow(score.value).green} (#{json['version']})")
110
+ end
109
111
  score.value
110
112
  end
111
113
  end
@@ -87,6 +87,9 @@ Available options:"
87
87
  o.array '--ignore-node',
88
88
  'Ignore this node and never add it to the list',
89
89
  default: []
90
+ o.bool '--ignore-if-exists',
91
+ 'Ignore the node while adding if it already exists in the list',
92
+ default: false
90
93
  o.integer '--min-score',
91
94
  "The minimum score required for winning the election (default: #{Tax::EXACT_SCORE})",
92
95
  default: Tax::EXACT_SCORE
@@ -179,6 +182,10 @@ Available options:"
179
182
  @log.info("#{host}:#{port} won't be added since it's in the --ignore-node list")
180
183
  return
181
184
  end
185
+ if opts['ignore-if-exists'] && @remotes.exists?(host, port)
186
+ @log.info("#{host}:#{port} already exists, won't add because of --ignore-if-exists")
187
+ return
188
+ end
182
189
  unless opts['skip-ping']
183
190
  res = Http.new(uri: "http://#{host}:#{port}/version", network: opts['network']).get
184
191
  raise "The node #{host}:#{port} is not responding, #{res.code}:#{res.message}" unless res.code == '200'
@@ -55,27 +55,23 @@ module Zold
55
55
  set :lock, false
56
56
  set :show_exceptions, false
57
57
  set :server, :thin
58
- set :log, nil? # to be injected at node.rb
59
- set :trace, nil? # to be injected at node.rb
60
- set :halt, '' # to be injected at node.rb
58
+ set :opts, nil # to be injected at node.rb
59
+ set :log, nil # to be injected at node.rb
60
+ set :trace, nil # to be injected at node.rb
61
61
  set :dump_errors, false # to be injected at node.rb
62
- set :version, VERSION # to be injected at node.rb
63
62
  set :protocol, PROTOCOL # to be injected at node.rb
64
- set :ignore_score_weakness, false # to be injected at node.rb
65
- set :reboot, false # to be injected at node.rb
66
63
  set :nohup_log, false # to be injected at node.rb
67
- set :home, nil? # to be injected at node.rb
64
+ set :home, nil # to be injected at node.rb
68
65
  set :logging, true # to be injected at node.rb
69
- set :logger, nil? # to be injected at node.rb
70
- set :address, nil? # to be injected at node.rb
71
- set :farm, nil? # to be injected at node.rb
72
- set :metronome, nil? # to be injected at node.rb
73
- set :entrance, nil? # to be injected at node.rb
74
- set :network, 'test' # to be injected at node.rb
75
- set :wallets, nil? # to be injected at node.rb
76
- set :remotes, nil? # to be injected at node.rb
77
- set :copies, nil? # to be injected at node.rb
78
- set :node_alias, nil? # to be injected at node.rb
66
+ set :logger, nil # to be injected at node.rb
67
+ set :address, nil # to be injected at node.rb
68
+ set :farm, nil # to be injected at node.rb
69
+ set :metronome, nil # to be injected at node.rb
70
+ set :entrance, nil # to be injected at node.rb
71
+ set :wallets, nil # to be injected at node.rb
72
+ set :remotes, nil # to be injected at node.rb
73
+ set :copies, nil # to be injected at node.rb
74
+ set :node_alias, nil # to be injected at node.rb
79
75
  set :zache, Zache.new
80
76
  end
81
77
  use Rack::Deflater
@@ -84,14 +80,14 @@ module Zold
84
80
  Thread.current.thread_variable_set(:uri, request.url)
85
81
  Thread.current.thread_variable_set(:ip, request.ip)
86
82
  @start = Time.now
87
- if !settings.halt.empty? && params[:halt] && params[:halt] == settings.halt
83
+ if !settings.opts['halt-code'].empty? && params[:halt] && params[:halt] == settings.opts['halt-code']
88
84
  settings.log.error('Halt signal received, shutting the front end down...')
89
85
  Front.stop!
90
86
  end
91
87
  check_header(Http::NETWORK_HEADER) do |header|
92
- if header != settings.network
88
+ if header != settings.opts['network']
93
89
  error(400, "Network name mismatch at #{request.url}, #{request.ip} is in '#{header}', \
94
- while #{settings.address} is in '#{settings.network}'")
90
+ while #{settings.address} is in '#{settings.opts['network']}'")
95
91
  end
96
92
  end
97
93
  check_header(Http::PROTOCOL_HEADER) do |header|
@@ -100,19 +96,23 @@ while #{settings.address} is in '#{settings.network}'")
100
96
  end
101
97
  end
102
98
  check_header(Http::SCORE_HEADER) do |header|
103
- settings.log.debug("#{request.url}: we are in standalone mode, won't update remotes") if all_remotes.empty?
104
- s = Score.parse_text(header)
105
- error(400, 'The score is invalid') unless s.valid?
106
- error(400, 'The score is weak') if s.strength < Score::STRENGTH && !settings.ignore_score_weakness
107
- if settings.address == "#{s.host}:#{s.port}" && !settings.ignore_score_weakness
108
- error(400, 'Self-requests are prohibited')
109
- end
110
- require_relative '../commands/remote'
111
- cmd = Remote.new(remotes: settings.remotes, log: settings.log)
112
- begin
113
- cmd.run(['remote', 'add', s.host, s.port.to_s, "--network=#{settings.network}"])
114
- rescue StandardError => e
115
- error(400, e.message)
99
+ if settings.opts['standalone']
100
+ settings.log.debug("#{request.url}: we are in standalone mode, won't update remotes")
101
+ else
102
+ s = Score.parse_text(header)
103
+ error(400, 'The score is invalid') unless s.valid?
104
+ error(400, 'The score is weak') if s.strength < Score::STRENGTH && !settings.opts['ignore-score-weakness']
105
+ if settings.address == "#{s.host}:#{s.port}" && !settings.opts['ignore-score-weakness']
106
+ error(400, 'Self-requests are prohibited')
107
+ end
108
+ require_relative '../commands/remote'
109
+ begin
110
+ Remote.new(remotes: settings.remotes, log: settings.log).run(
111
+ ['remote', 'add', s.host, s.port.to_s, "--network=#{settings.opts['network']}", '--ignore-if-exists']
112
+ )
113
+ rescue StandardError => e
114
+ error(400, e.message)
115
+ end
116
116
  end
117
117
  end
118
118
  end
@@ -121,7 +121,7 @@ while #{settings.address} is in '#{settings.network}'")
121
121
  # Currently there are no tests at all that would verify the headers.
122
122
  after do
123
123
  headers['Cache-Control'] = 'no-cache'
124
- headers['X-Zold-Version'] = settings.version
124
+ headers['X-Zold-Version'] = settings.opts['expose-version']
125
125
  headers[Http::PROTOCOL_HEADER] = settings.protocol.to_s
126
126
  headers['Access-Control-Allow-Origin'] = '*'
127
127
  headers[Http::SCORE_HEADER] = score.reduced(16).to_s
@@ -142,7 +142,7 @@ in #{Age.new(@start, limit: 1)}")
142
142
 
143
143
  get '/version' do
144
144
  content_type('text/plain')
145
- settings.version
145
+ settings.opts['expose-version']
146
146
  end
147
147
 
148
148
  get '/protocol' do
@@ -186,9 +186,9 @@ in #{Age.new(@start, limit: 1)}")
186
186
  get '/' do
187
187
  content_type('application/json')
188
188
  JSON.pretty_generate(
189
- version: settings.version,
189
+ version: settings.opts['expose-version'],
190
190
  alias: settings.node_alias,
191
- network: settings.network,
191
+ network: settings.opts['network'],
192
192
  protocol: settings.protocol,
193
193
  score: score.to_h,
194
194
  pid: Process.pid,
@@ -218,12 +218,12 @@ in #{Age.new(@start, limit: 1)}")
218
218
  end
219
219
 
220
220
  get %r{/wallet/(?<id>[A-Fa-f0-9]{16})} do
221
- error(404, 'FETCH is disabled with --disable-fetch') if settings.disable_fetch
221
+ error(404, 'FETCH is disabled with --disable-fetch') if settings.opts['disable-fetch']
222
222
  id = Id.new(params[:id])
223
223
  copy_of(id) do |wallet|
224
224
  content_type('application/json')
225
225
  JSON.pretty_generate(
226
- version: settings.version,
226
+ version: settings.opts['expose-version'],
227
227
  alias: settings.node_alias,
228
228
  protocol: settings.protocol,
229
229
  id: wallet.id.to_s,
@@ -240,12 +240,12 @@ in #{Age.new(@start, limit: 1)}")
240
240
  end
241
241
 
242
242
  get %r{/wallet/(?<id>[A-Fa-f0-9]{16}).json} do
243
- error(404, 'FETCH is disabled with --disable-fetch') if settings.disable_fetch
243
+ error(404, 'FETCH is disabled with --disable-fetch') if settings.opts['disable-fetch']
244
244
  id = Id.new(params[:id])
245
245
  copy_of(id) do |wallet|
246
246
  content_type('application/json')
247
247
  JSON.pretty_generate(
248
- version: settings.version,
248
+ version: settings.opts['expose-version'],
249
249
  alias: settings.node_alias,
250
250
  protocol: settings.protocol,
251
251
  id: wallet.id.to_s,
@@ -261,7 +261,7 @@ in #{Age.new(@start, limit: 1)}")
261
261
  end
262
262
 
263
263
  get %r{/wallet/(?<id>[A-Fa-f0-9]{16})/balance} do
264
- error(404, 'FETCH is disabled with --disable-fetch') if settings.disable_fetch
264
+ error(404, 'FETCH is disabled with --disable-fetch') if settings.opts['disable-fetch']
265
265
  id = Id.new(params[:id])
266
266
  copy_of(id) do |wallet|
267
267
  content_type 'text/plain'
@@ -270,7 +270,7 @@ in #{Age.new(@start, limit: 1)}")
270
270
  end
271
271
 
272
272
  get %r{/wallet/(?<id>[A-Fa-f0-9]{16})/key} do
273
- error(404, 'FETCH is disabled with --disable-fetch') if settings.disable_fetch
273
+ error(404, 'FETCH is disabled with --disable-fetch') if settings.opts['disable-fetch']
274
274
  id = Id.new(params[:id])
275
275
  copy_of(id) do |wallet|
276
276
  content_type 'text/plain'
@@ -279,7 +279,7 @@ in #{Age.new(@start, limit: 1)}")
279
279
  end
280
280
 
281
281
  get %r{/wallet/(?<id>[A-Fa-f0-9]{16})/mtime} do
282
- error(404, 'FETCH is disabled with --disable-fetch') if settings.disable_fetch
282
+ error(404, 'FETCH is disabled with --disable-fetch') if settings.opts['disable-fetch']
283
283
  id = Id.new(params[:id])
284
284
  copy_of(id) do |wallet|
285
285
  content_type 'text/plain'
@@ -288,7 +288,7 @@ in #{Age.new(@start, limit: 1)}")
288
288
  end
289
289
 
290
290
  get %r{/wallet/(?<id>[A-Fa-f0-9]{16})/digest} do
291
- error(404, 'FETCH is disabled with --disable-fetch') if settings.disable_fetch
291
+ error(404, 'FETCH is disabled with --disable-fetch') if settings.opts['disable-fetch']
292
292
  id = Id.new(params[:id])
293
293
  copy_of(id) do |wallet|
294
294
  content_type 'text/plain'
@@ -297,7 +297,7 @@ in #{Age.new(@start, limit: 1)}")
297
297
  end
298
298
 
299
299
  get %r{/wallet/(?<id>[A-Fa-f0-9]{16})\.txt} do
300
- error(404, 'FETCH is disabled with --disable-fetch') if settings.disable_fetch
300
+ error(404, 'FETCH is disabled with --disable-fetch') if settings.opts['disable-fetch']
301
301
  id = Id.new(params[:id])
302
302
  copy_of(id) do |wallet|
303
303
  content_type 'text/plain'
@@ -321,7 +321,7 @@ in #{Age.new(@start, limit: 1)}")
321
321
  end
322
322
 
323
323
  get %r{/wallet/(?<id>[A-Fa-f0-9]{16})\.bin} do
324
- error(404, 'FETCH is disabled with --disable-fetch') if settings.disable_fetch
324
+ error(404, 'FETCH is disabled with --disable-fetch') if settings.opts['disable-fetch']
325
325
  id = Id.new(params[:id])
326
326
  copy_of(id) do |wallet|
327
327
  content_type 'text/plain'
@@ -330,7 +330,7 @@ in #{Age.new(@start, limit: 1)}")
330
330
  end
331
331
 
332
332
  get %r{/wallet/(?<id>[A-Fa-f0-9]{16})/copies} do
333
- error(404, 'FETCH is disabled with --disable-fetch') if settings.disable_fetch
333
+ error(404, 'FETCH is disabled with --disable-fetch') if settings.opts['disable-fetch']
334
334
  id = Id.new(params[:id])
335
335
  copy_of(id) do
336
336
  content_type 'text/plain'
@@ -348,7 +348,7 @@ in #{Age.new(@start, limit: 1)}")
348
348
  end
349
349
 
350
350
  get %r{/wallet/(?<id>[A-Fa-f0-9]{16})/copy/(?<name>[0-9]+)} do
351
- error(404, 'FETCH is disabled with --disable-fetch') if settings.disable_fetch
351
+ error(404, 'FETCH is disabled with --disable-fetch') if settings.opts['disable-fetch']
352
352
  id = Id.new(params[:id])
353
353
  name = params[:name]
354
354
  copy_of(id) do
@@ -360,7 +360,7 @@ in #{Age.new(@start, limit: 1)}")
360
360
  end
361
361
 
362
362
  put %r{/wallet/(?<id>[A-Fa-f0-9]{16})/?} do
363
- error(404, 'PUSH is disabled with --disable-push') if settings.disable_fetch
363
+ error(404, 'PUSH is disabled with --disable-push') if settings.opts['disable-fetch']
364
364
  request.body.rewind
365
365
  modified = settings.entrance.push(Id.new(params[:id]), request.body.read.to_s)
366
366
  if modified.empty?
@@ -368,7 +368,7 @@ in #{Age.new(@start, limit: 1)}")
368
368
  return
369
369
  end
370
370
  JSON.pretty_generate(
371
- version: settings.version,
371
+ version: settings.opts['expose-version'],
372
372
  alias: settings.node_alias,
373
373
  score: score.to_h,
374
374
  wallets: total_wallets
@@ -378,7 +378,7 @@ in #{Age.new(@start, limit: 1)}")
378
378
  get '/remotes' do
379
379
  content_type('application/json')
380
380
  JSON.pretty_generate(
381
- version: settings.version,
381
+ version: settings.opts['expose-version'],
382
382
  alias: settings.node_alias,
383
383
  score: score.to_h,
384
384
  all: all_remotes,
@@ -450,18 +450,18 @@ in #{Age.new(@start, limit: 1)}")
450
450
  # takes a lot of time (when the amount of wallets is big, like 40K). However,
451
451
  # we must find a way to count them somehow faster.
452
452
  def total_wallets
453
- return 256 if settings.network == Wallet::MAIN_NETWORK
453
+ return 256 if settings.opts['network'] == Wallet::MAIN_NETWORK
454
454
  settings.wallets.all.count
455
455
  end
456
456
 
457
457
  def all_remotes
458
- settings.zache.get(:remotes, lifetime: settings.network == Wallet::MAIN_NETWORK ? 60 : 0) do
458
+ settings.zache.get(:remotes, lifetime: settings.opts['network'] == Wallet::MAIN_NETWORK ? 60 : 0) do
459
459
  settings.remotes.all
460
460
  end
461
461
  end
462
462
 
463
463
  def processes_count
464
- settings.zache.get(:processes, lifetime: settings.network == Wallet::MAIN_NETWORK ? 60 : 0) do
464
+ settings.zache.get(:processes, lifetime: settings.opts['network'] == Wallet::MAIN_NETWORK ? 60 : 0) do
465
465
  processes.count
466
466
  end
467
467
  end
@@ -471,7 +471,7 @@ in #{Age.new(@start, limit: 1)}")
471
471
  end
472
472
 
473
473
  def score
474
- settings.zache.get(:score, lifetime: settings.network == Wallet::MAIN_NETWORK ? 60 : 0) do
474
+ settings.zache.get(:score, lifetime: settings.opts['network'] == Wallet::MAIN_NETWORK ? 60 : 0) do
475
475
  b = settings.farm.best
476
476
  raise 'Score is empty, there is something wrong with the Farm!' if b.empty?
477
477
  b[0]
data/lib/zold/version.rb CHANGED
@@ -25,6 +25,6 @@
25
25
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
26
26
  # License:: MIT
27
27
  module Zold
28
- VERSION = '0.16.18'
28
+ VERSION = '0.16.19'
29
29
  PROTOCOL = 2
30
30
  end
@@ -65,7 +65,7 @@ class FakeNode
65
65
  uri = "http://localhost:#{port}/"
66
66
  attempt = 0
67
67
  loop do
68
- ping = Zold::Http.new(uri: uri, network: Zold::Front.network).get
68
+ ping = Zold::Http.new(uri: uri).get
69
69
  break unless ping.code == '599' && node.alive?
70
70
  @log.debug("Waiting for #{uri} (attempt no.#{attempt}): ##{ping.code}...")
71
71
  sleep 0.5
@@ -265,11 +265,11 @@ class FrontTest < Zold::Test
265
265
 
266
266
  def test_headers_are_being_set_correctly
267
267
  Time.stub :now, Time.at(0) do
268
- FakeNode.new(log: test_log).run(['--no-metronome', '--threads=0', '--ignore-score-weakness']) do |port|
268
+ FakeNode.new(log: test_log).run(['--expose-version=9.9.9', '--no-metronome', '--threads=0']) do |port|
269
269
  response = Zold::Http.new(uri: URI("http://localhost:#{port}/")).get
270
270
  assert_equal('no-cache', response.header['Cache-Control'])
271
271
  assert_equal('close', response.header['Connection'])
272
- assert_equal(app.settings.version, response.header['X-Zold-Version'])
272
+ assert_equal('9.9.9', response.header['X-Zold-Version'])
273
273
  assert_equal(app.settings.protocol.to_s, response.header[Zold::Http::PROTOCOL_HEADER])
274
274
  assert_equal('*', response.header['Access-Control-Allow-Origin'])
275
275
  assert(response.header['X-Zold-Milliseconds'])
data/test/test_zold.rb CHANGED
@@ -34,8 +34,7 @@ require_relative '../lib/zold/age'
34
34
  # License:: MIT
35
35
  class TestZold < Zold::Test
36
36
  Dir.new('fixtures/scripts').select { |f| f =~ /\.sh$/ && !f.start_with?('_') }.each do |f|
37
- # next unless f == 'push-and-pull.sh'
38
- define_method("test_script_#{f.gsub(/[^a-z]/, '_')}") do
37
+ define_method("test_#{f.gsub(/\.sh$/, '').gsub(/[^a-z]/, '_')}") do
39
38
  start = Time.now
40
39
  test_log.debug("\n\n#{f} running...")
41
40
  Dir.mktmpdir do |dir|
data/zold.gemspec CHANGED
@@ -75,7 +75,7 @@ and suggests a different architecture for digital wallet maintenance.'
75
75
  s.add_runtime_dependency 'threads', '0.3.0'
76
76
  s.add_runtime_dependency 'usagewatch_ext', '0.2.1'
77
77
  s.add_runtime_dependency 'xcop', '0.6'
78
- s.add_runtime_dependency 'zache', '0.3.0'
78
+ s.add_runtime_dependency 'zache', '0.3.1'
79
79
  s.add_runtime_dependency 'zold-score', '0.2.0'
80
80
  s.add_development_dependency 'codecov', '0.1.13'
81
81
  s.add_development_dependency 'minitest', '5.11.3'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zold
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.16.18
4
+ version: 0.16.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-09 00:00:00.000000000 Z
11
+ date: 2018-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backtrace
@@ -310,14 +310,14 @@ dependencies:
310
310
  requirements:
311
311
  - - '='
312
312
  - !ruby/object:Gem::Version
313
- version: 0.3.0
313
+ version: 0.3.1
314
314
  type: :runtime
315
315
  prerelease: false
316
316
  version_requirements: !ruby/object:Gem::Requirement
317
317
  requirements:
318
318
  - - '='
319
319
  - !ruby/object:Gem::Version
320
- version: 0.3.0
320
+ version: 0.3.1
321
321
  - !ruby/object:Gem::Dependency
322
322
  name: zold-score
323
323
  requirement: !ruby/object:Gem::Requirement