zold 0.0.5 → 0.0.6

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