lib/bankscrap/cli.rb in bankscrap-2.0.6 vs lib/bankscrap/cli.rb in bankscrap-2.1.0
- old
+ new
@@ -15,25 +15,59 @@
option :iban, default: nil
option :format
option :output
end
- desc 'balance BankName', "get accounts' balance"
+ desc 'balance BankName', "get account's balance"
shared_options
def balance(bank)
assign_shared_options
initialize_client_for(bank)
- @client.accounts.each do |account|
- say "Account: #{account.description} (#{account.iban})", :cyan
- say "Balance: #{account.balance.format}", :green
- if account.balance != account.available_balance
- say "Available: #{account.available_balance.format}", :yellow
+ if options[:format]
+ export_to_file(nil, @client.accounts, options[:format], options[:output])
+ else
+ @client.accounts.each do |account|
+ STDERR.puts "Account: #{account.description} (#{account.iban})".cyan
+ STDERR.puts "Balance: #{account.balance.format}".green
+ if account.balance != account.available_balance
+ STDERR.puts "Available: #{account.available_balance.format}".yellow
+ end
end
end
end
+ desc 'cards BankName', "get account's credit cards"
+ shared_options
+ def cards(bank)
+ assign_shared_options
+ initialize_client_for(bank)
+
+ if options[:format]
+ export_to_file(nil, @client.cards, options[:format], options[:output])
+ else
+ @client.cards.each do |card|
+ STDERR.puts "Card: #{card.name} #{card.description} #{card.amount.format}".green
+ end
+ end
+ end
+
+ desc 'loans BankName', "get account's loans"
+ shared_options
+ def loans(bank)
+ assign_shared_options
+ initialize_client_for(bank)
+
+ if options[:format]
+ export_to_file(nil, @client.loans, options[:format], options[:output])
+ else
+ @client.loans.each do |loan|
+ STDERR.puts "Loan: #{loan.name} #{loan.description} #{loan.amount.format}".green
+ end
+ end
+ end
+
desc 'transactions BankName', "get account's transactions"
shared_options
options from: :string, to: :string
def transactions(bank)
assign_shared_options
@@ -45,36 +79,38 @@
account = @iban ? @client.account_with_iban(@iban) : @client.accounts.first
if start_date && end_date
if start_date > end_date
- say 'From date must be lower than to date', :red
+ STDERR.puts 'From date must be lower than to date'.red
exit
end
transactions = account.fetch_transactions(start_date: start_date, end_date: end_date)
else
transactions = account.transactions
end
- export_to_file(transactions, options[:format], options[:output]) if options[:format]
-
- say "Transactions for: #{account.description} (#{account.iban})", :cyan
- print_transactions_header
- transactions.each { |t| print_transaction(t) }
+ if options[:format]
+ export_to_file(account, transactions, options[:format], options[:output])
+ else
+ STDERR.puts "Transactions for: #{account.description} (#{account.iban})".cyan
+ print_transactions_header
+ transactions.each { |t| print_transaction(t) }
+ end
end
register(Bankscrap::AdapterGenerator, 'generate_adapter', 'generate_adapter MyBankName',
'generates a template for a new Bankscrap bank adapter')
private
def assign_shared_options
- @credentials = options[:credentials]
- @iban = options[:iban]
- @log = options[:log]
- @debug = options[:debug]
+ @credentials = options[:credentials]
+ @iban = options[:iban]
+ @log = options[:log]
+ @debug = options[:debug]
end
def initialize_client_for(bank_name)
bank_class = find_bank_class_for(bank_name)
Bankscrap.log = @log
@@ -84,48 +120,51 @@
def find_bank_class_for(bank_name)
require "bankscrap-#{bank_name.underscore.dasherize}"
Object.const_get("Bankscrap::#{bank_name}::Bank")
rescue LoadError
- raise ArgumentError.new('Invalid bank name.')
+ raise ArgumentError, 'Invalid bank name.'
rescue NameError
- raise ArgumentError.new("Invalid bank name. Did you mean \"#{bank_name.upcase}\"?")
+ raise ArgumentError, "Invalid bank name. Did you mean \"#{bank_name.upcase}\"?"
end
def parse_date(string)
Date.strptime(string, '%d-%m-%Y')
rescue ArgumentError
- say 'Invalid date format. Correct format d-m-Y (eg: 31-12-2016)', :red
+ STDERR.puts 'Invalid date format. Correct format d-m-Y (eg: 31-12-2016)'.red
exit
end
- def export_to_file(data, format, path)
- exporter(format, path).write_to_file(data)
+ def export_to_file(account, data, format, path)
+ exporter(account, format).write_to_file(data, path)
end
- def exporter(format, path)
+ def exporter(account, format)
case format.downcase
- when 'csv' then BankScrap::Exporter::Csv.new(path)
+ when 'csv'
+ BankScrap::Exporter::Csv.new(account)
+ when 'json'
+ BankScrap::Exporter::Json.new(account)
else
- say 'Sorry, file format not supported.', :red
+ STDERR.puts 'Sorry, file format not supported.'.red
exit
end
end
def print_transactions_header
- say "\n"
- say 'DATE'.ljust(13)
- say 'DESCRIPTION'.ljust(50) + SPACER
- say 'AMOUNT'.rjust(15) + SPACER
- say 'BALANCE'.rjust(15)
- say '-' * 99
+ STDERR.puts "\n"
+ STDERR.puts 'DATE'.ljust(13)
+ STDERR.puts 'DESCRIPTION'.ljust(50) + SPACER
+ STDERR.puts 'AMOUNT'.rjust(15) + SPACER
+ STDERR.puts 'BALANCE'.rjust(15)
+ STDERR.puts '-' * 99
end
def print_transaction(transaction)
color = (transaction.amount.to_i > 0 ? :green : :red)
- say transaction.effective_date.strftime('%d/%m/%Y') + SPACER
- say Utils::CliString.new(transaction.description).squish.truncate(50).ljust(50) + SPACER, color
- say Utils::CliString.new(transaction.amount.format).rjust(15) + SPACER, color
- say Utils::CliString.new(transaction.balance.format).rjust(15)
+ STDERR.puts transaction.effective_date.strftime('%d/%m/%Y') + SPACER
+ STDERR.puts Utils::CliString.new(transaction.description).squish.truncate(50).ljust(50) + SPACER.colorize(color)
+ STDERR.puts Utils::CliString.new(transaction.amount.format).rjust(15) + SPACER.colorize(color)
+ STDERR.puts Utils::CliString.new(transaction.balance.format).rjust(15)
end
end
end