cns 0.1.0 → 0.1.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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/cns.rb +20 -2
- data/lib/cns/apide.rb +240 -0
- data/lib/cns/apies.rb +161 -0
- data/lib/cns/apifr.rb +139 -0
- data/lib/cns/apigm.rb +181 -0
- data/lib/cns/apimt.rb +138 -0
- data/lib/cns/apius.rb +167 -0
- data/lib/cns/bigquery1.rb +114 -0
- data/lib/cns/bigquery2.rb +76 -0
- data/lib/cns/bigquery3.rb +122 -0
- data/lib/cns/bigquery4.rb +151 -0
- data/lib/cns/bitcoinde.rb +135 -0
- data/lib/cns/etherscan1.rb +118 -0
- data/lib/cns/etherscan2.rb +110 -0
- data/lib/cns/greymass1.rb +104 -0
- data/lib/cns/greymass2.rb +85 -0
- data/lib/cns/kraken.rb +132 -0
- data/lib/cns/paymium.rb +106 -0
- data/lib/cns/therock.rb +95 -0
- data/lib/cns/version.rb +3 -1
- metadata +19 -1
@@ -0,0 +1,104 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require('bigdecimal/util')
|
4
|
+
|
5
|
+
# @author Hernani Rodrigues Vaz
|
6
|
+
module Cns
|
7
|
+
# (see Greymass)
|
8
|
+
class Greymass
|
9
|
+
# @return [Apigm] API greymass
|
10
|
+
attr_reader :api
|
11
|
+
# @return [Array<Hash>] todos os dados bigquery
|
12
|
+
attr_reader :dbq
|
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?
|
20
|
+
# @option pop [Boolean] :t (false) mostra transacoes todas ou somente novas?
|
21
|
+
# @return [Greymass] API greymass - processar transacoes
|
22
|
+
def initialize(dad, pop)
|
23
|
+
@api = Apigm.new
|
24
|
+
@dbq = dad
|
25
|
+
@ops = pop
|
26
|
+
end
|
27
|
+
|
28
|
+
# @return [Array<String>] lista dos meus enderecos
|
29
|
+
def lax
|
30
|
+
@lax ||= dbq[:wb].map { |h| h[:ax] }
|
31
|
+
end
|
32
|
+
|
33
|
+
# @return [Array<Hash>] todos os dados greymass - saldos & transacoes
|
34
|
+
def dbc
|
35
|
+
@dbc ||= dbq[:wb].map { |e| base_bc(e) }
|
36
|
+
end
|
37
|
+
|
38
|
+
# @return [Array<Hash>] todos os dados juntos bigquery & greymass
|
39
|
+
def dados
|
40
|
+
@dados ||= dbq[:wb].map { |b| bq_bc(b, dbc.select { |s| b[:ax] == s[:ax] }.first) }
|
41
|
+
end
|
42
|
+
|
43
|
+
# @return [Array<Integer>] lista indices transacoes novas
|
44
|
+
def bnt
|
45
|
+
@bnt ||= (dbc.map { |e| e[:tx].map { |n| n[:itx] } }.flatten - (ops[:t] ? [] : dbq[:nt].map { |t| t[:itx] }))
|
46
|
+
end
|
47
|
+
|
48
|
+
# @return [Array<Hash>] lista transacoes novas
|
49
|
+
def novax
|
50
|
+
@novax ||= dbc.map { |e| e[:tx].select { |s| bnt.include?(s[:itx]) } }.flatten
|
51
|
+
end
|
52
|
+
|
53
|
+
# @param [Hash] hbq dados bigquery wallet
|
54
|
+
# @return [Hash] dados greymass - address, saldo & transacoes
|
55
|
+
def base_bc(hbq)
|
56
|
+
a = hbq[:ax]
|
57
|
+
{
|
58
|
+
ax: a,
|
59
|
+
sl: greymass_sl(a).inject(:+),
|
60
|
+
tx: filtrar_tx(a, api.all_tx(a))
|
61
|
+
}
|
62
|
+
end
|
63
|
+
|
64
|
+
# @param hbq (see base_bc)
|
65
|
+
# @param [Hash] hbc dados greymass
|
66
|
+
# @return [Hash] dados juntos bigquery & greymass
|
67
|
+
def bq_bc(hbq, hbc)
|
68
|
+
{
|
69
|
+
id: hbq[:id],
|
70
|
+
ax: hbq[:ax],
|
71
|
+
bs: hbq[:sl],
|
72
|
+
bt: dbq[:nt].select { |t| t[:iax] == hbq[:ax] },
|
73
|
+
es: hbc[:sl],
|
74
|
+
et: hbc[:tx]
|
75
|
+
}
|
76
|
+
end
|
77
|
+
|
78
|
+
# @param (see filtrar_tx)
|
79
|
+
# @return [Array<BigDecimal>] lista recursos - liquido, net, spu
|
80
|
+
def greymass_sl(add)
|
81
|
+
v = api.account(account_name: add)
|
82
|
+
[
|
83
|
+
v[:core_liquid_balance].to_d,
|
84
|
+
v[:total_resources][:net_weight].to_d,
|
85
|
+
v[:total_resources][:cpu_weight].to_d
|
86
|
+
]
|
87
|
+
end
|
88
|
+
|
89
|
+
# @param [String] add endereco carteira EOS
|
90
|
+
# @param [Array<Hash>] ary lista das transacoes
|
91
|
+
# @return [Array<Hash>] lista transacoes ligadas a uma carteira filtrada
|
92
|
+
def filtrar_tx(add, ary)
|
93
|
+
# elimina transferencia from: (lax) to: (add) - esta transferencia aparece em from: (add) to: (lax)
|
94
|
+
# adiciona chave indice itx & adiciona identificador da carteira iax
|
95
|
+
ary.delete_if { |h| act_data(h)[:to] == add && lax.include?(act_data(h)[:from]) }
|
96
|
+
.map { |h| h.merge(itx: h[:global_action_seq], iax: add) }
|
97
|
+
end
|
98
|
+
|
99
|
+
# @return [Array<Hash>] lista ordenada transacoes novas
|
100
|
+
def sorax
|
101
|
+
novax.sort { |a, b| b[:itx] <=> a[:itx] }
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# @author Hernani Rodrigues Vaz
|
4
|
+
module Cns
|
5
|
+
# classe para processar carteiras & transacoes
|
6
|
+
class Greymass
|
7
|
+
# @param [Hash] hjn dados juntos bigquery & greymass
|
8
|
+
# @return [String] texto formatado duma carteira
|
9
|
+
def formata_carteira(hjn)
|
10
|
+
format(
|
11
|
+
'%<s1>-12.12s %<v1>14.4f %<n1>4i %<v2>14.4f %<n2>4i %<ok>-3s',
|
12
|
+
s1: hjn[:ax],
|
13
|
+
v1: hjn[:bs],
|
14
|
+
n1: hjn[:bt].count,
|
15
|
+
v2: hjn[:es],
|
16
|
+
n2: hjn[:et].count,
|
17
|
+
ok: ok?(hjn) ? 'OK' : 'NOK'
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
# @param (see formata_carteira)
|
22
|
+
# @return [Boolean] carteira tem transacoes novas(sim=NOK, nao=OK)?
|
23
|
+
def ok?(hjn)
|
24
|
+
hjn[:bs] == hjn[:es] && hjn[:bt].count == hjn[:et].count
|
25
|
+
end
|
26
|
+
|
27
|
+
# @param [Hash] htx transacao
|
28
|
+
# @return [String] texto formatado transacao
|
29
|
+
def formata_transacao(htx)
|
30
|
+
format(
|
31
|
+
'%<bn>12i %<fr>-12.12s %<to>-12.12s %<ac>-10.10s %<dt>10.10s %<vl>12.4f %<sy>-6.6s',
|
32
|
+
bn: htx[:itx],
|
33
|
+
fr: act_data(htx)[:from],
|
34
|
+
to: act_data(htx)[:to],
|
35
|
+
ac: act(htx)[:name],
|
36
|
+
dt: Date.parse(htx[:block_time]),
|
37
|
+
vl: act_data_quantity(htx).to_d,
|
38
|
+
sy: act_data_quantity(htx)[/[[:upper:]]+/]
|
39
|
+
)
|
40
|
+
end
|
41
|
+
|
42
|
+
# @param (see formata_transacao)
|
43
|
+
# @return [Hash] dados da acao
|
44
|
+
def act(htx)
|
45
|
+
htx[:action_trace][:act]
|
46
|
+
end
|
47
|
+
|
48
|
+
# @param (see formata_transacao)
|
49
|
+
# @return [Hash] dados da acao
|
50
|
+
def act_data(htx)
|
51
|
+
act(htx)[:data]
|
52
|
+
end
|
53
|
+
|
54
|
+
# @param (see formata_transacao)
|
55
|
+
# @return [String] dados da quantidade
|
56
|
+
def act_data_quantity(htx)
|
57
|
+
act_data(htx)[:quantity].to_s
|
58
|
+
end
|
59
|
+
|
60
|
+
# @return [String] texto carteiras & transacoes & ajuste dias
|
61
|
+
def mostra_resumo
|
62
|
+
return unless dados.count.positive?
|
63
|
+
|
64
|
+
puts("\naddress bigquery ntx greymass ntx")
|
65
|
+
dados.each { |e| puts(formata_carteira(e)) }
|
66
|
+
mostra_transacoes_novas
|
67
|
+
mostra_configuracao_ajuste_dias
|
68
|
+
end
|
69
|
+
|
70
|
+
# @return [String] texto transacoes
|
71
|
+
def mostra_transacoes_novas
|
72
|
+
return unless ops[:v] && novax.count.positive?
|
73
|
+
|
74
|
+
puts("\nsequence num from to accao data valor moeda")
|
75
|
+
sorax.each { |e| puts(formata_transacao(e)) }
|
76
|
+
end
|
77
|
+
|
78
|
+
# @return [String] texto configuracao ajuste dias das transacoes
|
79
|
+
def mostra_configuracao_ajuste_dias
|
80
|
+
return unless novax.count.positive?
|
81
|
+
|
82
|
+
puts("\nstring ajuste dias\n-h=#{sorax.map { |e| "#{e[:itx]}:0" }.join(' ')}")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
data/lib/cns/kraken.rb
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require('bigdecimal/util')
|
4
|
+
|
5
|
+
# @author Hernani Rodrigues Vaz
|
6
|
+
module Cns
|
7
|
+
# classe para processar saldos & transacoes trades e ledger
|
8
|
+
class Kraken
|
9
|
+
# @return [Apius] API kraken
|
10
|
+
attr_reader :api
|
11
|
+
# @return [Array<Hash>] todos os dados bigquery
|
12
|
+
attr_reader :dbq
|
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 kraken base
|
24
|
+
@api = Apius.new
|
25
|
+
@dbq = dad
|
26
|
+
@ops = pop
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Hash] dados exchange kraken - saldos & transacoes trades e ledger
|
30
|
+
def exd
|
31
|
+
@exd ||= {
|
32
|
+
sl: api.account,
|
33
|
+
kt: api.trades,
|
34
|
+
kl: api.ledger
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
# @return [Array<String>] lista txid de transacoes trades
|
39
|
+
def kyt
|
40
|
+
@kyt ||= exd[:kt].keys - (ops[:t] ? [] : dbq[:nt].map { |e| e[:txid].to_sym })
|
41
|
+
end
|
42
|
+
|
43
|
+
# @return [Array<String>] lista txid de transacoes ledger
|
44
|
+
def kyl
|
45
|
+
@kyl ||= exd[:kl].keys - (ops[:t] ? [] : dbq[:nl].map { |e| e[:txid].to_sym })
|
46
|
+
end
|
47
|
+
|
48
|
+
# @return [Hash] transacoes trades
|
49
|
+
def trades
|
50
|
+
@trades ||= exd[:kt].select { |k, _| kyt.include?(k) }
|
51
|
+
end
|
52
|
+
|
53
|
+
# @return [Hash] transacoes ledger
|
54
|
+
def ledger
|
55
|
+
@ledger ||= exd[:kl].select { |k, _| kyl.include?(k) }
|
56
|
+
end
|
57
|
+
|
58
|
+
# @example (see Apius#account)
|
59
|
+
# @param [String] moe codigo kraken da moeda
|
60
|
+
# @param [BigDecimal] sal saldo kraken da moeda
|
61
|
+
# @return [String] texto formatado saldos (kraken/bigquery) & iguais/ok/nok?
|
62
|
+
def formata_saldos(moe, sal)
|
63
|
+
t = dbq[:sl][moe.downcase.to_sym].to_d
|
64
|
+
format(
|
65
|
+
'%<mo>-5.5s %<kr>21.9f %<bq>21.9f %<ok>3.3s',
|
66
|
+
mo: moe.upcase,
|
67
|
+
kr: sal,
|
68
|
+
bq: t,
|
69
|
+
ok: t == sal ? 'OK' : 'NOK'
|
70
|
+
)
|
71
|
+
end
|
72
|
+
|
73
|
+
# @example (see Apius#trades)
|
74
|
+
# @param (see Bigquery#ust_val1)
|
75
|
+
# @return [String] texto formatado transacao trade
|
76
|
+
def formata_trades(idx, htx)
|
77
|
+
format(
|
78
|
+
'%<ky>-6.6s %<dt>19.19s %<ty>-10.10s %<mo>-8.8s %<pr>8.2f %<vl>15.7f %<co>8.2f',
|
79
|
+
ky: idx,
|
80
|
+
dt: Time.at(htx[:time]),
|
81
|
+
ty: "#{htx[:type]}/#{htx[:ordertype]}",
|
82
|
+
mo: htx[:pair].upcase,
|
83
|
+
pr: htx[:price].to_d,
|
84
|
+
vl: htx[:vol].to_d,
|
85
|
+
co: htx[:cost].to_d
|
86
|
+
)
|
87
|
+
end
|
88
|
+
|
89
|
+
# @example (see Apius#ledger)
|
90
|
+
# @param (see Bigquery#usl_val)
|
91
|
+
# @return [String] texto formatado transacao ledger
|
92
|
+
def formata_ledger(idx, hlx)
|
93
|
+
format(
|
94
|
+
'%<ky>-6.6s %<dt>19.19s %<ty>-10.10s %<mo>-4.4s %<pr>18.7f %<vl>18.7f',
|
95
|
+
ky: idx,
|
96
|
+
dt: Time.at(hlx[:time]),
|
97
|
+
ty: hlx[:type],
|
98
|
+
mo: hlx[:asset].upcase,
|
99
|
+
pr: hlx[:amount].to_d,
|
100
|
+
vl: hlx[:fee].to_d
|
101
|
+
)
|
102
|
+
end
|
103
|
+
|
104
|
+
# @return [String] texto saldos & transacoes & ajuste dias
|
105
|
+
def mostra_resumo
|
106
|
+
puts("\nKRAKEN\nmoeda saldo kraken saldo bigquery")
|
107
|
+
exd[:sl].each { |k, v| puts(formata_saldos(k, v.to_d)) }
|
108
|
+
|
109
|
+
mostra_trades
|
110
|
+
mostra_ledger
|
111
|
+
return unless trades.count.positive?
|
112
|
+
|
113
|
+
puts("\nstring ajuste dias dos trades\n-h=#{kyt.map { |e| "#{e}:0" }.join(' ')}")
|
114
|
+
end
|
115
|
+
|
116
|
+
# @return [String] texto transacoes trades
|
117
|
+
def mostra_trades
|
118
|
+
return unless ops[:v] && trades.count.positive?
|
119
|
+
|
120
|
+
puts("\ntrade data hora tipo par ---preco ---------volume ---custo")
|
121
|
+
trades.sort { |a, b| b[1][:time] <=> a[1][:time] }.each { |k, v| puts(formata_trades(k, v)) }
|
122
|
+
end
|
123
|
+
|
124
|
+
# @return [String] texto transacoes ledger
|
125
|
+
def mostra_ledger
|
126
|
+
return unless ops[:v] && ledger.count.positive?
|
127
|
+
|
128
|
+
puts("\nledger data hora tipo moeda -------quantidade -------------custo")
|
129
|
+
ledger.sort { |a, b| b[1][:time] <=> a[1][:time] }.each { |k, v| puts(formata_ledger(k, v)) }
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
data/lib/cns/paymium.rb
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require('bigdecimal/util')
|
4
|
+
|
5
|
+
# @author Hernani Rodrigues Vaz
|
6
|
+
module Cns
|
7
|
+
# classe para processar saldos & transacoes ledger
|
8
|
+
class Paymium
|
9
|
+
# @return [Apius] API paymium
|
10
|
+
attr_reader :api
|
11
|
+
# @return [Array<Hash>] todos os dados bigquery
|
12
|
+
attr_reader :dbq
|
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 paymium base
|
24
|
+
@api = Apifr.new
|
25
|
+
@dbq = dad
|
26
|
+
@ops = pop
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Hash] dados exchange paymium - saldos & transacoes ledger
|
30
|
+
def exd
|
31
|
+
@exd ||= {
|
32
|
+
sl: api.account,
|
33
|
+
kl: api.ledger
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
# @return [Array<String>] lista txid de transacoes ledger
|
38
|
+
def kyl
|
39
|
+
@kyl ||= exd[:kl].map { |h| h[:account_operations].map { |o| o[:uuid] } }.flatten -
|
40
|
+
(ops[:t] ? [] : dbq[:nl].map { |e| e[:txid] })
|
41
|
+
end
|
42
|
+
|
43
|
+
# @return [Hash] transacoes ledger
|
44
|
+
def ledger
|
45
|
+
@ledger ||= exd[:kl].map { |h| h[:account_operations].select { |o| kyl.include?(o[:uuid]) } }.flatten
|
46
|
+
end
|
47
|
+
|
48
|
+
# @example (see Apifr#account)
|
49
|
+
# @param [Symbol] bqm symbol paymium da moeda
|
50
|
+
# @return [String] texto formatado saldos (paymium/bigquery) & iguais/ok/nok?
|
51
|
+
def formata_saldos(bqm)
|
52
|
+
b = dbq[:sl][bqm].to_d
|
53
|
+
t = exd[:sl]["balance_#{bqm}".to_sym].to_d
|
54
|
+
format(
|
55
|
+
'%<mo>-5.5s %<kr>21.9f %<bq>21.9f %<ok>3.3s',
|
56
|
+
mo: bqm.upcase,
|
57
|
+
kr: t,
|
58
|
+
bq: b,
|
59
|
+
ok: t == b ? 'OK' : 'NOK'
|
60
|
+
)
|
61
|
+
end
|
62
|
+
|
63
|
+
# @example (see Apifr#ledger)
|
64
|
+
# @param (see Bigquery#frl_val)
|
65
|
+
# @return [String] texto formatado transacao ledger
|
66
|
+
def formata_ledger(hlx)
|
67
|
+
format(
|
68
|
+
'%<ky>-18.18s %<dt>19.19s %<ty>-17.17s %<mo>-4.4s %<vl>18.7f',
|
69
|
+
ky: formata_uuid(hlx[:uuid], 18),
|
70
|
+
dt: Time.at(hlx[:created_at_int]),
|
71
|
+
ty: hlx[:name],
|
72
|
+
mo: hlx[:currency].upcase,
|
73
|
+
vl: hlx[:amount].to_d
|
74
|
+
)
|
75
|
+
end
|
76
|
+
|
77
|
+
# @example (see Apifr#ledger)
|
78
|
+
# @param [String] uid identificacor da ledger apifr
|
79
|
+
# @param [Integer] max chars a mostrar
|
80
|
+
# @return [String] texto formatado identificacor da ledger apifr
|
81
|
+
def formata_uuid(uid, max)
|
82
|
+
i = Integer(max / 2)
|
83
|
+
max < 7 ? 'erro' : "#{uid[0, i]}#{uid[-i..]}"
|
84
|
+
end
|
85
|
+
|
86
|
+
# @return [String] texto saldos & transacoes & ajuste dias
|
87
|
+
def mostra_resumo
|
88
|
+
puts("\nPAYMIUM\nmoeda saldo paymium saldo bigquery")
|
89
|
+
puts(formata_saldos(:btc))
|
90
|
+
puts(formata_saldos(:eur))
|
91
|
+
|
92
|
+
mostra_ledger
|
93
|
+
return unless ledger.count.positive?
|
94
|
+
|
95
|
+
puts("\nstring ajuste dias da ledger\n-h=#{kyl.map { |e| "#{e}:0" }.join(' ')}")
|
96
|
+
end
|
97
|
+
|
98
|
+
# @return [String] texto transacoes ledger
|
99
|
+
def mostra_ledger
|
100
|
+
return unless ops[:v] && ledger.count.positive?
|
101
|
+
|
102
|
+
puts("\nledger data hora tipo moeda -------quantidade")
|
103
|
+
ledger.sort { |a, b| b[:created_at_int] <=> a[:created_at_int] }.each { |o| puts(formata_ledger(o)) }
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
data/lib/cns/therock.rb
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require('bigdecimal/util')
|
4
|
+
|
5
|
+
# @author Hernani Rodrigues Vaz
|
6
|
+
module Cns
|
7
|
+
# classe para processar saldos & transacoes ledger
|
8
|
+
class TheRock
|
9
|
+
# @return [Apius] API therock
|
10
|
+
attr_reader :api
|
11
|
+
# @return [Array<Hash>] todos os dados bigquery
|
12
|
+
attr_reader :dbq
|
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 therock base
|
24
|
+
@api = Apimt.new
|
25
|
+
@dbq = dad
|
26
|
+
@ops = pop
|
27
|
+
end
|
28
|
+
|
29
|
+
# @return [Hash] dados exchange therock - saldos & transacoes ledger
|
30
|
+
def exd
|
31
|
+
@exd ||= {
|
32
|
+
sl: api.account,
|
33
|
+
kl: api.ledger
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
# @return [Array<String>] lista txid de transacoes ledger
|
38
|
+
def kyl
|
39
|
+
@kyl ||= exd[:kl].map { |h| h[:id] } - (ops[:t] ? [] : dbq[:nl].map { |e| e[:txid] })
|
40
|
+
end
|
41
|
+
|
42
|
+
# @return [Hash] transacoes ledger
|
43
|
+
def ledger
|
44
|
+
@ledger ||= exd[:kl].select { |o| kyl.include?(o[:id]) }
|
45
|
+
end
|
46
|
+
|
47
|
+
# @example (see Apimt#account)
|
48
|
+
# @param [Hash] hsl saldo therock da moeda
|
49
|
+
# @return [String] texto formatado saldos (therock/bigquery) & iguais/ok/nok?
|
50
|
+
def formata_saldos(hsl)
|
51
|
+
b = dbq[:sl][hsl[:currency].downcase.to_sym].to_d
|
52
|
+
k = hsl[:balance].to_d
|
53
|
+
format(
|
54
|
+
'%<mo>-5.5s %<kr>21.9f %<bq>21.9f %<ok>3.3s',
|
55
|
+
mo: hsl[:currency].upcase,
|
56
|
+
kr: k,
|
57
|
+
bq: b,
|
58
|
+
ok: k == b ? 'OK' : 'NOK'
|
59
|
+
)
|
60
|
+
end
|
61
|
+
|
62
|
+
# @example (see Apimt#ledger)
|
63
|
+
# @param (see Bigquery#mtl_val1)
|
64
|
+
# @return [String] texto formatado transacao ledger
|
65
|
+
def formata_ledger(hlx)
|
66
|
+
format(
|
67
|
+
'%<ky>6i %<dt>19.19s %<ty>-27.27s %<mo>-4.4s %<vl>20.7f',
|
68
|
+
ky: hlx[:id],
|
69
|
+
dt: Time.parse(hlx[:date]),
|
70
|
+
ty: hlx[:type],
|
71
|
+
mo: hlx[:currency].upcase,
|
72
|
+
vl: hlx[:price].to_d
|
73
|
+
)
|
74
|
+
end
|
75
|
+
|
76
|
+
# @return [String] texto saldos & transacoes & ajuste dias
|
77
|
+
def mostra_resumo
|
78
|
+
puts("\nTHEROCK\nmoeda saldo therock saldo bigquery")
|
79
|
+
exd[:sl].each { |h| puts(formata_saldos(h)) }
|
80
|
+
|
81
|
+
mostra_ledger
|
82
|
+
return unless ledger.count.positive?
|
83
|
+
|
84
|
+
puts("\nstring ajuste dias da ledger\n-h=#{kyl.map { |e| "#{e}:0" }.join(' ')}")
|
85
|
+
end
|
86
|
+
|
87
|
+
# @return [String] texto transacoes ledger
|
88
|
+
def mostra_ledger
|
89
|
+
return unless ops[:v] && ledger.count.positive?
|
90
|
+
|
91
|
+
puts("\nledger data hora tipo moeda ---------quantidade")
|
92
|
+
ledger.sort { |a, b| b[:id] <=> a[:id] }.each { |o| puts(formata_ledger(o)) }
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|