mycoins 0.2.0 → 0.2.1

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