Class: F2ynab::Webhooks::Starling

Inherits:
Object
  • Object
show all
Defined in:
lib/f2ynab/webhooks/starling.rb

Constant Summary collapse

WEBHOOKS_TYPES =
%w[
  TRANSACTION_AUTH_DECLINED
  TRANSACTION_AUTH_PARTIAL_REVERSAL
  TRANSACTION_AUTH_FULL_REVERSAL
  TRANSACTION_CARD
  TRANSACTION_CASH_WITHDRAWAL
  TRANSACTION_DECLINED_INSUFFICIENT_FUNDS
  TRANSACTION_DIRECT_CREDIT
  TRANSACTION_DIRECT_DEBIT
  TRANSACTION_DIRECT_DEBIT_INSUFFICIENT_FUNDS
  TRANSACTION_DIRECT_DEBIT_DISPUTE
  TRANSACTION_DECLINED_INSUFFICIENT_FUNDS
  TRANSACTION_FASTER_PAYMENT_IN
  TRANSACTION_FASTER_PAYMENT_OUT
  TRANSACTION_FASTER_PAYMENT_REVERSAL
  TRANSACTION_INTEREST_PAYMENT
  TRANSACTION_INTERNAL_TRANSFER
  TRANSACTION_INTEREST_WAIVED_DEPOSIT
  TRANSACTION_NOSTRO_DEPOSIT
  TRANSACTION_MOBILE_WALLET 
  TRANSACTION_ON_US_PAYMENT_OUT
  TRANSACTION_ON_US_PAYMENT_IN
  SCHEDULED_PAYMENT_CANCELLED
  SCHEDULED_PAYMENT_INSUFFICIENT_FUNDS
  TRANSACTION_STRIPE_FUNDING
  INTEREST_CHARGE
]

Instance Method Summary collapse

Constructor Details

#initialize(ynab_client, webhook, skip_foreign_currency_flag: false) ⇒ Starling

Returns a new instance of Starling.



32
33
34
35
36
# File 'lib/f2ynab/webhooks/starling.rb', line 32

def initialize(ynab_client, webhook, skip_foreign_currency_flag: false)
  @webhook = webhook
  @ynab_client = ynab_client
  @skip_foreign_currency_flag = skip_foreign_currency_flag
end

Instance Method Details

#importObject



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/f2ynab/webhooks/starling.rb', line 38

def import
  return { warning: :unsupported_type } unless @webhook[:webhookType].in?(WEBHOOKS_TYPES)

  payee_name = @webhook[:content][:counterParty]
  amount = (@webhook[:content][:amount].to_f * 1000).to_i

  # Direct Debits need to be swapped to negative
  amount *= -1 if amount.positive? && @webhook[:webhookType] == 'TRANSACTION_DIRECT_DEBIT'

  description = @webhook[:content][:forCustomer].to_s
  flag = nil

  foreign_transaction = @webhook[:content][:sourceCurrency] != 'GBP'
  if foreign_transaction && !@skip_foreign_currency_flag
    flag = 'orange'
  end

  ::F2ynab::YNAB::TransactionCreator.new(
    @ynab_client,
    id: "S:#{@webhook[:content][:transactionUid]}",
    date: Time.parse(@webhook[:timestamp]).to_date,
    amount: amount,
    payee_name: payee_name,
    description: description.strip,
    cleared: !foreign_transaction,
    flag: flag,
  ).create
end