cryptocoin_fanboi 0.2.3 → 0.2.4

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: 687514de82b418ba26e47dbaf2e30969581c9c73
4
- data.tar.gz: 3f08a187b55c7b1e6e17015fb417bbecc666aa76
3
+ metadata.gz: fda022b85bf61606e5a6cc3f2cf705b8e44b5c37
4
+ data.tar.gz: 55faedfb06f1e44100e22b8f762f7a728b1eaca3
5
5
  SHA512:
6
- metadata.gz: ff611f5b032df64a960d3b3339774cc993ec0a4845983a2d5e46c276fb3d6506290cae25991a241acd8c070b51581ac887ca068650a528bf1f4d1afa9215cc9d
7
- data.tar.gz: 617e70a1477829292378947e64830febba799e5a93e840e2eef1bb9e023291ec99d4bb24a08da7db68d4231b0a09e055fc8cca7425fbbbe7487372651d312a0c
6
+ metadata.gz: ee471b908f0860b4cb46233cfc5298116bc867ebffc2aaf399afa9354571d43c275970b893768b6446843b66aad61ccef63db54048a705afca1dac8d2cc8c39d
7
+ data.tar.gz: 2fd4ae33dc66cecca94b52ac91b14d6276f3e121f03734b852a1447416e375a0a260707aba7c17b26ea19e1333d3cae9e350dd1165f9515050608c761ad8deae
Binary file
data.tar.gz.sig CHANGED
@@ -1,3 +1 @@
1
- �����6;����"���ϵU�Σ�yOP7?qPم�ۓ\D��?Q�U3h{Ła��'���yS9�=�VU:��rK��€�E��k ;�Y���hBgw���t0r"�
2
- f���(�H!A�9��
3
- 0�����ے���اF��Ķ<�r�f��p"^��cs&�=��J�%Vl�>�X�h������ƫ���F�o�O��|N���`1�$�ـ��`~�����*9�ZqGo��9����tB���_K�
1
+ Y��:н�lX/�Gݕќ`J^���{�+E�֔�OMh\�tQY�'bГ��D�戂�Es3���5%��-Ow~d�;+nEkO���dwmtJ,����$'�鲤B)��&��i���ޥ�pKZ�:BA����"}*��G�Ҷˣ��Bu.�,��Cu�읷h)c@�ҜϷX|�s��I0X)��Ԧ�V�3 ׬D�(�!�Z��`��\�_%����үP�!rY `>�WUxKS[#
@@ -1,187 +1,255 @@
1
- #!/usr/bin/env ruby
2
-
3
- # file: cryptocoin_fanboi.rb
4
-
5
-
6
- require 'psych'
7
- require 'colored'
8
- require 'coinmarketcap'
9
- require 'table-formatter'
10
-
11
-
12
- class CryptocoinFanboi
13
-
14
- attr_reader :coins, :all_coins
15
- attr_accessor :colored
16
-
17
- def initialize(watch: [], ignore: [], colored: true, debug: false)
18
-
19
- @colored, @debug = colored, debug
20
- @watch= watch.map(&:upcase)
21
- @ignore = ignore.map(&:upcase)
22
-
23
- @fields = %w(rank name price_usd price_btc percent_change_1h
24
- percent_change_24h percent_change_7d)
25
-
26
- @year = Time.now.year.to_s
27
- @labels = %w(Rank Name USD BTC) + ['% 1hr:', '% 24hr:',
28
- '% 1 week:', '% ' + @year + ':']
29
- @coins = fetch_coinlist()
30
-
31
-
32
- # check for the local cache file containing a record of currency
33
- # prices from the start of the year
34
-
35
- cache_filename = 'cryptocoin_fanboi.yaml'
36
-
37
- if File.exists? cache_filename then
38
-
39
- #load the file
40
- h = Psych.load File.read(cache_filename)
41
- puts 'h.key.first: ' + h.keys.first.inspect if @debug
42
- puts '@year: ' + @year.inspect if @debug
43
- @growth = (h.keys.first == @year) ? h[@year] : fetch_growth(@all_coins)
44
- puts '@growth: ' + @growth.inspect if @debug
45
- else
46
-
47
- # fetch the currency prices from the start of the year
48
- @growth = fetch_growth(@all_coins)
49
- File.write cache_filename, {@year => @growth}.to_yaml
50
-
51
- end
52
-
53
- end
54
-
55
- def coin_abbreviations()
56
- @coins.map {|x| "%s (%s)" % [x['name'], x['symbol']] }
57
- end
58
-
59
- alias abbreviations coin_abbreviations
60
-
61
-
62
- # View the coins with the largest gains in the past hour
63
- #
64
- def now(limit: 5, markdown: false)
65
-
66
- build_table top_coins('1h', limit: limit), markdown: markdown
67
-
68
- end
69
-
70
- # View the coins with the largest gains this week (past 7 days)
71
- #
72
- def this_week(limit: 5, markdown: false)
73
-
74
- build_table top_coins(limit: limit), markdown: markdown
75
-
76
- end
77
-
78
- alias week this_week
79
-
80
- # View the coins with the largest gains today (past 24 hours)
81
- #
82
- def today(limit: 5, markdown: false)
83
-
84
- build_table top_coins('24h', limit: limit), markdown: markdown
85
-
86
- end
87
-
88
- def to_s(limit: nil, markdown: false)
89
-
90
- coins = fetch_coinlist(limit: limit).map do |coin|
91
-
92
- @fields.map {|x| coin[x] }
93
-
94
- end
95
-
96
- build_table coins, markdown: markdown
97
-
98
- end
99
-
100
- private
101
-
102
- def build_table(a, markdown: markdown)
103
-
104
- coins = a.map do |x|
105
- @growth.has_key?(x[1]) ? x + [@growth[x[1]].to_s] : x
106
- end
107
-
108
- puts 'coins: ' + coins.inspect if @debug
109
- s = TableFormatter.new(source: coins, labels: @labels, markdown: markdown)\
110
- .display
111
-
112
- return s if @colored == false
113
-
114
- a = s.lines
115
-
116
- body = a[3..-2].map do |line|
117
-
118
- fields = line.split('|')
119
1
 
120
- a2 = fields[5..-2].map {|x|
121
2
  x[/^ +-/] ? x.red : x.green
122
3
  }
123
- (fields[0..4] + a2 + ["\n"]).join('|')
124
-
125
- end
126
-
127
- (a[0..2] + body + [a[-1]]).join
128
-
129
- end
130
-
131
- def fetch_coinlist(limit: nil)
132
-
133
- @all_coins = JSON.parse(Coinmarketcap.coins.body)
134
-
135
- a = if @watch.any? then
136
- @all_coins.select {|x| @watch.include? x['symbol']}
137
- elsif @ignore.any?
138
- @all_coins.reject {|x| @ignore.include? x['symbol']}
139
- else
140
- @all_coins
141
- end
142
-
143
- limit ? a.take(limit) : a
144
-
145
- end
146
-
147
- # fetch the currency prices from the start of the year
148
- #
149
- def fetch_growth(coins)
150
-
151
- puts 'fetching growth ...' if @debug
152
-
153
- coins.inject({}) do |r, x|
154
-
155
- day1 = @year + '0101'
156
- puts 'x: ' + x['name'].inspect if @debug
157
- begin
158
- a = Coinmarketcap.get_historical_price(x['name'].gsub(/ /,'-'),
4
+ #!/usr/bin/env ruby
5
+
6
+ # file: cryptocoin_fanboi.rb
7
+
8
+
9
+ require 'psych'
10
+ require 'colored'
11
+ require 'coinmarketcap'
12
+ require 'table-formatter'
13
+ require 'rxfhelper'
14
+
15
+
16
+ =begin
17
+
18
+ # Examples
19
+
20
+ ## Basic usage
21
+
22
+ c = CryptocoinFanboi.new
23
+
24
+ puts.to_s limit: 5 # Display the top 5 coins
25
+ puts c.this_week # Display the top 5 coins this week
26
+ puts c.last_day # Display the top 5 coins in the last 24 hours
27
+ puts c.last_hour # Display the top 5 coins in the last hour
28
+
29
+
30
+ ## Advance usage
31
+
32
+ ### Display a selection of coins in order of rank
33
+
34
+ c = CryptocoinFanboi.new watch: %w(btc xrp eth trx dash xmr neo xem)
35
+ puts.to_s
36
+
37
+ ### Ignore possibly risky coins (e.g. Asian stock market coins etc.)
38
+
39
+ c = CryptocoinFanboi.new ignore: %w(xp bts kcs gxs rhoc)
40
+ puts c.this_week
41
+
42
+ =end
43
+
44
+ class CryptocoinFanboi
45
+
46
+ attr_reader :coins, :all_coins
47
+ attr_accessor :colored
48
+
49
+ def initialize(watch: [], ignore: [],
50
+ colored: true, debug: false)
51
+
52
+ @colored, @debug = colored, debug
53
+
54
+ @watch= watch.map(&:upcase)
55
+ @ignore = ignore.map(&:upcase)
56
+
57
+ @fields = %w(rank name price_usd price_btc percent_change_1h
58
+ percent_change_24h percent_change_7d)
59
+
60
+ @year = Time.now.year.to_s
61
+ @labels = %w(Rank Name USD BTC) + ['% 1hr:', '% 24hr:',
62
+ '% 1 week:', '% ' + @year + ':']
63
+ @coins = fetch_coinlist()
64
+
65
+ # check for the local cache file containing a record of currency
66
+ # prices from the start of the year
67
+
68
+ cache_filename = 'cryptocoin_fanboi.yaml'
69
+
70
+ if File.exists? cache_filename then
71
+
72
+ #load the file
73
+ h = Psych.load File.read(cache_filename)
74
+ puts 'h.key.first: ' + h.keys.first.inspect if @debug
75
+ puts '@year: ' + @year.inspect if @debug
76
+ @growth = (h.keys.first == @year) ? h[@year] : fetch_growth(@all_coins)
77
+ puts '@growth: ' + @growth.inspect if @debug
78
+
79
+ else
80
+
81
+ # fetch the currency prices from the start of the year
82
+ @growth = fetch_growth(@all_coins)
83
+ File.write cache_filename, {@year => @growth}.to_yaml
84
+
85
+ end
86
+
87
+ end
88
+
89
+ def coin_abbreviations()
90
+ @coins.map {|x| "%s (%s)" % [x['name'], x['symbol']] }
91
+ end
92
+
93
+ def coins()
94
+ @coins.map {|x| OpenStruct.new(x) }
95
+ end
96
+
97
+ alias abbreviations coin_abbreviations
98
+
99
+ def inspect()
100
+
101
+ c = @coins.inspect.length > 50 ? @coins.inspect[0..50] + '...' : @coins.inspect
102
+ "#<%s:%s @coins=\"%s\ @all_coins=\"...\">" % [self.class,
103
+ self.object_id, c]
104
+ end
105
+
106
+ def find(name)
107
+
108
+ coins.find {|coin| coin.name =~ /#{name}/i }
109
+
110
+ end
111
+
112
+ # View the coins with the largest gains in the past hour
113
+ #
114
+ def now(limit: 5, markdown: false)
115
+
116
+ build_table2 top_coins('1h', limit: limit), markdown: markdown
117
+
118
+ end
119
+
120
+ alias hour now
121
+ alias last_hour now
122
+
123
+ # View the coins with the largest gains this week (past 7 days)
124
+ #
125
+ def this_week(limit: 5, markdown: false)
126
+
127
+ coins = top_coins(limit: limit)
128
+ build_table2 coins, markdown: markdown
129
+
130
+ end
131
+
132
+ alias week this_week
133
+
134
+ # View the coins with the largest gains today (past 24 hours)
135
+ #
136
+ def today(limit: 5, markdown: false)
137
+
138
+ build_table2 top_coins('24h', limit: limit), markdown: markdown
139
+
140
+ end
141
+
142
+ alias last_day today
143
+ alias day today
144
+
145
+ def to_s(limit: nil, markdown: false)
146
+
147
+ coins = fetch_coinlist(limit: limit).map do |coin|
148
+
149
+ @fields.map {|x| coin[x] }
150
+
151
+ end
152
+
153
+ build_table coins, markdown: markdown
154
+
155
+ end
156
+
157
+ private
158
+
159
+ def build_table(a, markdown: markdown, labels: @labels)
160
+
161
+ coins = a.map do |x|
162
+ @growth.has_key?(x[1]) ? x + [@growth[x[1]].to_s] : x
163
+ end
164
+
165
+ format_table(coins, markdown: markdown, labels: @labels)
166
+ end
167
+
168
+ def build_table2(a, markdown: markdown, labels: @labels)
169
+
170
+ format_table(a, markdown: markdown, labels: @labels[0..-2])
171
+
172
+ end
173
+
174
+ def format_table(source, markdown: markdown, labels: @labels)
175
+ s = TableFormatter.new(source: source, labels: labels, markdown: markdown)\
176
+ .display
177
+
178
+ return s if @colored == false
179
+
180
+ a = s.lines
181
+
182
+ body = a[3..-2].map do |line|
183
+
184
+ fields = line.split('|')
185
+
186
+ a2 = fields[5..-2].map {|x| x[/^ +-/] ? x.red : x.green }
187
+ (fields[0..4] + a2 + ["\n"]).join('|')
188
+
189
+ end
190
+
191
+ (a[0..2] + body + [a[-1]]).join
192
+ end
193
+
194
+ def fetch_coinlist(limit: nil)
195
+
196
+ @all_coins = JSON.parse(Coinmarketcap.coins.body)\
197
+ .map {|x| OpenStruct.new x}
198
+
199
+ a = if @watch.any? then
200
+ @all_coins.select {|x| @watch.include? x.symbol }
201
+ elsif @ignore.any?
202
+ @all_coins.reject {|x| @ignore.include? x.symbol }
203
+ else
204
+ @all_coins
205
+ end
206
+
207
+ limit ? a.take(limit) : a
208
+
209
+ end
210
+
211
+ # fetch the currency prices from the start of the year
212
+ #
213
+ def fetch_growth(coins)
214
+
215
+ puts 'fetching growth ...' if @debug
216
+
217
+ coins.inject({}) do |r, coin|
218
+
219
+ day1 = @year + '0101'
220
+ puts 'coin: ' + coin.name.inspect if @debug
221
+
222
+ begin
223
+
224
+ a = Coinmarketcap.get_historical_price(coin.name.gsub(/ /,'-'),
159
225
  day1, day1)
160
- rescue
161
- puts 'warning : ' + x['name'].inspect + ' ' + ($!).inspect
162
- end
163
-
164
- if a and a.any? then
165
- latest_day, year_start = x['price_usd'].to_f, a[0][:close]
166
- r.merge({x['name'] => (100.0 / (year_start /
167
- (latest_day - year_start))).round(2)})
168
- else
169
- r
170
- end
171
-
172
- end
173
-
174
- end
175
-
176
- def top_coins(period='7d', limit: 5)
177
-
178
- @coins.sort_by {|x| -x['percent_change_' + period].to_f}.take(limit).map \
179
- {|coin| @fields.map {|x| coin[x] }}
180
- end
181
-
182
- end
183
-
184
-
185
- if __FILE__ == $0 then
186
-
187
- ccf = CryptocoinFanboi.new
188
- puts ccf.to_s
189
-
190
- end
226
+ rescue
227
+ puts 'warning : ' + coin.name.inspect + ' ' + ($!).inspect
228
+ end
229
+
230
+ if a and a.any? then
231
+
232
+ latest_day, year_start = coin.price_usd.to_f, a[0][:close]
233
+ r.merge({coin.name => (100.0 / (year_start /
234
+ (latest_day - year_start))).round(2)})
235
+ else
236
+ r
237
+ end
238
+
239
+ end
240
+
241
+ end
242
+
243
+ def top_coins(period='7d', limit: 5)
244
+
245
+ a = @coins.sort_by {|x| -x['percent_change_' + period].to_f}.take(limit)
246
+ a.map {|coin| @fields.map {|key| coin[key] }}
247
+
248
+ end
249
+
250
+ end
251
+
252
+
253
+ if __FILE__ == $0 then
254
+
255
+ ccf = CryptocoinFanboi.new
256
+ puts ccf.to_s
257
+
258
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cryptocoin_fanboi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
@@ -30,7 +30,7 @@ cert_chain:
30
30
  NgmsFfw10oaD3PWQ7UPxWJP14au2LUL+NGHkLrGHOMPphsZhYeXKugGO8NfcKukq
31
31
  fps=
32
32
  -----END CERTIFICATE-----
33
- date: 2018-01-04 00:00:00.000000000 Z
33
+ date: 2018-01-05 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: colored
metadata.gz.sig CHANGED
Binary file