class StarlingTerminal::Statement

Builds a Starling statement for output to the terminal

Constants

TRANSACTIONS_TABLE_HEADINGS

The headings to be displayed in our table of transactions

Attributes

access_token[R]
output[R]

Public Class Methods

new(access_token: ENV['STARLING_ACCESS_TOKEN']) click to toggle source

@param access_token [String] The Starling Bank API access token @raise [MissingAccessTokenError] if no access token was provided, or it is `nil`

# File lib/starling_terminal/statement.rb, line 14
def initialize(access_token: ENV['STARLING_ACCESS_TOKEN'])
  raise MissingAccessTokenError unless access_token
  @access_token = access_token
end

Public Instance Methods

generate(output: STDOUT) click to toggle source

Outputs a complete statement to the provided output @param output [#puts] The output to print the statement to @raise [InvalidAccessTokenError] if the Starling Bank API access token provided is

invalid

@raise [Starling::Errors::ApiError] if something else goes wrong with the Starling

Bank API

@return [#puts] the output

# File lib/starling_terminal/statement.rb, line 26
def generate(output: STDOUT)
  output.puts balance_line
  output.puts pending_transactions_line
  output.puts available_to_spend_line
  output.puts "#{transactions_table}\n\n"
  output
rescue Starling::Errors::ApiError => error
  raise InvalidAccessTokenError if [401, 403].include?(error.status)
  raise
end

Private Instance Methods

account_balance() click to toggle source
# File lib/starling_terminal/statement.rb, line 80
def account_balance
  @account_balance ||= starling.account_balance.get
end
available_to_spend_line() click to toggle source
# File lib/starling_terminal/statement.rb, line 58
def available_to_spend_line
  available_to_spend = Utils.float_to_currency(
    account_balance.available_to_spend,
    currency: account_balance.currency
  )

  "Available to spend: #{available_to_spend}\n\n"
end
balance_line() click to toggle source
# File lib/starling_terminal/statement.rb, line 41
def balance_line
  amount = account_balance.amount
  balance_colour = Utils.colour_for_amount(amount)
  balance = Utils.float_to_currency(amount, currency: account_balance.currency)

  "\n\nBalance: #{balance}".colorize(balance_colour)
end
pending_transactions_line() click to toggle source
# File lib/starling_terminal/statement.rb, line 49
def pending_transactions_line
  pending_transactions = Utils.float_to_currency(
    account_balance.pending_transactions,
    currency: account_balance.currency
  )

  "Pending: #{pending_transactions}"
end
starling() click to toggle source
# File lib/starling_terminal/statement.rb, line 76
def starling
  @starling ||= Starling::Client.new(access_token: access_token)
end
transaction_rows() click to toggle source
# File lib/starling_terminal/statement.rb, line 72
def transaction_rows
  @transaction_rows = transactions.map { |tx| TransactionRow.present(tx) }
end
transactions() click to toggle source
# File lib/starling_terminal/statement.rb, line 84
def transactions
  @transactions ||= starling.transactions.list
end
transactions_table() click to toggle source
# File lib/starling_terminal/statement.rb, line 67
def transactions_table
  Terminal::Table.new(headings: TRANSACTIONS_TABLE_HEADINGS,
                      rows: transaction_rows)
end