zold 0.10.19 → 0.10.20

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