zold 0.10.19 → 0.10.20

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e7ae7c852c6d1190d4a6a440700465fa92854527
4
- data.tar.gz: 67b159887e8c11ed5ce1a0df30230e1451859ad5
3
+ metadata.gz: c87fbfc264dd92de42cde13930a908289aacf563
4
+ data.tar.gz: 8e6f525f6b0018704d1e716aa5e47bb3c8914862
5
5
  SHA512:
6
- metadata.gz: 499abe446491bbc1cfa140422338778c6af96adf5e4c597d7f65427711bd591f961c167c27c0cc0b103f3091c483bddb5b504d465f4d7143f961fca45e3f19fa
7
- data.tar.gz: 39aa0b1199ad377d638c59c221adf257f194a52a87a3d32ae3ee2a96a277f1f401a65cbf3954ba985a8df0d1d839479b93688737c0b0ce5ef98a721474e3b90c
6
+ metadata.gz: c4b2c011d7a787548881a49e89178fd03615eaaddeb50caf682ea66cf9e561c826a13610a40cc2af14568d989a56ce63e14b9a07abcb91db54dfc9cca65eaeec
7
+ data.tar.gz: 47b372309318e42bef1dbc69ad53ce7d8a33e1166c433e11e06c1a99fef524e97e3e1c008a9e4a0f9557a8eb14b5032392b22164e23b30b3b5076c9f71c55e1d
data/.rubocop.yml CHANGED
@@ -31,10 +31,3 @@ Style/MultilineBlockChain:
31
31
  Enabled: false
32
32
  Layout/MultilineOperationIndentation:
33
33
  Enabled: false
34
-
35
- # @todo #64:30min Let's get rid of this and find a way to pass that
36
- # $log global variable to all tests. Now it's defined inside test__helper.rb,
37
- # but there should be a better solution. I posted a question about it:
38
- # https://stackoverflow.com/questions/50418822
39
- Style/GlobalVars:
40
- Enabled: false
data/.rultor.yml CHANGED
@@ -37,7 +37,7 @@ merge:
37
37
  script: |-
38
38
  bundle install
39
39
  rake
40
- pdd
40
+ pdd -f /dev/null -v
41
41
  deploy:
42
42
  script: |-
43
43
  echo "There is nothing to deploy"
data/lib/zold.rb CHANGED
@@ -18,7 +18,6 @@
18
18
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
19
  # SOFTWARE.
20
20
 
21
- require 'rainbow'
22
21
  require_relative 'zold/version'
23
22
 
24
23
  # Zold main module.
data/lib/zold/http.rb CHANGED
@@ -98,7 +98,7 @@ module Zold
98
98
  'Connection': 'close'
99
99
  }
100
100
  headers[Http::VERSION_HEADER] = VERSION
101
- headers[Http::SCORE_HEADER] = @score.reduced(4).to_text if @score.valid? && !@score.expired?
101
+ headers[Http::SCORE_HEADER] = @score.reduced(4).to_text if @score.valid? && !@score.expired? && @score.value > 3
102
102
  headers
103
103
  end
104
104
  end
@@ -61,6 +61,7 @@ module Zold
61
61
  @best << Score.new(Time.now, host, port, @invoice, strength: strength)
62
62
  @scores = Queue.new
63
63
  history.each { |s| @scores << s }
64
+ @log.debug("#{@scores.size} scores pre-loaded") unless @scores.size.zero?
64
65
  @threads = (1..threads).map do |t|
65
66
  Thread.new do
66
67
  VerboseThread.new(@log).run do
@@ -103,12 +104,12 @@ module Zold
103
104
  private
104
105
 
105
106
  def save(score)
106
- File.write(@cache, (history.reject(&:expired?) + [score]).map(&:to_s).join("\n"))
107
+ File.write(@cache, (history + [score]).map(&:to_s).join("\n"))
107
108
  end
108
109
 
109
110
  def history
110
111
  if File.exist?(@cache)
111
- File.readlines(@cache).map { |t| Score.parse(t) }
112
+ File.readlines(@cache).map { |t| Score.parse(t) }.reject(&:expired?)
112
113
  else
113
114
  []
114
115
  end
@@ -61,10 +61,7 @@ module Zold
61
61
  before do
62
62
  name = "HTTP-#{Http::SCORE_HEADER}".upcase.tr('-', '_')
63
63
  header = request.env[name]
64
- unless header
65
- settings.log.debug("#{request.url}: HTTP header #{Http::SCORE_HEADER} is absent (#{name})")
66
- return
67
- end
64
+ return unless header
68
65
  if settings.remotes.all.empty?
69
66
  settings.log.debug("#{request.url}: we are in standalone mode, won't update remotes")
70
67
  end
@@ -94,7 +91,13 @@ module Zold
94
91
  end
95
92
 
96
93
  get '/favicon.ico' do
97
- redirect 'https://www.zold.io/logo.png'
94
+ if score.value >= 16
95
+ redirect 'https://www.zold.io/images/logo-green.png'
96
+ elsif score.value >= 4
97
+ redirect 'https://www.zold.io/images/logo-orange.png'
98
+ else
99
+ redirect 'https://www.zold.io/images/logo-red.png'
100
+ end
98
101
  end
99
102
 
100
103
  get '/' do
@@ -151,11 +154,6 @@ module Zold
151
154
  )
152
155
  end
153
156
 
154
- get %r{/(?<page>.+\.html)} do
155
- content_type 'text/html'
156
- File.read(File.join(settings.root, "html/#{params[:page]}"))
157
- end
158
-
159
157
  not_found do
160
158
  status 404
161
159
  content_type 'text/plain'
data/lib/zold/version.rb CHANGED
@@ -23,5 +23,5 @@
23
23
  # Copyright:: Copyright (c) 2018 Yegor Bugayenko
24
24
  # License:: MIT
25
25
  module Zold
26
- VERSION = '0.10.19'.freeze
26
+ VERSION = '0.10.20'.freeze
27
27
  end
@@ -29,7 +29,7 @@ require_relative '../../lib/zold/commands/calculate'
29
29
  # License:: MIT
30
30
  class TestCalculate < Minitest::Test
31
31
  def test_calculates_score
32
- score = Zold::Calculate.new(log: $log).run(
32
+ score = Zold::Calculate.new(log: log).run(
33
33
  ['score', '--strength=2', '--max=8', '--invoice=NOSUFFIX@ffffffffffffffff']
34
34
  )
35
35
  assert(score.valid?)
@@ -36,7 +36,7 @@ class TestClean < Minitest::Test
36
36
  copies = home.copies(wallet)
37
37
  copies.add('a1', 'host-1', 80, 1, Time.now - 26 * 60 * 60)
38
38
  copies.add('a2', 'host-2', 80, 2, Time.now - 26 * 60 * 60)
39
- Zold::Clean.new(wallets: home.wallets, copies: copies.root, log: $log).run(['clean', wallet.id.to_s])
39
+ Zold::Clean.new(wallets: home.wallets, copies: copies.root, log: log).run(['clean', wallet.id.to_s])
40
40
  assert(copies.all.empty?)
41
41
  end
42
42
  end
@@ -32,7 +32,7 @@ require_relative '../../lib/zold/commands/create'
32
32
  class TestCreate < Minitest::Test
33
33
  def test_creates_wallet
34
34
  Dir.mktmpdir 'test' do |dir|
35
- wallet = Zold::Create.new(wallets: Zold::Wallets.new(dir), log: $log).run(
35
+ wallet = Zold::Create.new(wallets: Zold::Wallets.new(dir), log: log).run(
36
36
  ['create', '--public-key=fixtures/id_rsa.pub']
37
37
  )
38
38
  assert wallet.balance.zero?
@@ -44,13 +44,13 @@ class TestDiff < Minitest::Test
44
44
  File.write(first.path, File.read(wallet.path))
45
45
  second = home.create_wallet
46
46
  File.write(second.path, File.read(wallet.path))
47
- Zold::Pay.new(wallets: home.wallets, remotes: home.remotes, log: $log).run(
47
+ Zold::Pay.new(wallets: home.wallets, remotes: home.remotes, log: log).run(
48
48
  ['pay', wallet.id.to_s, second.id.to_s, '14.95', '--force', '--private-key=fixtures/id_rsa']
49
49
  )
50
50
  copies = home.copies(wallet)
51
51
  copies.add(File.read(first.path), 'host-1', 80, 5)
52
52
  copies.add(File.read(second.path), 'host-2', 80, 5)
53
- diff = Zold::Diff.new(wallets: home.wallets, copies: copies.root, log: $log).run(
53
+ diff = Zold::Diff.new(wallets: home.wallets, copies: copies.root, log: log).run(
54
54
  ['diff', wallet.id.to_s]
55
55
  )
56
56
  assert(diff.include?('-0001;'))
@@ -59,7 +59,7 @@ class TestFetch < Minitest::Test
59
59
  remotes.add('fake-1', 80)
60
60
  remotes.add('fake-2', 80)
61
61
  copies = Zold::Copies.new(File.join(dir, "copies/#{id}"))
62
- Zold::Fetch.new(wallets: wallets, copies: copies.root, remotes: remotes, log: $log).run(
62
+ Zold::Fetch.new(wallets: wallets, copies: copies.root, remotes: remotes, log: log).run(
63
63
  ['fetch', '--ignore-score-weakness', id.to_s]
64
64
  )
65
65
  assert_equal(copies.all[0][:name], '1')
@@ -83,7 +83,7 @@ class TestFetch < Minitest::Test
83
83
  remotes.add('fake-1', 80)
84
84
  copies = Zold::Copies.new(File.join(dir, "copies/#{id}"))
85
85
  Zold::Fetch.new(
86
- wallets: wallets, copies: copies.root, remotes: remotes, log: $log
86
+ wallets: wallets, copies: copies.root, remotes: remotes, log: log
87
87
  ).run(['fetch', id.to_s])
88
88
  assert_equal(copies.all[0][:name], '1')
89
89
  assert_equal(copies.all[0][:score], 0)
@@ -38,7 +38,7 @@ class TestInvoice < Minitest::Test
38
38
  wallets = Zold::Wallets.new(dir)
39
39
  source = wallets.find(id)
40
40
  source.init(id, Zold::Key.new(file: 'fixtures/id_rsa.pub'))
41
- invoice = Zold::Invoice.new(wallets: wallets, log: $log).run(
41
+ invoice = Zold::Invoice.new(wallets: wallets, log: log).run(
42
42
  ['invoice', id.to_s, '--length=16']
43
43
  )
44
44
  assert_equal(33, invoice.length)
@@ -37,7 +37,7 @@ class TestList < Minitest::Test
37
37
  wallets = Zold::Wallets.new(dir)
38
38
  wallet = wallets.find(id)
39
39
  wallet.init(Zold::Id.new, Zold::Key.new(file: 'fixtures/id_rsa.pub'))
40
- Zold::List.new(wallets: wallets, log: $log).run
40
+ Zold::List.new(wallets: wallets, log: log).run
41
41
  end
42
42
  end
43
43
  end
@@ -45,13 +45,13 @@ class TestMerge < Minitest::Test
45
45
  File.write(first.path, File.read(wallet.path))
46
46
  second = home.create_wallet
47
47
  File.write(second.path, File.read(wallet.path))
48
- Zold::Pay.new(wallets: home.wallets, remotes: home.remotes, log: $log).run(
48
+ Zold::Pay.new(wallets: home.wallets, remotes: home.remotes, log: log).run(
49
49
  ['pay', wallet.id.to_s, second.id.to_s, '14.95', '--force', '--private-key=fixtures/id_rsa']
50
50
  )
51
51
  copies = home.copies(wallet)
52
52
  copies.add(File.read(first.path), 'host-1', 80, 5)
53
53
  copies.add(File.read(second.path), 'host-2', 80, 5)
54
- modified = Zold::Merge.new(wallets: home.wallets, copies: copies.root, log: $log).run(
54
+ modified = Zold::Merge.new(wallets: home.wallets, copies: copies.root, log: log).run(
55
55
  ['merge', wallet.id.to_s]
56
56
  )
57
57
  assert(1, modified.count)
@@ -66,13 +66,13 @@ class TestMerge < Minitest::Test
66
66
  File.write(first.path, File.read(wallet.path))
67
67
  second = home.create_wallet
68
68
  File.write(second.path, File.read(wallet.path))
69
- Zold::Pay.new(wallets: home.wallets, remotes: home.remotes, log: $log).run(
69
+ Zold::Pay.new(wallets: home.wallets, remotes: home.remotes, log: log).run(
70
70
  ['pay', wallet.id.to_s, second.id.to_s, '14.95', '--force', '--private-key=fixtures/id_rsa']
71
71
  )
72
72
  copies = home.copies(wallet)
73
73
  copies.add(File.read(first.path), 'host-1', 80, 5)
74
74
  copies.add(File.read(second.path), 'host-2', 80, 5)
75
- modified = Zold::Merge.new(wallets: home.wallets, copies: copies.root, log: $log).run(
75
+ modified = Zold::Merge.new(wallets: home.wallets, copies: copies.root, log: log).run(
76
76
  ['merge', wallet.id.to_s]
77
77
  )
78
78
  assert(1, modified.count)
@@ -38,7 +38,7 @@ require_relative '../node/fake_node'
38
38
  # License:: MIT
39
39
  class TestNode < Minitest::Test
40
40
  def test_push_and_fetch
41
- FakeNode.new(log: $log).run do |port|
41
+ FakeNode.new(log: log).run do |port|
42
42
  Dir.mktmpdir 'test' do |dir|
43
43
  id = Zold::Id.new
44
44
  wallets = Zold::Wallets.new(dir)
@@ -47,10 +47,10 @@ class TestNode < Minitest::Test
47
47
  remotes = Zold::Remotes.new(File.join(dir, 'remotes.csv'))
48
48
  remotes.clean
49
49
  remotes.add('localhost', port)
50
- Zold::Push.new(wallets: wallets, remotes: remotes, log: $log).run(['push', '--sync'])
50
+ Zold::Push.new(wallets: wallets, remotes: remotes, log: log).run(['push', '--sync'])
51
51
  Zold::Fetch.new(
52
52
  wallets: wallets, copies: File.join(dir, 'copies'),
53
- remotes: remotes, log: $log
53
+ remotes: remotes, log: log
54
54
  ).run(['fetch'])
55
55
  copies = Zold::Copies.new(File.join(dir, "copies/#{id}"))
56
56
  assert_equal(1, copies.all.count)
@@ -37,7 +37,7 @@ class TestPay < Minitest::Test
37
37
  source = home.create_wallet
38
38
  target = home.create_wallet
39
39
  amount = Zold::Amount.new(zld: 14.95)
40
- Zold::Pay.new(wallets: home.wallets, remotes: home.remotes, log: $log).run(
40
+ Zold::Pay.new(wallets: home.wallets, remotes: home.remotes, log: log).run(
41
41
  [
42
42
  'pay', '--force', '--private-key=fixtures/id_rsa',
43
43
  source.id.to_s, target.id.to_s, amount.to_zld, 'For the car'
@@ -52,7 +52,7 @@ class TestPay < Minitest::Test
52
52
  source = home.create_wallet(Zold::Id::ROOT)
53
53
  target = home.create_wallet
54
54
  amount = Zold::Amount.new(zld: 14.95)
55
- Zold::Pay.new(wallets: home.wallets, remotes: home.remotes, log: $log).run(
55
+ Zold::Pay.new(wallets: home.wallets, remotes: home.remotes, log: log).run(
56
56
  [
57
57
  'pay', '--private-key=fixtures/id_rsa',
58
58
  source.id.to_s, target.id.to_s, amount.to_zld, 'For the car'
@@ -73,7 +73,7 @@ class TestPay < Minitest::Test
73
73
  'NOPREFIX', Zold::Id.new, '-'
74
74
  )
75
75
  )
76
- Zold::Pay.new(wallets: home.wallets, remotes: home.remotes, log: $log).run(
76
+ Zold::Pay.new(wallets: home.wallets, remotes: home.remotes, log: log).run(
77
77
  [
78
78
  'pay', '--private-key=fixtures/id_rsa',
79
79
  source.id.to_s, target.id.to_s, amount.to_zld, 'here is the refund'
@@ -38,7 +38,7 @@ class TestPush < Minitest::Test
38
38
  FakeHome.new.run do |home|
39
39
  wallet = home.create_wallet
40
40
  stub_request(:put, "http://fake-1/wallet/#{wallet.id}").to_return(status: 304)
41
- Zold::Push.new(wallets: home.wallets, remotes: home.remotes, log: $log).run(
41
+ Zold::Push.new(wallets: home.wallets, remotes: home.remotes, log: log).run(
42
42
  ['--ignore-this-stupid-option', 'push', wallet.id.to_s]
43
43
  )
44
44
  end
@@ -59,7 +59,7 @@ class TestRemote < Minitest::Test
59
59
  stub_request(:get, 'http://localhost:999/remotes').to_return(
60
60
  status: 404
61
61
  )
62
- cmd = Zold::Remote.new(remotes: remotes, log: $log)
62
+ cmd = Zold::Remote.new(remotes: remotes, log: log)
63
63
  cmd.run(%w[remote clean])
64
64
  cmd.run(['remote', 'add', zero.host, zero.port.to_s])
65
65
  cmd.run(%w[remote add localhost 2])
@@ -38,7 +38,7 @@ class TestShow < Minitest::Test
38
38
  wallets = Zold::Wallets.new(dir)
39
39
  wallet = wallets.find(id)
40
40
  wallet.init(Zold::Id.new, Zold::Key.new(file: 'fixtures/id_rsa.pub'))
41
- balance = Zold::Show.new(wallets: wallets, log: $log).run(['show', id.to_s])
41
+ balance = Zold::Show.new(wallets: wallets, log: log).run(['show', id.to_s])
42
42
  assert_equal(Zold::Amount::ZERO, balance)
43
43
  end
44
44
  end
@@ -59,7 +59,7 @@ class TestTaxes < Minitest::Test
59
59
  }.to_json
60
60
  )
61
61
  Zold::Taxes.new(
62
- wallets: wallets, remotes: remotes, log: $log
62
+ wallets: wallets, remotes: remotes, log: log
63
63
  ).run(['taxes', '--private-key=fixtures/id_rsa', id.to_s])
64
64
  assert_equal(Zold::Amount.new(coins: 85_856_396_247), wallet.balance)
65
65
  end
@@ -36,7 +36,7 @@ class EmissionTest < Minitest::Test
36
36
  'NOPREFIX', Zold::Id::ROOT, '-'
37
37
  )
38
38
  )
39
- $log.info("Year: #{year}, Quota: #{(Zold::Emission.new(wallet).quota * 100).round(2)}%, \
39
+ log.info("Year: #{year}, Quota: #{(Zold::Emission.new(wallet).quota * 100).round(2)}%, \
40
40
  Limit: #{Zold::Emission.new(wallet).limit}")
41
41
  end
42
42
  end
@@ -40,7 +40,7 @@ class TestEntrance < Minitest::Test
40
40
  body = FakeHome.new.run do |home|
41
41
  source = home.create_wallet(sid)
42
42
  target = home.create_wallet(tid)
43
- Zold::Pay.new(wallets: home.wallets, remotes: home.remotes, log: $log).run(
43
+ Zold::Pay.new(wallets: home.wallets, remotes: home.remotes, log: log).run(
44
44
  [
45
45
  'pay', '--force', '--private-key=fixtures/id_rsa',
46
46
  source.id.to_s, target.id.to_s, '19.99', 'testing'
@@ -51,7 +51,7 @@ class TestEntrance < Minitest::Test
51
51
  FakeHome.new.run do |home|
52
52
  source = home.create_wallet(sid)
53
53
  home.create_wallet(tid)
54
- modified = Zold::Entrance.new(home.wallets, home.remotes, home.copies(source).root, 'x', log: $log).push(
54
+ modified = Zold::Entrance.new(home.wallets, home.remotes, home.copies(source).root, 'x', log: log).push(
55
55
  source.id, body
56
56
  )
57
57
  assert_equal(2, modified.count)
@@ -28,7 +28,7 @@ require_relative '../../lib/zold/node/farm'
28
28
  class FarmTest < Minitest::Test
29
29
  def test_makes_best_score_in_background
30
30
  Dir.mktmpdir 'test' do |dir|
31
- farm = Zold::Farm.new('NOPREFIX@ffffffffffffffff', File.join(dir, 'f'), log: $log)
31
+ farm = Zold::Farm.new('NOPREFIX@ffffffffffffffff', File.join(dir, 'f'), log: log)
32
32
  farm.start('localhost', 80, threads: 4, strength: 2)
33
33
  sleep 0.1 while farm.best.empty? || farm.best[0].value.zero?
34
34
  assert(farm.best[0].value > 0)
@@ -38,7 +38,7 @@ class FarmTest < Minitest::Test
38
38
 
39
39
  def test_correct_score_from_empty_farm
40
40
  Dir.mktmpdir 'test' do |dir|
41
- farm = Zold::Farm.new('NOPREFIX@cccccccccccccccc', File.join(dir, 'f'), log: $log)
41
+ farm = Zold::Farm.new('NOPREFIX@cccccccccccccccc', File.join(dir, 'f'), log: log)
42
42
  farm.start('example.com', 8080, threads: 0, strength: 1)
43
43
  score = farm.best[0]
44
44
  assert_equal(0, score.value)
@@ -27,12 +27,11 @@ require_relative '../../lib/zold/score'
27
27
 
28
28
  class FrontTest < Minitest::Test
29
29
  def test_renders_public_pages
30
- FakeNode.new(log: $log).run(['--ignore-score-weakness']) do |port|
30
+ FakeNode.new(log: log).run(['--ignore-score-weakness']) do |port|
31
31
  {
32
32
  '200' => [
33
33
  '/robots.txt',
34
34
  '/',
35
- '/map.html',
36
35
  '/remotes'
37
36
  ],
38
37
  '404' => [
@@ -59,4 +58,39 @@ class FrontTest < Minitest::Test
59
58
  assert(json['all'].find { |r| r['host'] == 'localhost' })
60
59
  end
61
60
  end
61
+
62
+ def test_different_logos
63
+ {
64
+ '0' => 'https://www.zold.io/images/logo-red.png',
65
+ '4' => 'https://www.zold.io/images/logo-orange.png',
66
+ '16' => 'https://www.zold.io/images/logo-green.png'
67
+ }.each do |num, path|
68
+ log.info("Calculating score #{num}...")
69
+ score = Zold::Score.new(
70
+ Time.now, 'localhost', 999,
71
+ 'NOPREFIX@ffffffffffffffff',
72
+ strength: 1
73
+ )
74
+ num.to_i.times do
75
+ score = score.next
76
+ end
77
+ log.info("Score #{num} calculated.")
78
+ if score.value >= 16
79
+ assert_equal(
80
+ path, 'https://www.zold.io/images/logo-green.png',
81
+ "Expected #{path} for score #{score.value}"
82
+ )
83
+ elsif score.value >= 4
84
+ assert_equal(
85
+ path, 'https://www.zold.io/images/logo-orange.png',
86
+ "Expected #{path} for score #{score.value}"
87
+ )
88
+ else
89
+ assert_equal(
90
+ path, 'https://www.zold.io/images/logo-red.png',
91
+ "Expected #{path} for score #{score.value}"
92
+ )
93
+ end
94
+ end
95
+ end
62
96
  end
@@ -0,0 +1,6 @@
1
+ module Logs
2
+ def log
3
+ # $log = Zold::Log::Quiet.new
4
+ @log ||= Zold::Log::Verbose.new
5
+ end
6
+ end
data/test/test__helper.rb CHANGED
@@ -30,11 +30,17 @@ if ENV['CI'] == 'true'
30
30
  end
31
31
 
32
32
  require_relative '../lib/zold/log'
33
- # $log = Zold::Log::Quiet.new
34
- $log = Zold::Log::Verbose.new
35
33
 
36
34
  require 'minitest/autorun'
37
35
  require_relative '../lib/zold'
38
36
 
39
37
  gem 'openssl'
40
38
  require 'openssl'
39
+
40
+ require_relative 'support/logs'
41
+
42
+ module Minitest
43
+ class Test
44
+ include Logs
45
+ end
46
+ end
data/test/test_remotes.rb CHANGED
@@ -54,6 +54,7 @@ class TestRemotes < Minitest::Test
54
54
  remotes = Zold::Remotes.new(File.join(dir, 'remotes'))
55
55
  remotes.clean
56
56
  remotes.reset
57
+ remotes.reset
57
58
  assert(!remotes.all.empty?)
58
59
  end
59
60
  end
data/test/test_zold.rb CHANGED
@@ -38,7 +38,7 @@ class TestZold < Minitest::Test
38
38
  bin = File.join(Dir.pwd, 'bin/zold')
39
39
  Dir.chdir(dir) do
40
40
  stdout = `/bin/bash #{f} #{bin} 2>&1`
41
- $log.info(stdout)
41
+ log.info(stdout)
42
42
  assert_equal(0, $CHILD_STATUS.exitstatus)
43
43
  end
44
44
  end
data/zold.gemspec CHANGED
@@ -42,21 +42,22 @@ Gem::Specification.new do |s|
42
42
  s.test_files = s.files.grep(%r{^(test|spec|features|wp)/})
43
43
  s.rdoc_options = ['--charset=UTF-8']
44
44
  s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
45
- s.add_runtime_dependency 'concurrent-ruby', '1.0.5'
46
- s.add_runtime_dependency 'cucumber', '1.3.17'
47
- s.add_runtime_dependency 'diffy', '3.2.0'
48
- s.add_runtime_dependency 'openssl', '2.0.1'
45
+ s.add_runtime_dependency 'concurrent-ruby', '~>1.0.5'
46
+ s.add_runtime_dependency 'diffy', '~>3.2.0'
47
+ s.add_runtime_dependency 'json', '~>1.8.6'
48
+ s.add_runtime_dependency 'openssl', '~>2.1.1'
49
49
  s.add_runtime_dependency 'rainbow', '~>3.0'
50
- s.add_runtime_dependency 'rake', '12.0.0'
51
- s.add_runtime_dependency 'rubocop', '~>0.52.0'
52
- s.add_runtime_dependency 'rubocop-rspec', '1.5.1'
53
- s.add_runtime_dependency 'semantic', '~>1.5.0'
50
+ s.add_runtime_dependency 'semantic', '~>1.6.1'
54
51
  s.add_runtime_dependency 'sinatra', '~>2.0.1'
55
52
  s.add_runtime_dependency 'slop', '~>4.4'
56
53
  s.add_runtime_dependency 'xcop', '~>0.5'
57
54
  s.add_development_dependency 'codecov', '0.1.10'
58
- s.add_development_dependency 'minitest', '5.5.0'
55
+ s.add_development_dependency 'cucumber', '3.1.1'
56
+ s.add_development_dependency 'minitest', '5.11.3'
57
+ s.add_development_dependency 'rake', '12.3.1'
59
58
  s.add_development_dependency 'rdoc', '4.2.0'
60
59
  s.add_development_dependency 'rspec-rails', '3.1.0'
61
- s.add_development_dependency 'webmock', '3.4.1'
60
+ s.add_development_dependency 'rubocop', '0.52.0'
61
+ s.add_development_dependency 'rubocop-rspec'
62
+ s.add_development_dependency 'webmock', '3.4.2'
62
63
  end
metadata CHANGED
@@ -1,141 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zold
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.19
4
+ version: 0.10.20
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-06-02 00:00:00.000000000 Z
11
+ date: 2018-06-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.0.5
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
26
  version: 1.0.5
27
- - !ruby/object:Gem::Dependency
28
- name: cucumber
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - '='
32
- - !ruby/object:Gem::Version
33
- version: 1.3.17
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - '='
39
- - !ruby/object:Gem::Version
40
- version: 1.3.17
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: diffy
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
- - - '='
31
+ - - "~>"
46
32
  - !ruby/object:Gem::Version
47
33
  version: 3.2.0
48
34
  type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
- - - '='
38
+ - - "~>"
53
39
  - !ruby/object:Gem::Version
54
40
  version: 3.2.0
55
41
  - !ruby/object:Gem::Dependency
56
- name: openssl
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - '='
60
- - !ruby/object:Gem::Version
61
- version: 2.0.1
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - '='
67
- - !ruby/object:Gem::Version
68
- version: 2.0.1
69
- - !ruby/object:Gem::Dependency
70
- name: rainbow
42
+ name: json
71
43
  requirement: !ruby/object:Gem::Requirement
72
44
  requirements:
73
45
  - - "~>"
74
46
  - !ruby/object:Gem::Version
75
- version: '3.0'
47
+ version: 1.8.6
76
48
  type: :runtime
77
49
  prerelease: false
78
50
  version_requirements: !ruby/object:Gem::Requirement
79
51
  requirements:
80
52
  - - "~>"
81
53
  - !ruby/object:Gem::Version
82
- version: '3.0'
54
+ version: 1.8.6
83
55
  - !ruby/object:Gem::Dependency
84
- name: rake
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - '='
88
- - !ruby/object:Gem::Version
89
- version: 12.0.0
90
- type: :runtime
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - '='
95
- - !ruby/object:Gem::Version
96
- version: 12.0.0
97
- - !ruby/object:Gem::Dependency
98
- name: rubocop
56
+ name: openssl
99
57
  requirement: !ruby/object:Gem::Requirement
100
58
  requirements:
101
59
  - - "~>"
102
60
  - !ruby/object:Gem::Version
103
- version: 0.52.0
61
+ version: 2.1.1
104
62
  type: :runtime
105
63
  prerelease: false
106
64
  version_requirements: !ruby/object:Gem::Requirement
107
65
  requirements:
108
66
  - - "~>"
109
67
  - !ruby/object:Gem::Version
110
- version: 0.52.0
68
+ version: 2.1.1
111
69
  - !ruby/object:Gem::Dependency
112
- name: rubocop-rspec
70
+ name: rainbow
113
71
  requirement: !ruby/object:Gem::Requirement
114
72
  requirements:
115
- - - '='
73
+ - - "~>"
116
74
  - !ruby/object:Gem::Version
117
- version: 1.5.1
75
+ version: '3.0'
118
76
  type: :runtime
119
77
  prerelease: false
120
78
  version_requirements: !ruby/object:Gem::Requirement
121
79
  requirements:
122
- - - '='
80
+ - - "~>"
123
81
  - !ruby/object:Gem::Version
124
- version: 1.5.1
82
+ version: '3.0'
125
83
  - !ruby/object:Gem::Dependency
126
84
  name: semantic
127
85
  requirement: !ruby/object:Gem::Requirement
128
86
  requirements:
129
87
  - - "~>"
130
88
  - !ruby/object:Gem::Version
131
- version: 1.5.0
89
+ version: 1.6.1
132
90
  type: :runtime
133
91
  prerelease: false
134
92
  version_requirements: !ruby/object:Gem::Requirement
135
93
  requirements:
136
94
  - - "~>"
137
95
  - !ruby/object:Gem::Version
138
- version: 1.5.0
96
+ version: 1.6.1
139
97
  - !ruby/object:Gem::Dependency
140
98
  name: sinatra
141
99
  requirement: !ruby/object:Gem::Requirement
@@ -192,20 +150,48 @@ dependencies:
192
150
  - - '='
193
151
  - !ruby/object:Gem::Version
194
152
  version: 0.1.10
153
+ - !ruby/object:Gem::Dependency
154
+ name: cucumber
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '='
158
+ - !ruby/object:Gem::Version
159
+ version: 3.1.1
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '='
165
+ - !ruby/object:Gem::Version
166
+ version: 3.1.1
195
167
  - !ruby/object:Gem::Dependency
196
168
  name: minitest
197
169
  requirement: !ruby/object:Gem::Requirement
198
170
  requirements:
199
171
  - - '='
200
172
  - !ruby/object:Gem::Version
201
- version: 5.5.0
173
+ version: 5.11.3
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '='
179
+ - !ruby/object:Gem::Version
180
+ version: 5.11.3
181
+ - !ruby/object:Gem::Dependency
182
+ name: rake
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - '='
186
+ - !ruby/object:Gem::Version
187
+ version: 12.3.1
202
188
  type: :development
203
189
  prerelease: false
204
190
  version_requirements: !ruby/object:Gem::Requirement
205
191
  requirements:
206
192
  - - '='
207
193
  - !ruby/object:Gem::Version
208
- version: 5.5.0
194
+ version: 12.3.1
209
195
  - !ruby/object:Gem::Dependency
210
196
  name: rdoc
211
197
  requirement: !ruby/object:Gem::Requirement
@@ -234,20 +220,48 @@ dependencies:
234
220
  - - '='
235
221
  - !ruby/object:Gem::Version
236
222
  version: 3.1.0
223
+ - !ruby/object:Gem::Dependency
224
+ name: rubocop
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - '='
228
+ - !ruby/object:Gem::Version
229
+ version: 0.52.0
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - '='
235
+ - !ruby/object:Gem::Version
236
+ version: 0.52.0
237
+ - !ruby/object:Gem::Dependency
238
+ name: rubocop-rspec
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: '0'
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: '0'
237
251
  - !ruby/object:Gem::Dependency
238
252
  name: webmock
239
253
  requirement: !ruby/object:Gem::Requirement
240
254
  requirements:
241
255
  - - '='
242
256
  - !ruby/object:Gem::Version
243
- version: 3.4.1
257
+ version: 3.4.2
244
258
  type: :development
245
259
  prerelease: false
246
260
  version_requirements: !ruby/object:Gem::Requirement
247
261
  requirements:
248
262
  - - '='
249
263
  - !ruby/object:Gem::Version
250
- version: 3.4.1
264
+ version: 3.4.2
251
265
  description: Non-blockchain cryptocurrency
252
266
  email: yegor256@gmail.com
253
267
  executables:
@@ -291,7 +305,6 @@ files:
291
305
  - fixtures/scripts/calculate-scores.sh
292
306
  - fixtures/scripts/print-helps.sh
293
307
  - fixtures/scripts/push-and-pull.sh
294
- - html/map.html
295
308
  - lib/zold.rb
296
309
  - lib/zold/amount.rb
297
310
  - lib/zold/commands/args.rb
@@ -353,6 +366,7 @@ files:
353
366
  - test/node/test_entrance.rb
354
367
  - test/node/test_farm.rb
355
368
  - test/node/test_front.rb
369
+ - test/support/logs.rb
356
370
  - test/test__helper.rb
357
371
  - test/test_amount.rb
358
372
  - test/test_copies.rb
@@ -422,6 +436,7 @@ test_files:
422
436
  - test/node/test_entrance.rb
423
437
  - test/node/test_farm.rb
424
438
  - test/node/test_front.rb
439
+ - test/support/logs.rb
425
440
  - test/test__helper.rb
426
441
  - test/test_amount.rb
427
442
  - test/test_copies.rb
data/html/map.html DELETED
@@ -1,139 +0,0 @@
1
- <?xml version="1.0"?>
2
- <!--
3
- (The MIT License)
4
-
5
- Copyright (c) 2018 Yegor Bugayenko
6
-
7
- Permission is hereby granted, free of charge, to any person obtaining a copy
8
- of this software and associated documentation files (the 'Software'), to deal
9
- in the Software without restriction, including without limitation the rights
10
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
- copies of the Software, and to permit persons to whom the Software is
12
- furnished to do so, subject to the following conditions:
13
-
14
- The above copyright notice and this permission notice shall be included in all
15
- copies or substantial portions of the Software.
16
-
17
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
- SOFTWARE.
24
- -->
25
- <!DOCTYPE html>
26
- <html>
27
- <head>
28
- <meta charset="utf-8"/>
29
- <title>Zold nodes map</title>
30
- <meta name="description" content="Full map of visible Zold nodes"/>
31
- <meta name="keywords" content="zerocracy, management, robotocracy, meritocracy"/>
32
- <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
33
- <link rel="shortcut icon" href="https://www.zold.io/logo.png"/>
34
- <script src="https://maps.google.com/maps/api/js?key=AIzaSyArj6RePmR3DAAF7Tx9nK9UvO5exPStHu8">
35
- // Should be empty
36
- </script>
37
- <script src="https://code.jquery.com/jquery-3.3.1.min.js">
38
- // Should be empty
39
- </script>
40
- <style>
41
- * { box-sizing: border-box; margin: 0; padding: 0; font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; }
42
- html { height: 100% }
43
- body { height: 100%; }
44
- #container { width: 100%; height: 100% }
45
- #map { width: 80%; height: 100%; display: inline-block; }
46
- #nodes { width: 20%; height: 100%; background-color: #f5f5f5; float: right; padding: 1em; }
47
- #logo { position: absolute; bottom: 1em; right: 1em; width: 48px; height: 48px; }
48
- #remotes { margin-top: 1em; }
49
- #remotes li { list-style: none; }
50
- </style>
51
- <script>
52
- function put_marker_by_ip(map, coords, ip, port) {
53
- $.getJSON('http://www.geoplugin.net/json.gp?ip=' + ip, function(json) {
54
- var lat = parseFloat(json['geoplugin_latitude']), lon = parseFloat(json['geoplugin_longitude']);
55
- console.log(ip + ' located at ' + lat + '/' + lon);
56
- new google.maps.Marker({
57
- position: { lat: lat, lng: lon },
58
- map: map,
59
- title: coords
60
- });
61
- console.log('Marker set for ' + coords + ' at ' + lat + '/' + lon);
62
- }).fail(function() { console.log('Failed to find geo-location for ' + ip) });
63
- }
64
- function put_marker_by_host(map, coords, host, port) {
65
- $.getJSON('https://api.exana.io/dns/' + host + '/a', function(json) {
66
- ip = $.grep(json['answer'], function (a, i) { return a['type'] == 'A'; })[0]['rdata'];
67
- console.log('Host ' + host + ' resolved to ' + ip);
68
- put_marker_by_ip(map, coords, ip, port);
69
- }).fail(function() { console.log('Failed to find IP for ' + host) });
70
- }
71
- function put_markers(map, remotes) {
72
- $.each(remotes, function (i, r) {
73
- var host = r['host'], port = r['port'];
74
- var coords = host + ':' + port;
75
- var items = $('#remotes li[data-coords="' + coords + '"]');
76
- if (items.length) {
77
- var li = items.first();
78
- $.getJSON('http://' + coords + '/', function(json) {
79
- li.html(coords + ': ' + json['score']['value'] + '/' + json['wallets'] + ' (' + json['version'] + ')');
80
- if (host.match(/^[0-9\.]+$/)) {
81
- put_marker_by_ip(map, host + ':' + port, host, port);
82
- } else {
83
- put_marker_by_host(map, host + ':' + port, host, port);
84
- }
85
- }).done(function() { li.css('color', 'darkgreen'); }).fail(function() { li.css('color', 'red'); });
86
- } else {
87
- $('#remotes').append('<li data-coords="' + coords + '">' + coords + '</li>')
88
- }
89
- });
90
- }
91
- function refresh_list(map) {
92
- $.getJSON('http://b1.zold.io/remotes', function(data) {
93
- var remotes = data['all'];
94
- console.log(remotes.length + ' remote nodes found');
95
- put_markers(map, remotes);
96
- });
97
- }
98
- function refresh(map) {
99
- $.getJSON('http://b1.zold.io/', function(data) {
100
- $('#header').html(
101
- 'Version: ' + data['version'] + '<br/>' +
102
- 'Host: ' + data['score']['host'] + ':' + data['score']['port'] + '<br/>' +
103
- 'Score: ' + data['score']['value'] + '<br/>' +
104
- 'Wallets: ' + data['wallets']
105
- );
106
- refresh_list(map);
107
- window.setTimeout(refresh, 10000);
108
- });
109
- }
110
- function init() {
111
- var map = new google.maps.Map(
112
- document.getElementById("map"),
113
- {
114
- center: new google.maps.LatLng(55.751244, 37.618423),
115
- mapTypeId: google.maps.MapTypeId.ROADMAP,
116
- zoom: 3
117
- }
118
- );
119
- refresh(map);
120
- };
121
- </script>
122
- </head>
123
- <body onload="init();">
124
- <div id="container">
125
- <div id="map">
126
- <!-- Empty on start -->
127
- </div>
128
- <div id="nodes">
129
- <div id="header">
130
- <!-- Empty on start -->
131
- </div>
132
- <ul id="remotes">
133
- <!-- Empty on start -->
134
- </ul>
135
- </div>
136
- <img id="logo" src="https://www.zold.io/logo.svg"/>
137
- </div>
138
- </body>
139
- </html>