class BankApi::Clients::BaseClient

Public Class Methods

new(config = BankApi::Configuration.new) click to toggle source
# File lib/bank_api/clients/base_client.rb, line 11
def initialize(config = BankApi::Configuration.new)
  @days_to_check = config.days_to_check
end

Public Instance Methods

batch_transfers(transfers_data) click to toggle source
# File lib/bank_api/clients/base_client.rb, line 37
def batch_transfers(transfers_data)
  validate_credentials
  transfers_data.each do |transfer_data|
    validate_transfer_missing_data(transfer_data)
    validate_transfer_valid_data(transfer_data)
  end
  execute_batch_transfers(transfers_data)
end
get_account_balance(options) click to toggle source
# File lib/bank_api/clients/base_client.rb, line 20
def get_account_balance(options)
  validate_credentials
  get_balance(options)
end
get_recent_deposits(options = {}) click to toggle source
# File lib/bank_api/clients/base_client.rb, line 15
def get_recent_deposits(options = {})
  validate_credentials
  parse_deposit_entries(get_deposits(options))
end
get_recent_withdrawals() click to toggle source
# File lib/bank_api/clients/base_client.rb, line 25
def get_recent_withdrawals
  validate_credentials
  parse_withdrawal_entries(get_withdrawals)
end
transfer(transfer_data) click to toggle source
# File lib/bank_api/clients/base_client.rb, line 30
def transfer(transfer_data)
  validate_credentials
  validate_transfer_missing_data(transfer_data)
  validate_transfer_valid_data(transfer_data)
  execute_transfer(transfer_data)
end

Private Instance Methods

bank_name() click to toggle source
# File lib/bank_api/clients/base_client.rb, line 48
def bank_name
  raise NotImplementedError
end
browser() click to toggle source
# File lib/bank_api/clients/base_client.rb, line 92
def browser
  @browser ||= Pincers.for_webdriver(driver, wait_timeout: 35.0)
end
driver(width = 1024, heigth = 768) click to toggle source
# File lib/bank_api/clients/base_client.rb, line 100
def driver(width = 1024, heigth = 768)
  chrome_path = ENV.fetch('GOOGLE_CHROME_BIN_PATH', nil)
  return :chrome unless chrome_path

  chrome_opts = {
    "chromeOptions" => {
      "binary" => chrome_path
    }
  }

  opts = {
    desired_capabilities: Selenium::WebDriver::Remote::Capabilities.chrome(chrome_opts),
    args: ['--no-sandbox', '--browsertime.xvfb']
  }

  d = Selenium::WebDriver.for(:chrome, opts)
  d.manage.window.size = Selenium::WebDriver::Dimension.new(width, heigth)
  d
end
execute_batch_transfers(_transfers_data) click to toggle source
# File lib/bank_api/clients/base_client.rb, line 80
def execute_batch_transfers(_transfers_data)
  raise NotImplementedError
end
execute_transfer(_transfer_data) click to toggle source
# File lib/bank_api/clients/base_client.rb, line 76
def execute_transfer(_transfer_data)
  raise NotImplementedError
end
get_balance(_options = {}) click to toggle source
# File lib/bank_api/clients/base_client.rb, line 60
def get_balance(_options = {})
  raise NotImplementedError
end
get_deposits(_options = {}) click to toggle source
# File lib/bank_api/clients/base_client.rb, line 56
def get_deposits(_options = {})
  raise NotImplementedError
end
get_withdrawals() click to toggle source
# File lib/bank_api/clients/base_client.rb, line 64
def get_withdrawals
  raise NotImplementedError
end
goto_frame(query: nil, should_reset: true) click to toggle source
# File lib/bank_api/clients/base_client.rb, line 133
def goto_frame(query: nil, should_reset: true)
  browser.goto frame: :top if should_reset
  frame = wait(query) if query
  browser.goto(frame: frame)
end
parse_deposit_entries(entries) click to toggle source
# File lib/bank_api/clients/base_client.rb, line 139
def parse_deposit_entries(entries)
  deposit_entries = entries.map do |entry|
    BankApi::Values::DepositEntry.new(
      entry[:amount],
      entry[:date],
      entry[:time],
      entry[:rut],
      bank_name,
      entry[:client]
    )
  end
  BankApi::SignDeposits.sign(deposit_entries)
end
parse_withdrawal_entries(entries) click to toggle source
# File lib/bank_api/clients/base_client.rb, line 153
def parse_withdrawal_entries(entries)
  entries.map do |entry|
    BankApi::Values::WithdrawalEntry.new(
      entry[:amount],
      entry[:date],
      entry[:time],
      entry[:rut],
      entry[:client],
      entry[:account_number],
      entry[:account_bank],
      entry[:trx_id],
      bank_name
    )
  end
end
selenium_browser() click to toggle source
# File lib/bank_api/clients/base_client.rb, line 96
def selenium_browser
  @browser.document
end
validate_credentials() click to toggle source
# File lib/bank_api/clients/base_client.rb, line 52
def validate_credentials
  raise NotImplementedError
end
validate_transfer_missing_data(_transfer_data) click to toggle source
# File lib/bank_api/clients/base_client.rb, line 68
def validate_transfer_missing_data(_transfer_data)
  raise NotImplementedError
end
validate_transfer_valid_data(_transfer_data) click to toggle source
# File lib/bank_api/clients/base_client.rb, line 72
def validate_transfer_valid_data(_transfer_data)
  raise NotImplementedError
end
verifier_digit(rut) click to toggle source
# File lib/bank_api/clients/base_client.rb, line 88
def verifier_digit(rut)
  rut.split("-")[1]
end
wait(query) { |: search.any?| ... } click to toggle source
# File lib/bank_api/clients/base_client.rb, line 120
def wait(query)
  count = 0
  timeout = browser.config[:wait_timeout]
  interval = browser.config[:wait_interval]
  fulfilled = false
  while !fulfilled && count < timeout
    fulfilled = block_given? ? yield : browser.search(query).any?
    sleep interval
    count += interval
  end
  browser.search(query)
end
without_verifier_digit_or_separators(rut) click to toggle source
# File lib/bank_api/clients/base_client.rb, line 84
def without_verifier_digit_or_separators(rut)
  rut.split("-")[0].delete('.')
end