zold 0.0.5 → 0.0.6

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: 4af388b06015493f1ef9524f79afae08cdf1c1b6
4
- data.tar.gz: 59a0f2cbd9f03218906777eb44008a5deebbcf6a
3
+ metadata.gz: e31ddf85f51ef24b3ca8bb69bab3142e78499d01
4
+ data.tar.gz: 2ad719e700e8a691bd56a9fad9558baaafcfe49f
5
5
  SHA512:
6
- metadata.gz: 6b14cca3133a4e94ebf9618d61b65992f2dbbd7b10a81251ee39aa8051f98b35787b305c47e42c1ff7a5bc42d191f644719299d03ac1d1195775b39a457cb372
7
- data.tar.gz: d76056868277add9a8cf30134d58e930dd06c9c20dd31a6a80a72c0ffef293e92001b2c95e83351ad471d8e77d2be0b61c6f44df4841b284f485c14034c2eb50
6
+ metadata.gz: 0fef444d304c65a3af45b222fe6def9c74601e622a31e6dd772484d0ce1b1748068c84fc420448157186b32635000b79f0ea87f99735b79a78f6f09192d7baf1
7
+ data.tar.gz: 01e70165f45a89d4aa336410374d15d8da8ad560152f23d3dc8907547669cae09fe25928933d7197ada4fadb9596f47706e3486063e0e42131265d6a176e03f6
@@ -1,6 +1,7 @@
1
1
  assets:
2
2
  rubygems.yml: zerocracy/home#assets/rubygems.yml
3
- s3cfg: zerocracy/home#assets/s3cfg
3
+ id_rsa: zerocracy/home#assets/heroku-key
4
+ id_rsa.pub: zerocracy/home#assets/heroku-key.pub
4
5
  install: |
5
6
  sudo apt-get -y update
6
7
  sudo gem install pdd
@@ -15,6 +16,18 @@ release:
15
16
  gem build zold.gemspec
16
17
  chmod 0600 ../rubygems.yml
17
18
  gem push *.gem --config-file ../rubygems.yml
19
+ git remote add heroku git@heroku.com:zold.git
20
+ rm -rf ~/.ssh
21
+ mkdir ~/.ssh
22
+ mv ../id_rsa ../id_rsa.pub ~/.ssh
23
+ chmod -R 600 ~/.ssh/*
24
+ echo -e "Host *\n StrictHostKeyChecking no\n UserKnownHostsFile=/dev/null" > ~/.ssh/config
25
+ sed -i -s 's|Gemfile.lock||g' .gitignore
26
+ git add Gemfile.lock
27
+ git add .gitignore
28
+ git fetch
29
+ git commit -m 'ignores' && git push -f heroku $(git symbolic-ref --short HEAD):master && git reset HEAD~1
30
+ curl -f --connect-timeout 15 --retry 5 --retry-delay 30 http://b1.zold.io > /dev/null
18
31
  commanders:
19
32
  - yegor256
20
33
  architect:
data/Gemfile CHANGED
@@ -19,4 +19,5 @@
19
19
  # SOFTWARE.
20
20
 
21
21
  source 'https://rubygems.org'
22
+ ruby '2.3.3'
22
23
  gemspec
@@ -0,0 +1 @@
1
+ web: LC_ALL=UTF-8 ./bin/zold node $PORT
data/bin/zold CHANGED
@@ -38,6 +38,7 @@ require_relative '../lib/zold/commands/balance'
38
38
  require_relative '../lib/zold/commands/check'
39
39
  require_relative '../lib/zold/commands/pull'
40
40
  require_relative '../lib/zold/commands/push'
41
+ require_relative '../lib/zold/node/front'
41
42
 
42
43
  Encoding.default_external = Encoding::UTF_8
43
44
  Encoding.default_internal = Encoding::UTF_8
@@ -60,6 +61,8 @@ Available commands:
60
61
  Send ZOLD from one wallet to another
61
62
  #{Rainbow('push').green} [id...]
62
63
  Push all local wallets or the ones required
64
+ #{Rainbow('node').green} port
65
+ Run node at the given TCP port
63
66
  Available options:"
64
67
  o.string '-d', '--dir',
65
68
  'The directory where wallets are stored (default: current directory)',
@@ -93,6 +96,9 @@ Available options:"
93
96
  wallets = Zold::Wallets.new(opts['dir'])
94
97
 
95
98
  case command
99
+ when 'node'
100
+ raise 'TCP port is required' if opts.arguments[1].nil?
101
+ Zold::Front.run!(port: opts.arguments[1].to_i)
96
102
  when 'create'
97
103
  Zold::Create.new(
98
104
  wallets: wallets,
@@ -0,0 +1,13 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ cd $(dirname $0)
5
+ bundle update
6
+ rake
7
+ trap 'git reset HEAD~1 && git checkout -- .gitignore' EXIT
8
+ sed -i -s 's|Gemfile.lock||g' .gitignore
9
+ git add Gemfile.lock
10
+ git add .gitignore
11
+ git commit -m 'configs for heroku'
12
+ git push heroku master -f
13
+
@@ -33,8 +33,15 @@ module Zold
33
33
  end
34
34
 
35
35
  def run
36
- raise 'PULL doesn\'t work and the wallet is absent' unless @wallet.exists?
37
- @log.info("The #{@wallet} is here")
36
+ request = Net::HTTP::Get.new("/wallets/#{@wallet.id}")
37
+ response = Net::HTTP.new('b1.zold.io', 80).start do |http|
38
+ http.request(request)
39
+ end
40
+ unless response.code.to_i == 200
41
+ raise "Failed to pull from the the node, code=#{response.code}"
42
+ end
43
+ File.write(@wallet.path, response.body)
44
+ @log.info("The #{@wallet} pulled from the server")
38
45
  @wallet
39
46
  end
40
47
  end
@@ -18,6 +18,7 @@
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 'net/http'
21
22
  require_relative '../log.rb'
22
23
 
23
24
  # PUSH command.
@@ -34,7 +35,15 @@ module Zold
34
35
 
35
36
  def run
36
37
  raise 'The wallet is absent' unless @wallet.exists?
37
- raise 'PUSH is not implemented yet'
38
+ request = Net::HTTP::Put.new("/wallets/#{@wallet.id}")
39
+ request.body = File.read(@wallet.path)
40
+ response = Net::HTTP.new('b1.zold.io', 80).start do |http|
41
+ http.request(request)
42
+ end
43
+ unless response.code.to_i == 200
44
+ raise "Failed to push to the node, code=#{response.code}"
45
+ end
46
+ @log.info("The #{@wallet.id} pushed to the server")
38
47
  end
39
48
  end
40
49
  end
@@ -0,0 +1,112 @@
1
+ # Copyright (c) 2018 Zerocracy, Inc.
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the 'Software'), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in all
11
+ # copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ # SOFTWARE.
20
+
21
+ STDOUT.sync = true
22
+
23
+ require 'haml'
24
+ require 'json'
25
+ require 'sinatra/base'
26
+
27
+ require_relative '../version'
28
+ require_relative '../wallet'
29
+ require_relative '../wallets'
30
+ require_relative '../id'
31
+ require_relative '../commands/check'
32
+
33
+ # The web front of the node.
34
+ # Author:: Yegor Bugayenko (yegor256@gmail.com)
35
+ # Copyright:: Copyright (c) 2018 Zerocracy, Inc.
36
+ # License:: MIT
37
+ module Zold
38
+ # Web front
39
+ class Front < Sinatra::Base
40
+ configure do
41
+ Haml::Options.defaults[:format] = :xhtml
42
+ set :lock, Mutex.new
43
+ set :views, (proc { File.join(root, '../../../views') })
44
+ set :show_exceptions, false
45
+ set :wallets, Wallets.new(Dir.mktmpdir('zold-', '/tmp'))
46
+ end
47
+
48
+ get '/' do
49
+ haml :index, layout: :layout, locals: {
50
+ title: 'zold',
51
+ total: settings.wallets.total
52
+ }
53
+ end
54
+
55
+ get '/robots.txt' do
56
+ 'User-agent: *'
57
+ end
58
+
59
+ get '/version' do
60
+ VERSION
61
+ end
62
+
63
+ get %r{/wallets/(?<id>[a-f0-9]{16})/?} do
64
+ id = Id.new(params[:id])
65
+ wallet = settings.wallets.find(id)
66
+ error 404 unless wallet.exists?
67
+ File.read(wallet.path)
68
+ end
69
+
70
+ put %r{/wallets/(?<id>[a-f0-9]{16})/?} do
71
+ settings.lock.synchronize do
72
+ id = Id.new(params[:id])
73
+ wallet = settings.wallets.find(id)
74
+ temp = before = nil
75
+ if wallet.exists?
76
+ before = wallet.version
77
+ temp = Tempfile.new('z')
78
+ FileUtils.cp(wallet.path, temp)
79
+ end
80
+ begin
81
+ request.body.rewind
82
+ File.write(wallet.path, request.body.read)
83
+ unless before.nil?
84
+ after = wallet.version
85
+ error 403 if after < before
86
+ end
87
+ unless Check.new(wallet: wallet, wallets: settings.wallets).run
88
+ error 403
89
+ end
90
+ ensure
91
+ unless temp.nil?
92
+ FileUtils.cp(temp, wallet.path)
93
+ temp.unlink
94
+ end
95
+ end
96
+ end
97
+ end
98
+
99
+ not_found do
100
+ status 404
101
+ haml :not_found, layout: :layout, locals: {
102
+ title: 'Page not found'
103
+ }
104
+ end
105
+
106
+ error do
107
+ status 503
108
+ e = env['sinatra.error']
109
+ "#{e.message}\n\t#{e.backtrace.join("\n\t")}"
110
+ end
111
+ end
112
+ end
@@ -23,5 +23,5 @@
23
23
  # Copyright:: Copyright (c) 2018 Zerocracy, Inc.
24
24
  # License:: MIT
25
25
  module Zold
26
- VERSION = '0.0.5'.freeze
26
+ VERSION = '0.0.6'.freeze
27
27
  end
@@ -40,6 +40,10 @@ module Zold
40
40
  File.exist?(@file)
41
41
  end
42
42
 
43
+ def path
44
+ @file
45
+ end
46
+
43
47
  def init(id, pubkey)
44
48
  raise "File '#{@file}' already exists" if File.exist?(@file)
45
49
  File.write(
@@ -56,6 +60,18 @@ module Zold
56
60
  )
57
61
  end
58
62
 
63
+ def version
64
+ xml = load
65
+ ver = 0
66
+ unless xml.xpath('/wallet/ledger[txn]').empty?
67
+ ver = xml.xpath('/wallet/ledger/txn/@id')
68
+ .map(&:to_s)
69
+ .map(&:to_i)
70
+ .max
71
+ end
72
+ ver
73
+ end
74
+
59
75
  def id
60
76
  load.xpath('/wallet/id/text()').to_s
61
77
  end
@@ -71,14 +87,8 @@ module Zold
71
87
 
72
88
  def sub(amount, target, pvtkey)
73
89
  xml = load
74
- txn = 1
75
- unless xml.xpath('/wallet/ledger[txn]').empty?
76
- txn = xml.xpath('/wallet/ledger/txn/@id')
77
- .map(&:to_s)
78
- .map(&:to_i)
79
- .max + 1
80
- end
81
90
  date = Time.now
91
+ txn = version + 1
82
92
  t = xml.xpath('/wallet/ledger')[0].add_child('<txn/>')[0]
83
93
  t['id'] = txn
84
94
  t.add_child('<date/>')[0].content = date.iso8601
@@ -35,6 +35,10 @@ module Zold
35
35
  @dir
36
36
  end
37
37
 
38
+ def total
39
+ Dir.new(@dir).select { |f| File.file?(File.join(@dir, f)) }.count
40
+ end
41
+
38
42
  def find(id)
39
43
  Zold::Wallet.new(File.join(@dir, "z-#{id}.xml"))
40
44
  end
@@ -0,0 +1,86 @@
1
+ # Copyright (c) 2018 Zerocracy, Inc.
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the 'Software'), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in all
11
+ # copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ # SOFTWARE.
20
+
21
+ require 'minitest/autorun'
22
+ require 'rack/test'
23
+ require_relative '../../lib/zold/key.rb'
24
+ require_relative '../../lib/zold/id.rb'
25
+ require_relative '../../lib/zold/amount.rb'
26
+ require_relative '../../lib/zold/wallet.rb'
27
+ require_relative '../../lib/zold/node/front.rb'
28
+
29
+ class FrontTest < Minitest::Test
30
+ include Rack::Test::Methods
31
+
32
+ def app
33
+ Zold::Front.new
34
+ end
35
+
36
+ def test_renders_version
37
+ get('/version')
38
+ assert(last_response.ok?)
39
+ end
40
+
41
+ def test_robots_txt
42
+ get('/robots.txt')
43
+ assert(last_response.ok?)
44
+ end
45
+
46
+ def test_it_renders_home_page
47
+ get('/')
48
+ assert(last_response.ok?)
49
+ assert(last_response.body.include?('zold'))
50
+ end
51
+
52
+ def test_pushes_a_wallet
53
+ Dir.mktmpdir 'test' do |dir|
54
+ id = Zold::Id.new
55
+ file = File.join(dir, "#{id}.xml")
56
+ wallet = Zold::Wallet.new(file)
57
+ wallet.init(id, Zold::Key.new(file: 'fixtures/id_rsa.pub'))
58
+ put("/wallets/#{id}", File.read(file))
59
+ assert(last_response.ok?, last_response.body)
60
+ key = Zold::Key.new(file: 'fixtures/id_rsa')
61
+ wallet.sub(Zold::Amount.new(zld: 39.99), Zold::Id.new, key)
62
+ put("/wallets/#{id}", File.read(file))
63
+ assert(last_response.ok?, last_response.body)
64
+ end
65
+ end
66
+
67
+ def test_pulls_a_wallet
68
+ Dir.mktmpdir 'test' do |dir|
69
+ id = Zold::Id.new
70
+ file = File.join(dir, "#{id}.xml")
71
+ wallet = Zold::Wallet.new(file)
72
+ wallet.init(id, Zold::Key.new(file: 'fixtures/id_rsa.pub'))
73
+ put("/wallets/#{id}", File.read(file))
74
+ assert(last_response.ok?, last_response.body)
75
+ get("/wallets/#{id}")
76
+ assert(last_response.ok?, last_response.body)
77
+ File.write(file, last_response.body)
78
+ assert wallet.balance.zero?
79
+ end
80
+ end
81
+
82
+ def test_pulls_an_absent_wallet
83
+ get('/wallets/ffffeeeeddddcccc')
84
+ assert(last_response.status == 404)
85
+ end
86
+ end
@@ -36,8 +36,10 @@ class TestWallet < Minitest::Test
36
36
  wallet = wallet(dir)
37
37
  amount = Zold::Amount.new(zld: 39.99)
38
38
  key = Zold::Key.new(file: 'fixtures/id_rsa')
39
+ assert wallet.version.zero?
39
40
  wallet.sub(amount, Zold::Id.new, key)
40
41
  wallet.sub(amount, Zold::Id.new, key)
42
+ assert wallet.version == 2
41
43
  assert(
42
44
  wallet.balance == amount.mul(-2),
43
45
  "#{wallet.balance} is not equal to #{amount.mul(-2)}"
@@ -0,0 +1,42 @@
1
+ # Copyright (c) 2018 Zerocracy, Inc.
2
+ #
3
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ # of this software and associated documentation files (the 'Software'), to deal
5
+ # in the Software without restriction, including without limitation the rights
6
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ # copies of the Software, and to permit persons to whom the Software is
8
+ # furnished to do so, subject to the following conditions:
9
+ #
10
+ # The above copyright notice and this permission notice shall be included in all
11
+ # copies or substantial portions of the Software.
12
+ #
13
+ # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
16
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ # SOFTWARE.
20
+
21
+ require 'minitest/autorun'
22
+ require 'tmpdir'
23
+ require_relative '../lib/zold/key.rb'
24
+ require_relative '../lib/zold/id.rb'
25
+ require_relative '../lib/zold/wallets.rb'
26
+ require_relative '../lib/zold/amount.rb'
27
+
28
+ # Wallets test.
29
+ # Author:: Yegor Bugayenko (yegor256@gmail.com)
30
+ # Copyright:: Copyright (c) 2018 Zerocracy, Inc.
31
+ # License:: MIT
32
+ class TestWallets < Minitest::Test
33
+ def test_adds_wallet
34
+ Dir.mktmpdir 'test' do |dir|
35
+ wallets = Zold::Wallets.new(dir)
36
+ id = Zold::Id.new
37
+ wallet = wallets.find(id)
38
+ wallet.init(id, Zold::Key.new(file: 'fixtures/id_rsa.pub'))
39
+ assert(wallets.total == 1, "#{wallets.total} is not equal to 1")
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,6 @@
1
+ %article
2
+ %p
3
+ ZOLD node
4
+ %p
5
+ Wallets:
6
+ =total
@@ -0,0 +1,26 @@
1
+ %html
2
+ %head
3
+ %title
4
+ =title
5
+ %meta{charset:'UTF-8'}
6
+ %meta{name:'viewport', content:'width=device-width, initial-scale=1.0'}
7
+ %meta{name:'keywords', content:'cryptocurrency, zold'}
8
+ %meta{name:'description', content:'Non-Blockchain Decentralized Cryptocurrency'}
9
+ %link{type:'text/css', href:url('http://cdn.rawgit.com/yegor256/tacit/gh-pages/tacit-css-1.2.8.min.css'), rel:'stylesheet'}
10
+ %body
11
+ %header
12
+ %nav
13
+ %ul
14
+ %li
15
+ %a{href: 'http://www.zold.io'}
16
+ %img{src: 'http://www.zold.io/logo.svg', style: 'width:64px;height:64px;'}
17
+ %section
18
+ = yield
19
+ %footer{style: 'font-size:80%; color:gray;'}
20
+ %nav
21
+ %ul
22
+ %li
23
+ =Zold::VERSION
24
+ %li
25
+ %a{href: 'https://github.com/zerocracy/zold'}
26
+ GitHub
@@ -0,0 +1,3 @@
1
+ %article
2
+ %p
3
+ Page not found
@@ -44,16 +44,18 @@ Gem::Specification.new do |s|
44
44
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
45
45
  s.rdoc_options = ['--charset=UTF-8']
46
46
  s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
47
+ s.add_runtime_dependency 'cucumber', '1.3.17'
48
+ s.add_runtime_dependency 'haml', '5.0.3'
47
49
  s.add_runtime_dependency 'nokogiri', '~>1.8'
48
50
  s.add_runtime_dependency 'rainbow', '~>3.0'
51
+ s.add_runtime_dependency 'rake', '12.0.0'
52
+ s.add_runtime_dependency 'rubocop', '~>0.52.0'
53
+ s.add_runtime_dependency 'rubocop-rspec', '1.5.1'
54
+ s.add_runtime_dependency 'sinatra', '2.0.0'
49
55
  s.add_runtime_dependency 'slop', '~>4.4'
56
+ s.add_runtime_dependency 'xcop', '~>0.5'
50
57
  s.add_development_dependency 'codecov', '0.1.10'
51
- s.add_development_dependency 'cucumber', '1.3.17'
52
58
  s.add_development_dependency 'minitest', '5.5.0'
53
- s.add_development_dependency 'rake', '12.0.0'
54
59
  s.add_development_dependency 'rdoc', '4.2.0'
55
60
  s.add_development_dependency 'rspec-rails', '3.1.0'
56
- s.add_development_dependency 'rubocop', '~>0.52.0'
57
- s.add_development_dependency 'rubocop-rspec', '1.5.1'
58
- s.add_development_dependency 'xcop', '~>0.5'
59
61
  end
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zold
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
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-02-03 00:00:00.000000000 Z
11
+ date: 2018-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cucumber
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.3.17
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.3.17
27
+ - !ruby/object:Gem::Dependency
28
+ name: haml
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 5.0.3
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 5.0.3
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: nokogiri
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -39,145 +67,145 @@ dependencies:
39
67
  - !ruby/object:Gem::Version
40
68
  version: '3.0'
41
69
  - !ruby/object:Gem::Dependency
42
- name: slop
70
+ name: rake
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
- - - "~>"
73
+ - - '='
46
74
  - !ruby/object:Gem::Version
47
- version: '4.4'
75
+ version: 12.0.0
48
76
  type: :runtime
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
- - - "~>"
80
+ - - '='
53
81
  - !ruby/object:Gem::Version
54
- version: '4.4'
82
+ version: 12.0.0
55
83
  - !ruby/object:Gem::Dependency
56
- name: codecov
84
+ name: rubocop
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
- - - '='
87
+ - - "~>"
60
88
  - !ruby/object:Gem::Version
61
- version: 0.1.10
62
- type: :development
89
+ version: 0.52.0
90
+ type: :runtime
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
- - - '='
94
+ - - "~>"
67
95
  - !ruby/object:Gem::Version
68
- version: 0.1.10
96
+ version: 0.52.0
69
97
  - !ruby/object:Gem::Dependency
70
- name: cucumber
98
+ name: rubocop-rspec
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
101
  - - '='
74
102
  - !ruby/object:Gem::Version
75
- version: 1.3.17
76
- type: :development
103
+ version: 1.5.1
104
+ type: :runtime
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
108
  - - '='
81
109
  - !ruby/object:Gem::Version
82
- version: 1.3.17
110
+ version: 1.5.1
83
111
  - !ruby/object:Gem::Dependency
84
- name: minitest
112
+ name: sinatra
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
115
  - - '='
88
116
  - !ruby/object:Gem::Version
89
- version: 5.5.0
90
- type: :development
117
+ version: 2.0.0
118
+ type: :runtime
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
122
  - - '='
95
123
  - !ruby/object:Gem::Version
96
- version: 5.5.0
124
+ version: 2.0.0
97
125
  - !ruby/object:Gem::Dependency
98
- name: rake
126
+ name: slop
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
- - - '='
129
+ - - "~>"
102
130
  - !ruby/object:Gem::Version
103
- version: 12.0.0
104
- type: :development
131
+ version: '4.4'
132
+ type: :runtime
105
133
  prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
- - - '='
136
+ - - "~>"
109
137
  - !ruby/object:Gem::Version
110
- version: 12.0.0
138
+ version: '4.4'
111
139
  - !ruby/object:Gem::Dependency
112
- name: rdoc
140
+ name: xcop
113
141
  requirement: !ruby/object:Gem::Requirement
114
142
  requirements:
115
- - - '='
143
+ - - "~>"
116
144
  - !ruby/object:Gem::Version
117
- version: 4.2.0
118
- type: :development
145
+ version: '0.5'
146
+ type: :runtime
119
147
  prerelease: false
120
148
  version_requirements: !ruby/object:Gem::Requirement
121
149
  requirements:
122
- - - '='
150
+ - - "~>"
123
151
  - !ruby/object:Gem::Version
124
- version: 4.2.0
152
+ version: '0.5'
125
153
  - !ruby/object:Gem::Dependency
126
- name: rspec-rails
154
+ name: codecov
127
155
  requirement: !ruby/object:Gem::Requirement
128
156
  requirements:
129
157
  - - '='
130
158
  - !ruby/object:Gem::Version
131
- version: 3.1.0
159
+ version: 0.1.10
132
160
  type: :development
133
161
  prerelease: false
134
162
  version_requirements: !ruby/object:Gem::Requirement
135
163
  requirements:
136
164
  - - '='
137
165
  - !ruby/object:Gem::Version
138
- version: 3.1.0
166
+ version: 0.1.10
139
167
  - !ruby/object:Gem::Dependency
140
- name: rubocop
168
+ name: minitest
141
169
  requirement: !ruby/object:Gem::Requirement
142
170
  requirements:
143
- - - "~>"
171
+ - - '='
144
172
  - !ruby/object:Gem::Version
145
- version: 0.52.0
173
+ version: 5.5.0
146
174
  type: :development
147
175
  prerelease: false
148
176
  version_requirements: !ruby/object:Gem::Requirement
149
177
  requirements:
150
- - - "~>"
178
+ - - '='
151
179
  - !ruby/object:Gem::Version
152
- version: 0.52.0
180
+ version: 5.5.0
153
181
  - !ruby/object:Gem::Dependency
154
- name: rubocop-rspec
182
+ name: rdoc
155
183
  requirement: !ruby/object:Gem::Requirement
156
184
  requirements:
157
185
  - - '='
158
186
  - !ruby/object:Gem::Version
159
- version: 1.5.1
187
+ version: 4.2.0
160
188
  type: :development
161
189
  prerelease: false
162
190
  version_requirements: !ruby/object:Gem::Requirement
163
191
  requirements:
164
192
  - - '='
165
193
  - !ruby/object:Gem::Version
166
- version: 1.5.1
194
+ version: 4.2.0
167
195
  - !ruby/object:Gem::Dependency
168
- name: xcop
196
+ name: rspec-rails
169
197
  requirement: !ruby/object:Gem::Requirement
170
198
  requirements:
171
- - - "~>"
199
+ - - '='
172
200
  - !ruby/object:Gem::Version
173
- version: '0.5'
201
+ version: 3.1.0
174
202
  type: :development
175
203
  prerelease: false
176
204
  version_requirements: !ruby/object:Gem::Requirement
177
205
  requirements:
178
- - - "~>"
206
+ - - '='
179
207
  - !ruby/object:Gem::Version
180
- version: '0.5'
208
+ version: 3.1.0
181
209
  description: Non-blockchain cryptocurrency
182
210
  email: yegor256@gmail.com
183
211
  executables:
@@ -198,12 +226,14 @@ files:
198
226
  - CONTRIBUTING.md
199
227
  - Gemfile
200
228
  - LICENSE.txt
229
+ - Procfile
201
230
  - README.md
202
231
  - Rakefile
203
232
  - appveyor.yml
204
233
  - assets/wallet.xsd
205
234
  - bin/zold
206
235
  - cucumber.yml
236
+ - deploy.sh
207
237
  - features/cli.feature
208
238
  - features/gem_package.feature
209
239
  - features/step_definitions/steps.rb
@@ -221,18 +251,24 @@ files:
221
251
  - lib/zold/id.rb
222
252
  - lib/zold/key.rb
223
253
  - lib/zold/log.rb
254
+ - lib/zold/node/front.rb
224
255
  - lib/zold/version.rb
225
256
  - lib/zold/wallet.rb
226
257
  - lib/zold/wallets.rb
227
258
  - test/commands/test_balance.rb
228
259
  - test/commands/test_create.rb
229
260
  - test/commands/test_send.rb
261
+ - test/node/test_front.rb
230
262
  - test/test__helper.rb
231
263
  - test/test_amount.rb
232
264
  - test/test_id.rb
233
265
  - test/test_key.rb
234
266
  - test/test_wallet.rb
267
+ - test/test_wallets.rb
235
268
  - test/test_zold.rb
269
+ - views/index.haml
270
+ - views/layout.haml
271
+ - views/not_found.haml
236
272
  - zold.gemspec
237
273
  homepage: http://github.com/zerocracy/zold
238
274
  licenses:
@@ -267,9 +303,11 @@ test_files:
267
303
  - test/commands/test_balance.rb
268
304
  - test/commands/test_create.rb
269
305
  - test/commands/test_send.rb
306
+ - test/node/test_front.rb
270
307
  - test/test__helper.rb
271
308
  - test/test_amount.rb
272
309
  - test/test_id.rb
273
310
  - test/test_key.rb
274
311
  - test/test_wallet.rb
312
+ - test/test_wallets.rb
275
313
  - test/test_zold.rb