class QuestradeApi::REST::Balance

@author Bruno Meira <goesmeira@gmail.com>

Attributes

account_id[RW]

Public Class Methods

endpoint(account_id) click to toggle source
# File lib/questrade_api/rest/balance.rb, line 42
def self.endpoint(account_id)
  "#{BASE_ENDPOINT}/accounts/#{account_id}/balances"
end
fetch(authorization, account_number) click to toggle source

Fetch account balances

@param authorization [QuestradeApi::Authorization] with the authorized access_token and url. @param account_number [String] with the account the activities will be fetched @return [OpenStruct(per_currency_balances, combined_balances, sod_per_currency_balances, sod_combined_balances)] If call succeeds. Each method returns an array of QuestradeApi::REST::Balance @return [Faraday::Response] if call fails.

Calls superclass method QuestradeApi::REST::Base#fetch
# File lib/questrade_api/rest/balance.rb, line 23
def self.fetch(authorization, account_number)
  response = super(access_token: authorization.access_token,
                   endpoint: endpoint(account_number),
                   url: authorization.url)

  result = OpenStruct.new(per_currency_balances: [],
                          combined_balances: [],
                          sod_per_currency_balances: [],
                          sod_combined_balances: [])

  if response.status == 200
    parse_balances(account_number, response.body).each do |key, value|
      result.send("#{key}=", value)
    end
  end

  result
end
new(params) click to toggle source
# File lib/questrade_api/rest/balance.rb, line 9
def initialize(params)
  @account_id = params[:account_id]

  @raw_body = params[:data]
  build_data(params[:data]) if @raw_body
end

Private Class Methods

parse_balances(account_number, body) click to toggle source
# File lib/questrade_api/rest/balance.rb, line 46
def self.parse_balances(account_number, body)
  raw = JSON.parse(body)
  balances = {
    per_currency_balances: [],
    combined_balances: [],
    sod_per_currency_balances: [],
    sod_combined_balances: []
  }

  raw['perCurrencyBalances'].each do |balance|
    balances[:per_currency_balances] << new(account_id: account_number,
                                            data: balance)
  end

  raw['combinedBalances'].each do |balance|
    balances[:combined_balances] << new(account_id: account_number,
                                        data: balance)
  end

  raw['sodPerCurrencyBalances'].each do |balance|
    balances[:sod_per_currency_balances] << new(account_id: account_number,
                                                data: balance)
  end

  raw['sodCombinedBalances'].each do |balance|
    balances[:sod_combined_balances] << new(account_id: account_number,
                                            data: balance)
  end

  balances
end