12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# File 'lib/coinsync/balance_task.rb', line 12
def run(selected = nil, except = nil)
balances = {}
columns = []
rows = []
@config.filtered_sources(selected, except).each do |key, source|
importer = source.importer
if importer.respond_to?(:can_import?)
if importer.can_import?(:balances)
print "[#{key}] Importing balances... "
columns << key
importer.import_balances.each do |balance|
balances[balance.currency] ||= {}
balances[balance.currency][key] = balance
balances[balance.currency][nil] ||= Balance.new(balance.currency)
balances[balance.currency][nil] += balance
end
puts "√"
else
puts "[#{key}] Skipping import"
end
end
end
columns.sort!
balances.keys.sort.each do |coin|
row = [coin.code, '|']
row += columns.map { |e|
available = balances[coin][e]&.available
locked = balances[coin][e]&.locked
available ? @formatter.format_crypto(available) + (locked > 0 ? ' (+)' : '') : ''
}
row << '|'
row << @formatter.format_crypto(balances[coin][nil].available)
rows << row
end
puts
printer = TablePrinter.new
printer.print_table(
['Coin', '|'] + columns + ['|', 'TOTAL'],
rows,
alignment: [:ljust, :center] + columns.map { |e| :rjust } + [:center, :rjust],
separator: ' '
)
end
|