class CoinSync::BalanceTask
Public Class Methods
new(config)
click to toggle source
# File lib/coinsync/balance_task.rb, line 7 def initialize(config) @config = config @formatter = Formatter.new(config) end
Public Instance Methods
run(selected = nil, except = nil)
click to toggle source
# 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