mycoins 0.2.0 → 0.2.1

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: 65db69d59ded9743f0a39831d0af2125ff5f810f
4
- data.tar.gz: eada59b0251d4249940fda0eae44155fe6990465
3
+ metadata.gz: e1eeaa2d4398a92bbc3079a14e66f834deac201b
4
+ data.tar.gz: 6b05e301b76e0c9b7faf6747c5033a8ee522f9cb
5
5
  SHA512:
6
- metadata.gz: 58a8b65d293824ee97ea6c5107c492163c46de6c737fb433c1271ca7e6d41850cc71093a85ebf3728a8d9f1e9e4bef3b3676835e2b14241c3d7f2e75890a0dce
7
- data.tar.gz: 9cabfdecf7dea158fddd01a2051c9ac9dc0e5cf7b11cb8ab08f42b902e2f8f3d17d011d126fe62e2af3dc5eca81173e8532962d2230374473a35e75bcb11be7b
6
+ metadata.gz: 4eceb49d43867af6b28b6c2c693f4befcf08788289d4dc54128c5729c3af1b0c16650905aeb610eb8ad88f6b30659d6ce383fee10a4c402e121c8342903fd4bd
7
+ data.tar.gz: 65bb1cb36f12c85bbf742cee232d72ec1c325cffe70d7c9b76300c6bd5ee8130bdc26ff6a8f8cffb59e8ef0e3a18718c76faf3e97c58fff7bb4896cb1bb6c2b5
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
@@ -1,3 +1 @@
1
- w�RA5
2
- [uƯb=���Q����� ��Z
3
- �Ǣ�1&6��leq�-�����'v��Eo)\a�p�hB+S�x�Ї��'�g��xg+�B繞<mDV�#I��/x#���Jm6+���C� y�n��ɷ�p�X@��Z� �N���j|�'J벲����A��c �]C����|�`!�Zs'��Z���{(�[�=H���u�{��E�k^M|����U�y�pE��i-��
1
+ �\��P�,��w��@%V
data/lib/mycoins.rb CHANGED
@@ -28,7 +28,7 @@ class MyCoins
28
28
 
29
29
  puts '@dx.to_xml: ' + @dx.to_xml if @debug
30
30
 
31
- @mycurrency = @dx.currency || mycurrency.upcase
31
+ @mycurrency = (@dx.currency || mycurrency).upcase
32
32
  puts '@mycurrency: ' + @mycurrency.inspect if @debug
33
33
 
34
34
  mycoins = @dx.all.inject([]) do |r, mycoin|
@@ -53,20 +53,29 @@ class MyCoins
53
53
  a = @dx.all.inject([]) do |r, x|
54
54
 
55
55
  puts 'x: ' + x.inspect if @debug
56
- usd_rate = @ccf.find(x.title).price_usd.to_f
56
+ coin = @ccf.find(x.title)
57
+ usd_rate = coin.price_usd.to_f
58
+
59
+ paid = ((x.qty.to_f * x.btc_price.to_f) * \
60
+ @ccf.price('bitcoin', x.date_purchased) * \
61
+ @jer.rate(@mycurrency)).round(2)
62
+
63
+ value_usd = (usd_rate * x.qty.to_f).round(2)
57
64
 
58
65
  h = {
66
+ rank: coin.rank.to_i,
59
67
  name: x.title,
60
- qty: x.qty,
61
- value_usd: (usd_rate * x.qty.to_f).round(2)
68
+ qty: x.qty,
69
+ btc_price: x.btc_price,
70
+ paid: "%.2f" % paid,
71
+ value_usd: "%.2f" % value_usd
62
72
  }
63
73
 
64
74
 
65
75
  mycurrency = if @mycurrency and @mycurrency != 'USD' then
66
76
 
67
77
  local_value = ((usd_rate * x.qty.to_f) * @jer.rate(@mycurrency)).round(2)
68
- h.merge!(('value_' + @mycurrency.downcase).to_sym => local_value)
69
-
78
+ h.merge!(('value_' + @mycurrency.downcase).to_sym => "%.2f" % local_value)
70
79
 
71
80
  @mycurrency
72
81
 
@@ -76,26 +85,55 @@ class MyCoins
76
85
 
77
86
  end
78
87
 
79
- r << h
88
+ value = (local_value || value_usd)
89
+
90
+ h2 = {
91
+ profit: "%.2f" % (value - paid).round(2),
92
+ pct_profit: "%.2f" % (((value - paid) / value) * 100).round(2)
93
+ }
94
+
95
+ r << h.merge!(h2)
80
96
 
81
97
  end
82
98
 
83
- coins = a.map {|x| x.values}
99
+ coins = a.sort_by{|x| x[:rank]}.map {|x| x.values}
84
100
 
85
- labels = %w(Name Qty USD)
86
- labels << @mycurrency if @mycurrency
101
+ labels = %w(Rank Name Qty btc_price) + ["paid(#{@mycurrency}):", 'value(USD):']
102
+ labels << "value(#{@mycurrency}):" if @mycurrency
103
+ labels += ['Profit:', 'Profit (%):']
87
104
 
88
105
  puts 'labels: ' + labels.inspect if @debug
89
106
  tf = TableFormatter.new(source: coins, labels: labels)
90
- out = tf.display
107
+ out = "# " + @dx.title + "\n\n"
108
+ out << "last_updated: " + Time.now.strftime("%d/%m/%Y\n\n")
109
+ out << tf.display
110
+
111
+ invested = sum(a, :paid)
112
+ total = sum(a, ('value_' + @mycurrency.downcase).to_sym)
113
+ net_profit = sum(a, :profit)
91
114
 
92
- total = a.inject(0) do |r, x|
93
- r + x[('value_' + @mycurrency.downcase).to_sym]
94
- end
115
+ gross_profit_list, losses_list = a.partition {|x| x[:profit].to_f > 0}
95
116
 
96
- out << "\n\nTotal: %s %s" % [total.round(2), @mycurrency]
117
+ gross_profit = sum(gross_profit_list, :profit)
118
+ losses = sum(losses_list, :profit)
119
+
120
+ pct_gross_profit = 100 / (invested / gross_profit)
121
+ pct_losses = 100 / (invested / losses)
122
+
123
+
124
+ out << "\n\nInvested: %.2f %s" % [invested, @mycurrency]
125
+ out << "\nRevenue: %.2f %s" % [total, @mycurrency]
126
+ out << "\n\nGross profit: %.2f %s (%%%.2f)" % [gross_profit, @mycurrency, pct_gross_profit]
127
+ out << "\nLosses: %.2f %s (%%%.2f)" % [losses, @mycurrency, pct_losses]
128
+ out << "\n\nNet profit: %.2f %s" % [net_profit, @mycurrency]
97
129
  out
98
130
 
99
131
  end
100
132
 
133
+ private
134
+
135
+ def sum(a, field)
136
+ a.inject(0) {|r, x| r + x[field].to_f }
137
+ end
138
+
101
139
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mycoins
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Robertson
metadata.gz.sig CHANGED
Binary file