cns 0.1.0 → 0.1.5
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 +4 -4
- data/Gemfile.lock +65 -9
- data/cns.gemspec +8 -6
- data/lib/cns.rb +17 -10
- data/lib/cns/apibc.rb +280 -0
- data/lib/cns/apice1.rb +227 -0
- data/lib/cns/apice2.rb +280 -0
- data/lib/cns/bigquery1.rb +116 -0
- data/lib/cns/bigquery2.rb +78 -0
- data/lib/cns/bigquery3.rb +134 -0
- data/lib/cns/bigquery4.rb +153 -0
- data/lib/cns/bitcoinde.rb +146 -0
- data/lib/cns/etherscan1.rb +119 -0
- data/lib/cns/etherscan2.rb +112 -0
- data/lib/cns/greymass1.rb +105 -0
- data/lib/cns/greymass2.rb +86 -0
- data/lib/cns/kraken.rb +143 -0
- data/lib/cns/paymium.rb +113 -0
- data/lib/cns/therock.rb +103 -0
- data/lib/cns/version.rb +3 -1
- metadata +67 -10
@@ -0,0 +1,86 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @author Hernani Rodrigues Vaz
|
4
|
+
module Cns
|
5
|
+
# classe para processar transacoes do greymass
|
6
|
+
class Greymass
|
7
|
+
# @return [String] texto carteiras & transacoes & ajuste dias
|
8
|
+
def mostra_resumo
|
9
|
+
return unless dados.count.positive?
|
10
|
+
|
11
|
+
puts("\naddress greymass ntx bigquery ntx")
|
12
|
+
dados.each { |e| puts(formata_carteira(e)) }
|
13
|
+
mostra_transacoes_novas
|
14
|
+
mostra_configuracao_ajuste_dias
|
15
|
+
end
|
16
|
+
|
17
|
+
# @param [Hash] hjn dados juntos bigquery & greymass
|
18
|
+
# @return [String] texto formatado duma carteira
|
19
|
+
def formata_carteira(hjn)
|
20
|
+
format(
|
21
|
+
'%<s1>-12.12s %<v1>14.4f %<n1>4i %<v2>14.4f %<n2>4i %<ok>-3s',
|
22
|
+
s1: hjn[:ax],
|
23
|
+
v1: hjn[:es],
|
24
|
+
n1: hjn[:et].count,
|
25
|
+
v2: hjn[:bs],
|
26
|
+
n2: hjn[:bt].count,
|
27
|
+
ok: ok?(hjn) ? 'OK' : 'NOK'
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
# @param (see formata_carteira)
|
32
|
+
# @return [Boolean] carteira tem transacoes novas(sim=NOK, nao=OK)?
|
33
|
+
def ok?(hjn)
|
34
|
+
hjn[:bs] == hjn[:es] && hjn[:bt].count == hjn[:et].count
|
35
|
+
end
|
36
|
+
|
37
|
+
# @example (see Apibc#ledger_gm)
|
38
|
+
# @param [Hash] hlx ledger greymass
|
39
|
+
# @return [String] texto formatado ledger greymass
|
40
|
+
def formata_ledger(hlx)
|
41
|
+
format(
|
42
|
+
'%<bn>12i %<fr>-12.12s %<to>-12.12s %<ac>-10.10s %<dt>10.10s %<vl>12.4f %<sy>-6.6s',
|
43
|
+
bn: hlx[:itx],
|
44
|
+
fr: act_data(hlx)[:from],
|
45
|
+
to: act_data(hlx)[:to],
|
46
|
+
ac: act(hlx)[:name],
|
47
|
+
dt: Date.parse(hlx[:block_time]),
|
48
|
+
vl: act_data_quantity(hlx).to_d,
|
49
|
+
sy: act_data_quantity(hlx)[/[[:upper:]]+/]
|
50
|
+
)
|
51
|
+
end
|
52
|
+
|
53
|
+
# @param (see formata_ledger)
|
54
|
+
# @return [Hash] dados da acao
|
55
|
+
def act(hlx)
|
56
|
+
hlx[:action_trace][:act]
|
57
|
+
end
|
58
|
+
|
59
|
+
# @param (see formata_ledger)
|
60
|
+
# @return [Hash] dados da acao
|
61
|
+
def act_data(hlx)
|
62
|
+
act(hlx)[:data]
|
63
|
+
end
|
64
|
+
|
65
|
+
# @param (see formata_ledger)
|
66
|
+
# @return [String] dados da quantidade
|
67
|
+
def act_data_quantity(hlx)
|
68
|
+
act_data(hlx)[:quantity].to_s
|
69
|
+
end
|
70
|
+
|
71
|
+
# @return [String] texto transacoes
|
72
|
+
def mostra_transacoes_novas
|
73
|
+
return unless ops[:v] && novax.count.positive?
|
74
|
+
|
75
|
+
puts("\nsequence num from to accao data valor moeda")
|
76
|
+
sorax.each { |e| puts(formata_ledger(e)) }
|
77
|
+
end
|
78
|
+
|
79
|
+
# @return [String] texto configuracao ajuste dias das transacoes
|
80
|
+
def mostra_configuracao_ajuste_dias
|
81
|
+
return unless novax.count.positive?
|
82
|
+
|
83
|
+
puts("\nstring ajuste dias\n-h=#{sorax.map { |e| "#{e[:itx]}:0" }.join(' ')}")
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
data/lib/cns/kraken.rb
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require('bigdecimal/util')
|
4
|
+
|
5
|
+
# @author Hernani Rodrigues Vaz
|
6
|
+
module Cns
|
7
|
+
# classe para processar transacoes trades/ledger do kraken
|
8
|
+
class Kraken
|
9
|
+
# @return [Apius] API kraken
|
10
|
+
attr_reader :api
|
11
|
+
# @return [Array<Hash>] todos os dados bigquery
|
12
|
+
attr_reader :bqd
|
13
|
+
# @return [Thor::CoreExt::HashWithIndifferentAccess] opcoes trabalho
|
14
|
+
attr_reader :ops
|
15
|
+
|
16
|
+
# @param [Hash] dad todos os dados bigquery
|
17
|
+
# @param [Thor::CoreExt::HashWithIndifferentAccess] pop opcoes trabalho
|
18
|
+
# @option pop [Hash] :h ({}) configuracao dias ajuste reposicionamento temporal
|
19
|
+
# @option pop [Boolean] :v (false) mostra dados transacoes trades & ledger?
|
20
|
+
# @option pop [Boolean] :t (false) mostra transacoes todas ou somente novas?
|
21
|
+
# @return [Kraken] API kraken - obter saldos & transacoes trades e ledger
|
22
|
+
def initialize(dad, pop)
|
23
|
+
@api = Apice.new
|
24
|
+
@bqd = dad
|
25
|
+
@ops = pop
|
26
|
+
end
|
27
|
+
|
28
|
+
# @return [Hash] trades kraken novos
|
29
|
+
def trades
|
30
|
+
@trades ||= exd[:kt].select { |k, _| kyt.include?(k) }
|
31
|
+
end
|
32
|
+
|
33
|
+
# @return [Hash] ledger kraken novos
|
34
|
+
def ledger
|
35
|
+
@ledger ||= exd[:kl].select { |k, _| kyl.include?(k) }
|
36
|
+
end
|
37
|
+
|
38
|
+
# @return [String] texto saldos & transacoes & ajuste dias
|
39
|
+
def mostra_resumo
|
40
|
+
puts("\nKRAKEN\ntipo kraken bigquery")
|
41
|
+
exd[:sl].each { |k, v| puts(formata_saldos(k, v)) }
|
42
|
+
mostra_totais
|
43
|
+
|
44
|
+
mostra_trades
|
45
|
+
mostra_ledger
|
46
|
+
return if trades.empty?
|
47
|
+
|
48
|
+
puts("\nstring ajuste dias dos trades\n-h=#{kyt.map { |e| "#{e}:0" }.join(' ')}")
|
49
|
+
end
|
50
|
+
|
51
|
+
# @return [Hash] dados exchange kraken - saldos & transacoes trades e ledger
|
52
|
+
def exd
|
53
|
+
@exd ||= {
|
54
|
+
sl: api.account_us,
|
55
|
+
kt: api.trades_us,
|
56
|
+
kl: api.ledger_us
|
57
|
+
}
|
58
|
+
end
|
59
|
+
|
60
|
+
# @return [Array<String>] lista txid dos trades novos
|
61
|
+
def kyt
|
62
|
+
@kyt ||= exd[:kt].keys - (ops[:t] ? [] : bqd[:nt].map { |e| e[:txid].to_sym })
|
63
|
+
end
|
64
|
+
|
65
|
+
# @return [Array<String>] lista txid dos ledger novos
|
66
|
+
def kyl
|
67
|
+
@kyl ||= exd[:kl].keys - (ops[:t] ? [] : bqd[:nl].map { |e| e[:txid].to_sym })
|
68
|
+
end
|
69
|
+
|
70
|
+
# @example (see Apice#account_us)
|
71
|
+
# @param [String] moe codigo kraken da moeda
|
72
|
+
# @param [BigDecimal] sal saldo kraken da moeda
|
73
|
+
# @return [String] texto formatado saldos
|
74
|
+
def formata_saldos(moe, sal)
|
75
|
+
t = bqd[:sl][moe.downcase.to_sym].to_d
|
76
|
+
format(
|
77
|
+
'%<mo>-5.5s %<kr>21.9f %<bq>21.9f %<ok>3.3s',
|
78
|
+
mo: moe.upcase,
|
79
|
+
kr: sal.to_d,
|
80
|
+
bq: t,
|
81
|
+
ok: t == sal.to_d ? 'OK' : 'NOK'
|
82
|
+
)
|
83
|
+
end
|
84
|
+
|
85
|
+
# @example (see Apice#trades_us)
|
86
|
+
# @param (see Bigquery#ust_val1)
|
87
|
+
# @return [String] texto formatado trade
|
88
|
+
def formata_trades(idx, htx)
|
89
|
+
format(
|
90
|
+
'%<ky>-6.6s %<dt>19.19s %<ty>-10.10s %<mo>-8.8s %<pr>8.2f %<vl>15.7f %<co>8.2f',
|
91
|
+
ky: idx,
|
92
|
+
dt: Time.at(htx[:time]),
|
93
|
+
ty: "#{htx[:type]}/#{htx[:ordertype]}",
|
94
|
+
mo: htx[:pair].upcase,
|
95
|
+
pr: htx[:price].to_d,
|
96
|
+
vl: htx[:vol].to_d,
|
97
|
+
co: htx[:cost].to_d
|
98
|
+
)
|
99
|
+
end
|
100
|
+
|
101
|
+
# @example (see Apice#ledger_us)
|
102
|
+
# @param (see Bigquery#usl_val)
|
103
|
+
# @return [String] texto formatado ledger
|
104
|
+
def formata_ledger(idx, hlx)
|
105
|
+
format(
|
106
|
+
'%<ky>-6.6s %<dt>19.19s %<ty>-10.10s %<mo>-4.4s %<pr>18.7f %<vl>18.7f',
|
107
|
+
ky: idx,
|
108
|
+
dt: Time.at(hlx[:time]),
|
109
|
+
ty: hlx[:type],
|
110
|
+
mo: hlx[:asset].upcase,
|
111
|
+
pr: hlx[:amount].to_d,
|
112
|
+
vl: hlx[:fee].to_d
|
113
|
+
)
|
114
|
+
end
|
115
|
+
|
116
|
+
# @return [String] texto totais numero de transacoes
|
117
|
+
def mostra_totais
|
118
|
+
a = exd[:kt].count
|
119
|
+
b = bqd[:nt].count
|
120
|
+
c = exd[:kl].count
|
121
|
+
d = bqd[:nl].count
|
122
|
+
|
123
|
+
puts("TRADES #{format('%<a>20i %<b>21i %<o>3.3s', a: a, b: b, o: a == b ? 'OK' : 'NOK')}")
|
124
|
+
puts("LEDGER #{format('%<c>20i %<d>21i %<o>3.3s', c: c, d: d, o: c == d ? 'OK' : 'NOK')}")
|
125
|
+
end
|
126
|
+
|
127
|
+
# @return [String] texto transacoes trades
|
128
|
+
def mostra_trades
|
129
|
+
return unless ops[:v] && trades.count.positive?
|
130
|
+
|
131
|
+
puts("\ntrade data hora tipo par ---preco ---------volume ---custo")
|
132
|
+
trades.sort { |a, b| b[1][:time] <=> a[1][:time] }.each { |k, v| puts(formata_trades(k, v)) }
|
133
|
+
end
|
134
|
+
|
135
|
+
# @return [String] texto transacoes ledger
|
136
|
+
def mostra_ledger
|
137
|
+
return unless ops[:v] && ledger.count.positive?
|
138
|
+
|
139
|
+
puts("\nledger data hora tipo moeda -------quantidade -------------custo")
|
140
|
+
ledger.sort { |a, b| b[1][:time] <=> a[1][:time] }.each { |k, v| puts(formata_ledger(k, v)) }
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
data/lib/cns/paymium.rb
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require('bigdecimal/util')
|
4
|
+
|
5
|
+
# @author Hernani Rodrigues Vaz
|
6
|
+
module Cns
|
7
|
+
# classe para processar transacoes ledger do paymium
|
8
|
+
class Paymium
|
9
|
+
# @return [Apius] API paymium
|
10
|
+
attr_reader :api
|
11
|
+
# @return [Array<Hash>] todos os dados bigquery
|
12
|
+
attr_reader :bqd
|
13
|
+
# @return [Thor::CoreExt::HashWithIndifferentAccess] opcoes trabalho
|
14
|
+
attr_reader :ops
|
15
|
+
|
16
|
+
# @param [Hash] dad todos os dados bigquery
|
17
|
+
# @param [Thor::CoreExt::HashWithIndifferentAccess] pop opcoes trabalho
|
18
|
+
# @option pop [Hash] :h ({}) configuracao dias ajuste reposicionamento temporal
|
19
|
+
# @option pop [Boolean] :v (false) mostra dados transacoes trades & ledger?
|
20
|
+
# @option pop [Boolean] :t (false) mostra transacoes todas ou somente novas?
|
21
|
+
# @return [Paymium] API paymium - obter saldos & transacoes ledger
|
22
|
+
def initialize(dad, pop)
|
23
|
+
@api = Apice.new
|
24
|
+
@bqd = dad
|
25
|
+
@ops = pop
|
26
|
+
end
|
27
|
+
|
28
|
+
# @return [Array<Hash>] lista ledger paymium novos
|
29
|
+
def ledger
|
30
|
+
@ledger ||= exd[:kl].map { |h| h[:account_operations].select { |o| kyl.include?(o[:uuid]) } }.flatten
|
31
|
+
end
|
32
|
+
|
33
|
+
# @return [String] texto saldos & transacoes & ajuste dias
|
34
|
+
def mostra_resumo
|
35
|
+
puts("\nPAYMIUM\ntipo paymium bigquery")
|
36
|
+
puts(formata_saldos(:btc))
|
37
|
+
puts(formata_saldos(:eur))
|
38
|
+
mostra_totais
|
39
|
+
|
40
|
+
mostra_ledger
|
41
|
+
return unless ledger.count.positive?
|
42
|
+
|
43
|
+
puts("\nstring ajuste dias da ledger\n-h=#{kyl.map { |e| "#{e}:0" }.join(' ')}")
|
44
|
+
end
|
45
|
+
|
46
|
+
# @return [Hash] dados exchange paymium - saldos & transacoes ledger
|
47
|
+
def exd
|
48
|
+
@exd ||= {
|
49
|
+
sl: api.account_fr,
|
50
|
+
kl: api.ledger_fr
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
# @return [Array<String>] lista txid dos ledger novos
|
55
|
+
def kyl
|
56
|
+
@kyl ||= exd[:kl].map { |h| h[:account_operations].map { |o| o[:uuid] } }.flatten -
|
57
|
+
(ops[:t] ? [] : bqd[:nl].map { |e| e[:txid] })
|
58
|
+
end
|
59
|
+
|
60
|
+
# @example (see Apice#account_fr)
|
61
|
+
# @param [Symbol] bqm symbol paymium da moeda
|
62
|
+
# @return [String] texto formatado saldos
|
63
|
+
def formata_saldos(bqm)
|
64
|
+
b = bqd[:sl][bqm].to_d
|
65
|
+
t = exd[:sl]["balance_#{bqm}".to_sym].to_d
|
66
|
+
format(
|
67
|
+
'%<mo>-5.5s %<kr>21.9f %<bq>21.9f %<ok>3.3s',
|
68
|
+
mo: bqm.upcase,
|
69
|
+
kr: t,
|
70
|
+
bq: b,
|
71
|
+
ok: t == b ? 'OK' : 'NOK'
|
72
|
+
)
|
73
|
+
end
|
74
|
+
|
75
|
+
# @example (see Apice#ledger_fr)
|
76
|
+
# @param (see Bigquery#frl_val)
|
77
|
+
# @return [String] texto formatado ledger
|
78
|
+
def formata_ledger(hlx)
|
79
|
+
format(
|
80
|
+
'%<ky>-18.18s %<dt>19.19s %<ty>-17.17s %<mo>-4.4s %<vl>18.7f',
|
81
|
+
ky: formata_uuid(hlx[:uuid], 18),
|
82
|
+
dt: Time.at(hlx[:created_at_int]),
|
83
|
+
ty: hlx[:name],
|
84
|
+
mo: hlx[:currency].upcase,
|
85
|
+
vl: hlx[:amount].to_d
|
86
|
+
)
|
87
|
+
end
|
88
|
+
|
89
|
+
# @param [String] uid identificacor da ledger
|
90
|
+
# @param [Integer] max chars a mostrar
|
91
|
+
# @return [String] texto formatado identificacor da ledger
|
92
|
+
def formata_uuid(uid, max)
|
93
|
+
i = Integer(max / 2)
|
94
|
+
max < 7 ? 'erro' : "#{uid[0, i]}#{uid[-i..]}"
|
95
|
+
end
|
96
|
+
|
97
|
+
# @return [String] texto totais numero de transacoes
|
98
|
+
def mostra_totais
|
99
|
+
c = exd[:kl].map { |h| h[:account_operations].count }.flatten.inject(:+)
|
100
|
+
d = bqd[:nl].count
|
101
|
+
|
102
|
+
puts("LEDGER #{format('%<c>20i %<d>21i %<o>3.3s', c: c, d: d, o: c == d ? 'OK' : 'NOK')}")
|
103
|
+
end
|
104
|
+
|
105
|
+
# @return [String] texto transacoes ledger
|
106
|
+
def mostra_ledger
|
107
|
+
return unless ops[:v] && ledger.count.positive?
|
108
|
+
|
109
|
+
puts("\nledger data hora tipo moeda quantidade")
|
110
|
+
ledger.sort { |a, b| b[:created_at_int] <=> a[:created_at_int] }.each { |o| puts(formata_ledger(o)) }
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
data/lib/cns/therock.rb
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require('bigdecimal/util')
|
4
|
+
|
5
|
+
# @author Hernani Rodrigues Vaz
|
6
|
+
module Cns
|
7
|
+
# classe para processar transacoes ledger do therock
|
8
|
+
class TheRock
|
9
|
+
# @return [Apius] API therock
|
10
|
+
attr_reader :api
|
11
|
+
# @return [Array<Hash>] todos os dados bigquery
|
12
|
+
attr_reader :bqd
|
13
|
+
# @return [Thor::CoreExt::HashWithIndifferentAccess] opcoes trabalho
|
14
|
+
attr_reader :ops
|
15
|
+
|
16
|
+
# @param [Hash] dad todos os dados bigquery
|
17
|
+
# @param [Thor::CoreExt::HashWithIndifferentAccess] pop opcoes trabalho
|
18
|
+
# @option pop [Hash] :h ({}) configuracao dias ajuste reposicionamento temporal
|
19
|
+
# @option pop [Boolean] :v (false) mostra dados transacoes trades & ledger?
|
20
|
+
# @option pop [Boolean] :t (false) mostra transacoes todas ou somente novas?
|
21
|
+
# @return [TheRock] API therock - obter saldos & transacoes ledger
|
22
|
+
def initialize(dad, pop)
|
23
|
+
@api = Apice.new
|
24
|
+
@bqd = dad
|
25
|
+
@ops = pop
|
26
|
+
end
|
27
|
+
|
28
|
+
# @return [Array<Hash>] lista ledger therock novos
|
29
|
+
def ledger
|
30
|
+
@ledger ||= exd[:kl].select { |o| kyl.include?(o[:id]) }
|
31
|
+
end
|
32
|
+
|
33
|
+
# @return [String] texto saldos & transacoes & ajuste dias
|
34
|
+
def mostra_resumo
|
35
|
+
puts("\nTHEROCK\ntipo therock bigquery")
|
36
|
+
exd[:sl].each { |h| puts(formata_saldos(h)) }
|
37
|
+
mostra_totais
|
38
|
+
|
39
|
+
mostra_ledger
|
40
|
+
return unless ledger.count.positive?
|
41
|
+
|
42
|
+
puts("\nstring ajuste dias da ledger\n-h=#{kyl.map { |e| "#{e}:0" }.join(' ')}")
|
43
|
+
end
|
44
|
+
|
45
|
+
# @return [Hash] dados exchange therock - saldos & transacoes ledger
|
46
|
+
def exd
|
47
|
+
@exd ||= {
|
48
|
+
sl: api.account_mt,
|
49
|
+
kl: api.ledger_mt
|
50
|
+
}
|
51
|
+
end
|
52
|
+
|
53
|
+
# @return [Array<String>] lista txid dos ledger novos
|
54
|
+
def kyl
|
55
|
+
@kyl ||= exd[:kl].map { |h| h[:id] } - (ops[:t] ? [] : bqd[:nl].map { |e| e[:txid] })
|
56
|
+
end
|
57
|
+
|
58
|
+
# @example (see Apice#account_mt)
|
59
|
+
# @param [Hash] hsl saldo therock da moeda
|
60
|
+
# @return [String] texto formatado saldos
|
61
|
+
def formata_saldos(hsl)
|
62
|
+
b = bqd[:sl][hsl[:currency].downcase.to_sym].to_d
|
63
|
+
k = hsl[:balance].to_d
|
64
|
+
format(
|
65
|
+
'%<mo>-5.5s %<kr>21.9f %<bq>21.9f %<ok>3.3s',
|
66
|
+
mo: hsl[:currency].upcase,
|
67
|
+
kr: k,
|
68
|
+
bq: b,
|
69
|
+
ok: k == b ? 'OK' : 'NOK'
|
70
|
+
)
|
71
|
+
end
|
72
|
+
|
73
|
+
# @example (see Apice#ledger_mt)
|
74
|
+
# @param (see Bigquery#mtl_val1)
|
75
|
+
# @return [String] texto formatado ledger
|
76
|
+
def formata_ledger(hlx)
|
77
|
+
format(
|
78
|
+
'%<ky>6i %<dt>19.19s %<ty>-27.27s %<mo>-4.4s %<vl>20.7f',
|
79
|
+
ky: hlx[:id],
|
80
|
+
dt: Time.parse(hlx[:date]),
|
81
|
+
ty: hlx[:type],
|
82
|
+
mo: hlx[:currency].upcase,
|
83
|
+
vl: hlx[:price].to_d
|
84
|
+
)
|
85
|
+
end
|
86
|
+
|
87
|
+
# @return [String] texto totais numero de transacoes
|
88
|
+
def mostra_totais
|
89
|
+
c = exd[:kl].count
|
90
|
+
d = bqd[:nl].count
|
91
|
+
|
92
|
+
puts("LEDGER #{format('%<c>20i %<d>21i %<o>3.3s', c: c, d: d, o: c == d ? 'OK' : 'NOK')}")
|
93
|
+
end
|
94
|
+
|
95
|
+
# @return [String] texto transacoes ledger
|
96
|
+
def mostra_ledger
|
97
|
+
return unless ops[:v] && ledger.count.positive?
|
98
|
+
|
99
|
+
puts("\nledger data hora tipo moeda ---------quantidade")
|
100
|
+
ledger.sort { |a, b| b[:id] <=> a[:id] }.each { |o| puts(formata_ledger(o)) }
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
data/lib/cns/version.rb
CHANGED