hodlmoon 0.1.1 → 0.2.0
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 +5 -5
- data/.circleci/config.yml +29 -0
- data/.env.example +0 -0
- data/Gemfile.lock +75 -31
- data/README.md +19 -54
- data/hodlmoon.gemspec +13 -7
- data/lib/hodlmoon/cli.rb +61 -8
- data/lib/hodlmoon/client/base.rb +1 -1
- data/lib/hodlmoon/client/retrieve_list.rb +1 -1
- data/lib/hodlmoon/client/retrieve_price.rb +1 -1
- data/lib/hodlmoon/portfolio_manager.rb +24 -0
- data/lib/hodlmoon/table.rb +24 -17
- data/lib/hodlmoon/version.rb +1 -1
- metadata +131 -28
- data/.travis.yml +0 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 8771ab4e4103ce9e190ca1976dd845352ec30ce26a56a09c13a125d141bc7259
|
|
4
|
+
data.tar.gz: 34e24561353fb87eb12edeb0e948804861de19e5414df390a399aecf4b733eef
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7597bf001d1649cdd94ff1d39081f89d1611b6b3b4231f486e3056b0e86510a1c23fbd8646b29a488925e8fc6475aa1557a4460b28e5f121b6ced3caa919282a
|
|
7
|
+
data.tar.gz: 331ce9d65f567e09e3d1f12fc38ed37b970d004dc40e5ae122c809e087185e693f4647e9b4c93d2eef83e805049fc1b30f5463ab98b1b2a3c6472b2e73b5cc4c
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
jobs:
|
|
3
|
+
build:
|
|
4
|
+
working_directory: ~/hodlmoon
|
|
5
|
+
docker:
|
|
6
|
+
- image: circleci/ruby:2.3.6
|
|
7
|
+
steps:
|
|
8
|
+
- checkout
|
|
9
|
+
|
|
10
|
+
# Restore Cached Dependencies
|
|
11
|
+
- type: cache-restore
|
|
12
|
+
name: Restore bundle cache
|
|
13
|
+
key: hodlmoon-{{ checksum "Gemfile.lock" }}
|
|
14
|
+
|
|
15
|
+
# Bundle install dependencies
|
|
16
|
+
- run: bundle install --path vendor/bundle
|
|
17
|
+
|
|
18
|
+
# Cache Dependencies
|
|
19
|
+
- type: cache-save
|
|
20
|
+
name: Store bundle cache
|
|
21
|
+
key: hodlmoon-{{ checksum "Gemfile.lock" }}
|
|
22
|
+
paths:
|
|
23
|
+
- vendor/bundle
|
|
24
|
+
|
|
25
|
+
# Run unit tests
|
|
26
|
+
- run: bundle exec rspec
|
|
27
|
+
|
|
28
|
+
# Run aruba tests
|
|
29
|
+
- run: bundle exec cucumber
|
data/.env.example
ADDED
|
File without changes
|
data/Gemfile.lock
CHANGED
|
@@ -1,31 +1,70 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
hodlmoon (0.
|
|
5
|
-
httparty
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
hodlmoon (0.2.0)
|
|
5
|
+
httparty (= 0.18.0)
|
|
6
|
+
json (~> 2.6, >= 2.6.2)
|
|
7
|
+
launchy (~> 2.4.3)
|
|
8
|
+
terminal-table (~> 1.8.0)
|
|
9
|
+
thor (>= 1.0, < 1.1)
|
|
8
10
|
|
|
9
11
|
GEM
|
|
10
12
|
remote: https://rubygems.org/
|
|
11
13
|
specs:
|
|
12
|
-
addressable (2.
|
|
13
|
-
public_suffix (>= 2.0.2, <
|
|
14
|
+
addressable (2.8.0)
|
|
15
|
+
public_suffix (>= 2.0.2, < 5.0)
|
|
16
|
+
aruba (1.0.4)
|
|
17
|
+
childprocess (>= 2.0, < 5.0)
|
|
18
|
+
contracts (~> 0.16.0)
|
|
19
|
+
cucumber (>= 2.4, < 6.0)
|
|
20
|
+
rspec-expectations (~> 3.4)
|
|
21
|
+
thor (~> 1.0)
|
|
14
22
|
ast (2.4.0)
|
|
15
|
-
|
|
16
|
-
|
|
23
|
+
backports (3.11.1)
|
|
24
|
+
builder (3.2.3)
|
|
25
|
+
childprocess (4.1.0)
|
|
26
|
+
contracts (0.16.1)
|
|
27
|
+
crack (0.4.5)
|
|
28
|
+
rexml
|
|
29
|
+
cucumber (3.1.0)
|
|
30
|
+
builder (>= 2.1.2)
|
|
31
|
+
cucumber-core (~> 3.1.0)
|
|
32
|
+
cucumber-expressions (~> 5.0.4)
|
|
33
|
+
cucumber-wire (~> 0.0.1)
|
|
34
|
+
diff-lcs (~> 1.3)
|
|
35
|
+
gherkin (~> 5.0)
|
|
36
|
+
multi_json (>= 1.7.5, < 2.0)
|
|
37
|
+
multi_test (>= 0.1.2)
|
|
38
|
+
cucumber-core (3.1.0)
|
|
39
|
+
backports (>= 3.8.0)
|
|
40
|
+
cucumber-tag_expressions (~> 1.1.0)
|
|
41
|
+
gherkin (>= 5.0.0)
|
|
42
|
+
cucumber-expressions (5.0.13)
|
|
43
|
+
cucumber-tag_expressions (1.1.1)
|
|
44
|
+
cucumber-wire (0.0.1)
|
|
17
45
|
diff-lcs (1.3)
|
|
18
|
-
|
|
19
|
-
|
|
46
|
+
gherkin (5.0.0)
|
|
47
|
+
hashdiff (1.0.1)
|
|
48
|
+
httparty (0.18.0)
|
|
49
|
+
mime-types (~> 3.0)
|
|
20
50
|
multi_xml (>= 0.5.2)
|
|
51
|
+
jaro_winkler (1.5.4)
|
|
52
|
+
json (2.6.2)
|
|
53
|
+
launchy (2.4.3)
|
|
54
|
+
addressable (~> 2.3)
|
|
55
|
+
mime-types (3.4.1)
|
|
56
|
+
mime-types-data (~> 3.2015)
|
|
57
|
+
mime-types-data (3.2022.0105)
|
|
58
|
+
multi_json (1.13.1)
|
|
59
|
+
multi_test (0.1.2)
|
|
21
60
|
multi_xml (0.6.0)
|
|
22
|
-
parallel (1.
|
|
23
|
-
parser (2.
|
|
24
|
-
ast (~> 2.
|
|
25
|
-
|
|
26
|
-
public_suffix (3.0.1)
|
|
61
|
+
parallel (1.19.1)
|
|
62
|
+
parser (2.6.5.0)
|
|
63
|
+
ast (~> 2.4.0)
|
|
64
|
+
public_suffix (4.0.7)
|
|
27
65
|
rainbow (3.0.0)
|
|
28
|
-
rake (
|
|
66
|
+
rake (13.0.1)
|
|
67
|
+
rexml (3.2.5)
|
|
29
68
|
rspec (3.7.0)
|
|
30
69
|
rspec-core (~> 3.7.0)
|
|
31
70
|
rspec-expectations (~> 3.7.0)
|
|
@@ -39,21 +78,22 @@ GEM
|
|
|
39
78
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
40
79
|
rspec-support (~> 3.7.0)
|
|
41
80
|
rspec-support (3.7.1)
|
|
42
|
-
|
|
81
|
+
rspec_junit_formatter (0.4.1)
|
|
82
|
+
rspec-core (>= 2, < 4, != 2.12.0)
|
|
83
|
+
rubocop (0.78.0)
|
|
84
|
+
jaro_winkler (~> 1.5.1)
|
|
43
85
|
parallel (~> 1.10)
|
|
44
|
-
parser (>= 2.
|
|
45
|
-
powerpack (~> 0.1)
|
|
86
|
+
parser (>= 2.6)
|
|
46
87
|
rainbow (>= 2.2.2, < 4.0)
|
|
47
88
|
ruby-progressbar (~> 1.7)
|
|
48
|
-
unicode-display_width (
|
|
49
|
-
ruby-progressbar (1.
|
|
50
|
-
safe_yaml (1.0.4)
|
|
89
|
+
unicode-display_width (>= 1.4.0, < 1.7)
|
|
90
|
+
ruby-progressbar (1.10.1)
|
|
51
91
|
terminal-table (1.8.0)
|
|
52
92
|
unicode-display_width (~> 1.1, >= 1.1.1)
|
|
53
|
-
thor (0.
|
|
54
|
-
unicode-display_width (1.
|
|
55
|
-
vcr (
|
|
56
|
-
webmock (3.
|
|
93
|
+
thor (1.0.1)
|
|
94
|
+
unicode-display_width (1.6.1)
|
|
95
|
+
vcr (5.0.0)
|
|
96
|
+
webmock (3.5.1)
|
|
57
97
|
addressable (>= 2.3.6)
|
|
58
98
|
crack (>= 0.3.2)
|
|
59
99
|
hashdiff
|
|
@@ -62,13 +102,17 @@ PLATFORMS
|
|
|
62
102
|
ruby
|
|
63
103
|
|
|
64
104
|
DEPENDENCIES
|
|
105
|
+
aruba (~> 1.0.0)
|
|
65
106
|
bundler (~> 1.16)
|
|
107
|
+
cucumber (>= 3.0)
|
|
66
108
|
hodlmoon!
|
|
67
|
-
rake (~>
|
|
109
|
+
rake (~> 13.0)
|
|
110
|
+
rexml (~> 3.2, >= 3.2.4)
|
|
68
111
|
rspec (~> 3.0)
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
112
|
+
rspec_junit_formatter (~> 0.4.1)
|
|
113
|
+
rubocop (~> 0.78.0)
|
|
114
|
+
vcr (~> 5.0.0)
|
|
115
|
+
webmock (~> 3.5.0)
|
|
72
116
|
|
|
73
117
|
BUNDLED WITH
|
|
74
|
-
1.
|
|
118
|
+
1.17.3
|
data/README.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Hodlmoon
|
|
2
2
|
|
|
3
|
+
[](https://en.cryptobadges.io/donate/0x5aa9a264fF5516E615eB60b43d524F04c13a331e)
|
|
4
|
+
|
|
5
|
+
[](https://badge.fury.io/rb/hodlmoon)
|
|
6
|
+
[](https://circleci.com/gh/richo225/hodlmoon/tree/master)
|
|
7
|
+
[](https://codeclimate.com/github/richo225/hodlmoon/maintainability)
|
|
8
|
+
[](https://coveralls.io/github/richo225/hodlmoon?branch=circle)
|
|
9
|
+
|
|
3
10
|
Quickly find the price of your crypto portfolio from the comfort of your command line.
|
|
4
11
|
|
|
5
12
|
When moon?
|
|
@@ -18,65 +25,21 @@ The gem comes with two methods that can be run : `price` and `list`.
|
|
|
18
25
|
|
|
19
26
|
### List
|
|
20
27
|
|
|
21
|
-
Lists market data for the top
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
O==============O========O===============O================O===================O====================O===================O
|
|
31
|
-
| Bitcoin | BTC | 6194.31180144 | 104438958744 | -1.69 | +2.13 | +14.56 |
|
|
32
|
-
O==============O========O===============O================O===================O====================O===================O
|
|
33
|
-
| Ethereum | ETH | 611.451838746 | 59659761394.0 | -1.66 | +0.14 | +13.49 |
|
|
34
|
-
O==============O========O===============O================O===================O====================O===================O
|
|
35
|
-
| Ripple | XRP | 0.7614421057 | 29703259449.0 | -1.33 | +0.51 | +42.23 |
|
|
36
|
-
O==============O========O===============O================O===================O====================O===================O
|
|
37
|
-
| Bitcoin Cash | BCH | 905.989224 | 15368940724.0 | -1.75 | -0.82 | +28.42 |
|
|
38
|
-
O==============O========O===============O================O===================O====================O===================O
|
|
39
|
-
| Cardano | ADA | 0.2704738498 | 7012594583.0 | -1.64 | -2.15 | +10.23 |
|
|
40
|
-
O==============O========O===============O================O===================O====================O===================O
|
|
41
|
-
|
|
42
|
-
hodlmoon list 2 eur
|
|
43
|
-
#
|
|
44
|
-
O==========O========O===============O================O===================O====================O===================O
|
|
45
|
-
| ☾ ☾ ☾ Hodlmoon ☽ ☽ ☽ |
|
|
46
|
-
O==========O========O===============O================O===================O====================O===================O
|
|
47
|
-
| name | symbol | price_eur | market_cap_eur | percent_change_1h | percent_change_24h | percent_change_7d |
|
|
48
|
-
O==========O========O===============O================O===================O====================O===================O
|
|
49
|
-
| Bitcoin | BTC | 6999.59148544 | 118016346256 | -1.69 | +2.13 | +14.56 |
|
|
50
|
-
O==========O========O===============O================O===================O====================O===================O
|
|
51
|
-
| Ethereum | ETH | 690.942468096 | 67415714814.0 | -1.66 | +0.14 | +13.49 |
|
|
52
|
-
O==========O========O===============O================O===================O====================O===================O
|
|
53
|
-
```
|
|
28
|
+
Lists market data for the top default 8 coins.
|
|
29
|
+
|
|
30
|
+
<img width="956" alt="screen shot 2018-02-13 at 23 34 15" src="https://user-images.githubusercontent.com/18379191/36180073-d0fbd150-1116-11e8-8355-24af83efb03d.png">
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
A specific limit and a specific currency can also be supplied. If no currency is given, the CLI will default to `gbp`.
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
<img width="927" alt="screen shot 2018-02-13 at 23 34 44" src="https://user-images.githubusercontent.com/18379191/36180125-114bc8dc-1117-11e8-910e-d2bee9df72df.png">
|
|
54
37
|
|
|
55
38
|
### Price
|
|
56
39
|
|
|
57
40
|
Gets the current price of a coin in a specific currency. If no currency is given, the CLI will default to `gbp`:
|
|
58
41
|
|
|
59
|
-
|
|
60
|
-
hodlmoon price ethereum
|
|
61
|
-
#
|
|
62
|
-
O==========O========O===============O================O===================O====================O===================O
|
|
63
|
-
| ☾ ☾ ☾ Hodlmoon ☽ ☽ ☽ |
|
|
64
|
-
O==========O========O===============O================O===================O====================O===================O
|
|
65
|
-
| name | symbol | price_gbp | market_cap_gbp | percent_change_1h | percent_change_24h | percent_change_7d |
|
|
66
|
-
O==========O========O===============O================O===================O====================O===================O
|
|
67
|
-
| Ethereum | ETH | 608.540996151 | 59387446060.0 | +0.54 | -1.76 | +26.1 |
|
|
68
|
-
O==========O========O===============O================O===================O====================O===================O
|
|
69
|
-
|
|
70
|
-
hodlmoon price neo usd
|
|
71
|
-
#
|
|
72
|
-
O======O========O===========O================O===================O====================O===================O
|
|
73
|
-
| ☾ ☾ ☾ Hodlmoon ☽ ☽ ☽ |
|
|
74
|
-
O======O========O===========O================O===================O====================O===================O
|
|
75
|
-
| name | symbol | price_usd | market_cap_usd | percent_change_1h | percent_change_24h | percent_change_7d |
|
|
76
|
-
O======O========O===========O================O===================O====================O===================O
|
|
77
|
-
| NEO | NEO | 111.91 | 7274150000.0 | +0.17 | -0.72 | +35.47 |
|
|
78
|
-
O======O========O===========O================O===================O====================O===================O
|
|
79
|
-
```
|
|
42
|
+
<img width="895" alt="screen shot 2018-02-13 at 23 41 24" src="https://user-images.githubusercontent.com/18379191/36180237-7accffd8-1117-11e8-9e7d-b1c6d8d9f295.png">
|
|
80
43
|
|
|
81
44
|
## Contributing
|
|
82
45
|
|
|
@@ -91,3 +54,5 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
|
91
54
|
## Code of Conduct
|
|
92
55
|
|
|
93
56
|
Everyone interacting in the Hodlmoon project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/richo225/hodlmoon/blob/master/CODE_OF_CONDUCT.md).
|
|
57
|
+
|
|
58
|
+
[](https://forthebadge.com)
|
data/hodlmoon.gemspec
CHANGED
|
@@ -20,14 +20,20 @@ Gem::Specification.new do |spec|
|
|
|
20
20
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
21
21
|
spec.require_paths = ['lib']
|
|
22
22
|
|
|
23
|
-
spec.add_dependency 'httparty'
|
|
24
|
-
spec.add_dependency '
|
|
25
|
-
spec.add_dependency '
|
|
23
|
+
spec.add_dependency 'httparty', '0.18.0'
|
|
24
|
+
spec.add_dependency 'json', '~> 2.6', '>= 2.6.2'
|
|
25
|
+
spec.add_dependency 'launchy', '~> 2.4.3'
|
|
26
|
+
spec.add_dependency 'terminal-table', '~> 1.8.0'
|
|
27
|
+
spec.add_dependency 'thor', '>= 1.0', '< 1.1'
|
|
26
28
|
|
|
29
|
+
spec.add_development_dependency 'aruba', '~> 1.0.0'
|
|
27
30
|
spec.add_development_dependency 'bundler', '~> 1.16'
|
|
28
|
-
spec.add_development_dependency '
|
|
31
|
+
spec.add_development_dependency 'cucumber', '>= 3.0'
|
|
32
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
|
33
|
+
spec.add_development_dependency 'rexml', '~> 3.2', '>= 3.2.4'
|
|
29
34
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
|
30
|
-
spec.add_development_dependency '
|
|
31
|
-
spec.add_development_dependency '
|
|
32
|
-
spec.add_development_dependency '
|
|
35
|
+
spec.add_development_dependency 'rspec_junit_formatter', '~> 0.4.1'
|
|
36
|
+
spec.add_development_dependency 'rubocop', '~> 0.78.0'
|
|
37
|
+
spec.add_development_dependency 'vcr', '~> 5.0.0'
|
|
38
|
+
spec.add_development_dependency 'webmock', '~> 3.5.0'
|
|
33
39
|
end
|
data/lib/hodlmoon/cli.rb
CHANGED
|
@@ -1,29 +1,82 @@
|
|
|
1
1
|
require 'thor'
|
|
2
|
+
require 'launchy'
|
|
2
3
|
require 'hodlmoon/client/retrieve_price'
|
|
3
4
|
require 'hodlmoon/client/retrieve_list'
|
|
4
5
|
require 'hodlmoon/table'
|
|
6
|
+
require 'hodlmoon/portfolio_manager'
|
|
5
7
|
|
|
6
8
|
module Hodlmoon
|
|
7
9
|
class Cli < Thor
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
DEFAULT_LIMIT = 8
|
|
11
|
+
DEFAULT_CURRENCY = 'gbp'.freeze
|
|
12
|
+
COINSPECTATOR_URL = 'https://coinspectator.com/'.freeze
|
|
13
|
+
ETHTRADER_URL = 'https://www.reddit.com/r/ethtrader/'.freeze
|
|
14
|
+
DEFAULT_PORTFOLIO_PATH = '~/hodlmoon_portfolio'.freeze
|
|
15
|
+
|
|
16
|
+
def self.exit_on_failure?
|
|
17
|
+
true
|
|
18
|
+
end
|
|
13
19
|
|
|
14
20
|
desc 'hello NAME', 'say hello to NAME'
|
|
15
21
|
def hello(name)
|
|
16
|
-
|
|
22
|
+
say "Hello #{name}"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
desc 'version', 'Display hodlmoon version'
|
|
26
|
+
map %w(-v --version) => :version
|
|
27
|
+
def version
|
|
28
|
+
say "Hodlmoon #{VERSION}"
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
desc 'news', 'link to CoinSpectator'
|
|
32
|
+
map %w(-n --news) => :news
|
|
33
|
+
def news
|
|
34
|
+
Launchy.open(COINSPECTATOR_URL)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
desc 'trader', 'link to r/EthTrader'
|
|
38
|
+
map %w(-t --trader) => :trader
|
|
39
|
+
def trader
|
|
40
|
+
Launchy.open(ETHTRADER_URL)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
desc 'create_portfolio', 'create your coin portfolio'
|
|
44
|
+
def create_portfolio
|
|
45
|
+
say "Creating file at #{DEFAULT_PORTFOLIO}"
|
|
46
|
+
@coins = []
|
|
47
|
+
loop do
|
|
48
|
+
coin = ask("Please input your coins eg.'ethereum' :")
|
|
49
|
+
break if coin.empty?
|
|
50
|
+
|
|
51
|
+
@coins << coin
|
|
52
|
+
end
|
|
53
|
+
CSV.open(DEFAULT_PORTFOLIO_PATH, 'wb') do |csv|
|
|
54
|
+
csv << @coins
|
|
55
|
+
end
|
|
56
|
+
say 'Portfolio successfully created'
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
desc 'portfolio PATH CURRENCY', 'Get data for your portfolio at csv PATH'
|
|
60
|
+
map %w(-p --portfolio) => :portfolio
|
|
61
|
+
def portfolio(path, currency = DEFAULT_CURRENCY)
|
|
62
|
+
raise Error, set_color("No such file exists at #{path}", :red) unless File.exist?(path)
|
|
63
|
+
|
|
64
|
+
info = Hodlmoon::PortfolioManager.import_portfolio(path, currency)
|
|
65
|
+
puts Hodlmoon::Table.build(info, currency)
|
|
17
66
|
end
|
|
18
67
|
|
|
19
68
|
desc 'price COIN CURRENCY', 'get current price of COIN in CURRENCY(optional)'
|
|
20
|
-
|
|
69
|
+
map %w(-p --price) => :price
|
|
70
|
+
def price(coin, currency = DEFAULT_CURRENCY)
|
|
21
71
|
info = Hodlmoon::Client::RetrievePrice.call(coin, currency)
|
|
72
|
+
raise Error, set_color('Please input the full name of a valid coin.', :red) unless info.success?
|
|
73
|
+
|
|
22
74
|
puts Hodlmoon::Table.build(info, currency)
|
|
23
75
|
end
|
|
24
76
|
|
|
25
77
|
desc 'list LIMIT CURRENCY', 'get LIMIT of top coins in CURRENCY(optional)'
|
|
26
|
-
|
|
78
|
+
map %w(-l --list) => :list
|
|
79
|
+
def list(limit = DEFAULT_LIMIT, currency = DEFAULT_CURRENCY)
|
|
27
80
|
info = Hodlmoon::Client::RetrieveList.call(limit, currency)
|
|
28
81
|
puts Hodlmoon::Table.build(info, currency)
|
|
29
82
|
end
|
data/lib/hodlmoon/client/base.rb
CHANGED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Hodlmoon
|
|
2
|
+
class PortfolioManager
|
|
3
|
+
def self.import_portfolio(path, currency)
|
|
4
|
+
new(path, currency).import_portfolio
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def initialize(path, currency)
|
|
8
|
+
@path = path
|
|
9
|
+
@currency = currency
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def import_portfolio
|
|
13
|
+
portfolio.map do |coin|
|
|
14
|
+
Hodlmoon::Client::RetrievePrice.call(coin, @currency)
|
|
15
|
+
end.flatten
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
def portfolio
|
|
21
|
+
CSV.read(@path).flatten
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
data/lib/hodlmoon/table.rb
CHANGED
|
@@ -14,7 +14,7 @@ module Hodlmoon
|
|
|
14
14
|
def build
|
|
15
15
|
Terminal::Table.new do |t|
|
|
16
16
|
t.title = '☾ ☾ ☾ Hodlmoon ☽ ☽ ☽'
|
|
17
|
-
t.headings =
|
|
17
|
+
t.headings = humanised_headings
|
|
18
18
|
t.rows = rows
|
|
19
19
|
t.style = { all_separators: true, border_x: '=', border_i: 'O', alignment: :center }
|
|
20
20
|
end
|
|
@@ -22,14 +22,20 @@ module Hodlmoon
|
|
|
22
22
|
|
|
23
23
|
private
|
|
24
24
|
|
|
25
|
-
def
|
|
26
|
-
['
|
|
25
|
+
def headings
|
|
26
|
+
['market_cap_rank',
|
|
27
|
+
'name',
|
|
27
28
|
'symbol',
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
'
|
|
31
|
-
'
|
|
32
|
-
|
|
29
|
+
'current_price',
|
|
30
|
+
'market_cap',
|
|
31
|
+
'price_change_percentage_24h',
|
|
32
|
+
'ath_change_percentage']
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def humanised_headings
|
|
36
|
+
headings.map do |heading|
|
|
37
|
+
heading.tr('_', ' ').capitalize
|
|
38
|
+
end
|
|
33
39
|
end
|
|
34
40
|
|
|
35
41
|
def rows
|
|
@@ -38,7 +44,14 @@ module Hodlmoon
|
|
|
38
44
|
|
|
39
45
|
def colorised_info
|
|
40
46
|
filtered_info.map do |coin|
|
|
41
|
-
coin.
|
|
47
|
+
coin.transform_values!(&:to_s)
|
|
48
|
+
.each_pair { |k, v| colorise(k, v) }
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def filtered_info
|
|
53
|
+
@info.map do |coin|
|
|
54
|
+
headings.each_with_object({}) { |k, h| h[k] = coin[k]; }
|
|
42
55
|
end
|
|
43
56
|
end
|
|
44
57
|
|
|
@@ -46,14 +59,8 @@ module Hodlmoon
|
|
|
46
59
|
return unless value
|
|
47
60
|
|
|
48
61
|
case key
|
|
49
|
-
when /
|
|
50
|
-
when /
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def filtered_info
|
|
55
|
-
@info.map do |coin|
|
|
56
|
-
headers.each_with_object({}) { |k, h| h[k] = coin[k]; }
|
|
62
|
+
when /_price_.*/ then colorise_yellow(value)
|
|
63
|
+
when /_percentage.*/ then colorise_red_or_green(value)
|
|
57
64
|
end
|
|
58
65
|
end
|
|
59
66
|
|
data/lib/hodlmoon/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,57 +1,111 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hodlmoon
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Richard Bates
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2022-08-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: httparty
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
+
- - '='
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: 0.18.0
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - '='
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: 0.18.0
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: json
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '2.6'
|
|
17
34
|
- - ">="
|
|
18
35
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
36
|
+
version: 2.6.2
|
|
20
37
|
type: :runtime
|
|
21
38
|
prerelease: false
|
|
22
39
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
40
|
requirements:
|
|
41
|
+
- - "~>"
|
|
42
|
+
- !ruby/object:Gem::Version
|
|
43
|
+
version: '2.6'
|
|
24
44
|
- - ">="
|
|
25
45
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
46
|
+
version: 2.6.2
|
|
47
|
+
- !ruby/object:Gem::Dependency
|
|
48
|
+
name: launchy
|
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: 2.4.3
|
|
54
|
+
type: :runtime
|
|
55
|
+
prerelease: false
|
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - "~>"
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: 2.4.3
|
|
27
61
|
- !ruby/object:Gem::Dependency
|
|
28
62
|
name: terminal-table
|
|
29
63
|
requirement: !ruby/object:Gem::Requirement
|
|
30
64
|
requirements:
|
|
31
|
-
- - "
|
|
65
|
+
- - "~>"
|
|
32
66
|
- !ruby/object:Gem::Version
|
|
33
|
-
version:
|
|
67
|
+
version: 1.8.0
|
|
34
68
|
type: :runtime
|
|
35
69
|
prerelease: false
|
|
36
70
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
71
|
requirements:
|
|
38
|
-
- - "
|
|
72
|
+
- - "~>"
|
|
39
73
|
- !ruby/object:Gem::Version
|
|
40
|
-
version:
|
|
74
|
+
version: 1.8.0
|
|
41
75
|
- !ruby/object:Gem::Dependency
|
|
42
76
|
name: thor
|
|
43
77
|
requirement: !ruby/object:Gem::Requirement
|
|
44
78
|
requirements:
|
|
45
79
|
- - ">="
|
|
46
80
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '0'
|
|
81
|
+
version: '1.0'
|
|
82
|
+
- - "<"
|
|
83
|
+
- !ruby/object:Gem::Version
|
|
84
|
+
version: '1.1'
|
|
48
85
|
type: :runtime
|
|
49
86
|
prerelease: false
|
|
50
87
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
88
|
requirements:
|
|
52
89
|
- - ">="
|
|
53
90
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '0'
|
|
91
|
+
version: '1.0'
|
|
92
|
+
- - "<"
|
|
93
|
+
- !ruby/object:Gem::Version
|
|
94
|
+
version: '1.1'
|
|
95
|
+
- !ruby/object:Gem::Dependency
|
|
96
|
+
name: aruba
|
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
|
98
|
+
requirements:
|
|
99
|
+
- - "~>"
|
|
100
|
+
- !ruby/object:Gem::Version
|
|
101
|
+
version: 1.0.0
|
|
102
|
+
type: :development
|
|
103
|
+
prerelease: false
|
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
105
|
+
requirements:
|
|
106
|
+
- - "~>"
|
|
107
|
+
- !ruby/object:Gem::Version
|
|
108
|
+
version: 1.0.0
|
|
55
109
|
- !ruby/object:Gem::Dependency
|
|
56
110
|
name: bundler
|
|
57
111
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -66,20 +120,54 @@ dependencies:
|
|
|
66
120
|
- - "~>"
|
|
67
121
|
- !ruby/object:Gem::Version
|
|
68
122
|
version: '1.16'
|
|
123
|
+
- !ruby/object:Gem::Dependency
|
|
124
|
+
name: cucumber
|
|
125
|
+
requirement: !ruby/object:Gem::Requirement
|
|
126
|
+
requirements:
|
|
127
|
+
- - ">="
|
|
128
|
+
- !ruby/object:Gem::Version
|
|
129
|
+
version: '3.0'
|
|
130
|
+
type: :development
|
|
131
|
+
prerelease: false
|
|
132
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
133
|
+
requirements:
|
|
134
|
+
- - ">="
|
|
135
|
+
- !ruby/object:Gem::Version
|
|
136
|
+
version: '3.0'
|
|
69
137
|
- !ruby/object:Gem::Dependency
|
|
70
138
|
name: rake
|
|
71
139
|
requirement: !ruby/object:Gem::Requirement
|
|
72
140
|
requirements:
|
|
73
141
|
- - "~>"
|
|
74
142
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: '
|
|
143
|
+
version: '13.0'
|
|
144
|
+
type: :development
|
|
145
|
+
prerelease: false
|
|
146
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
147
|
+
requirements:
|
|
148
|
+
- - "~>"
|
|
149
|
+
- !ruby/object:Gem::Version
|
|
150
|
+
version: '13.0'
|
|
151
|
+
- !ruby/object:Gem::Dependency
|
|
152
|
+
name: rexml
|
|
153
|
+
requirement: !ruby/object:Gem::Requirement
|
|
154
|
+
requirements:
|
|
155
|
+
- - "~>"
|
|
156
|
+
- !ruby/object:Gem::Version
|
|
157
|
+
version: '3.2'
|
|
158
|
+
- - ">="
|
|
159
|
+
- !ruby/object:Gem::Version
|
|
160
|
+
version: 3.2.4
|
|
76
161
|
type: :development
|
|
77
162
|
prerelease: false
|
|
78
163
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
164
|
requirements:
|
|
80
165
|
- - "~>"
|
|
81
166
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '
|
|
167
|
+
version: '3.2'
|
|
168
|
+
- - ">="
|
|
169
|
+
- !ruby/object:Gem::Version
|
|
170
|
+
version: 3.2.4
|
|
83
171
|
- !ruby/object:Gem::Dependency
|
|
84
172
|
name: rspec
|
|
85
173
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -94,48 +182,62 @@ dependencies:
|
|
|
94
182
|
- - "~>"
|
|
95
183
|
- !ruby/object:Gem::Version
|
|
96
184
|
version: '3.0'
|
|
185
|
+
- !ruby/object:Gem::Dependency
|
|
186
|
+
name: rspec_junit_formatter
|
|
187
|
+
requirement: !ruby/object:Gem::Requirement
|
|
188
|
+
requirements:
|
|
189
|
+
- - "~>"
|
|
190
|
+
- !ruby/object:Gem::Version
|
|
191
|
+
version: 0.4.1
|
|
192
|
+
type: :development
|
|
193
|
+
prerelease: false
|
|
194
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
195
|
+
requirements:
|
|
196
|
+
- - "~>"
|
|
197
|
+
- !ruby/object:Gem::Version
|
|
198
|
+
version: 0.4.1
|
|
97
199
|
- !ruby/object:Gem::Dependency
|
|
98
200
|
name: rubocop
|
|
99
201
|
requirement: !ruby/object:Gem::Requirement
|
|
100
202
|
requirements:
|
|
101
203
|
- - "~>"
|
|
102
204
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: 0.
|
|
205
|
+
version: 0.78.0
|
|
104
206
|
type: :development
|
|
105
207
|
prerelease: false
|
|
106
208
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
209
|
requirements:
|
|
108
210
|
- - "~>"
|
|
109
211
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: 0.
|
|
212
|
+
version: 0.78.0
|
|
111
213
|
- !ruby/object:Gem::Dependency
|
|
112
214
|
name: vcr
|
|
113
215
|
requirement: !ruby/object:Gem::Requirement
|
|
114
216
|
requirements:
|
|
115
|
-
- - "
|
|
217
|
+
- - "~>"
|
|
116
218
|
- !ruby/object:Gem::Version
|
|
117
|
-
version:
|
|
219
|
+
version: 5.0.0
|
|
118
220
|
type: :development
|
|
119
221
|
prerelease: false
|
|
120
222
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
223
|
requirements:
|
|
122
|
-
- - "
|
|
224
|
+
- - "~>"
|
|
123
225
|
- !ruby/object:Gem::Version
|
|
124
|
-
version:
|
|
226
|
+
version: 5.0.0
|
|
125
227
|
- !ruby/object:Gem::Dependency
|
|
126
228
|
name: webmock
|
|
127
229
|
requirement: !ruby/object:Gem::Requirement
|
|
128
230
|
requirements:
|
|
129
|
-
- - "
|
|
231
|
+
- - "~>"
|
|
130
232
|
- !ruby/object:Gem::Version
|
|
131
|
-
version:
|
|
233
|
+
version: 3.5.0
|
|
132
234
|
type: :development
|
|
133
235
|
prerelease: false
|
|
134
236
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
237
|
requirements:
|
|
136
|
-
- - "
|
|
238
|
+
- - "~>"
|
|
137
239
|
- !ruby/object:Gem::Version
|
|
138
|
-
version:
|
|
240
|
+
version: 3.5.0
|
|
139
241
|
description: A command line tool for crytocurrency data. When moon?
|
|
140
242
|
email:
|
|
141
243
|
- richo225@gmail.com
|
|
@@ -144,10 +246,11 @@ executables:
|
|
|
144
246
|
extensions: []
|
|
145
247
|
extra_rdoc_files: []
|
|
146
248
|
files:
|
|
249
|
+
- ".circleci/config.yml"
|
|
250
|
+
- ".env.example"
|
|
147
251
|
- ".gitignore"
|
|
148
252
|
- ".rspec"
|
|
149
253
|
- ".rubocop.yml"
|
|
150
|
-
- ".travis.yml"
|
|
151
254
|
- CODE_OF_CONDUCT.md
|
|
152
255
|
- Gemfile
|
|
153
256
|
- Gemfile.lock
|
|
@@ -161,13 +264,14 @@ files:
|
|
|
161
264
|
- lib/hodlmoon/client/base.rb
|
|
162
265
|
- lib/hodlmoon/client/retrieve_list.rb
|
|
163
266
|
- lib/hodlmoon/client/retrieve_price.rb
|
|
267
|
+
- lib/hodlmoon/portfolio_manager.rb
|
|
164
268
|
- lib/hodlmoon/table.rb
|
|
165
269
|
- lib/hodlmoon/version.rb
|
|
166
270
|
homepage: https://github.com/richo225/hodlmoon
|
|
167
271
|
licenses:
|
|
168
272
|
- MIT
|
|
169
273
|
metadata: {}
|
|
170
|
-
post_install_message:
|
|
274
|
+
post_install_message:
|
|
171
275
|
rdoc_options: []
|
|
172
276
|
require_paths:
|
|
173
277
|
- lib
|
|
@@ -182,9 +286,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
182
286
|
- !ruby/object:Gem::Version
|
|
183
287
|
version: '0'
|
|
184
288
|
requirements: []
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
signing_key:
|
|
289
|
+
rubygems_version: 3.2.3
|
|
290
|
+
signing_key:
|
|
188
291
|
specification_version: 4
|
|
189
292
|
summary: A command line tool for crytocurrency data. When moon?
|
|
190
293
|
test_files: []
|