class CashOut::Connect::Transfer::Create

Public Instance Methods

execute() click to toggle source
# File lib/cash_out/connect/transfer/create.rb, line 8
def execute
  initiate_transfer
end

Private Instance Methods

initiate_transfer() click to toggle source
# File lib/cash_out/connect/transfer/create.rb, line 14
def initiate_transfer
  Stripe::Transfer.create(*params)
rescue *STRIPE_ERRORS => e
  errors.add(:stripe, e.to_s)
  e.json_body
end
negative_payout_params() click to toggle source
# File lib/cash_out/connect/transfer/create.rb, line 26
def negative_payout_params
  # Makes a transfer from the payee to the platform account for amount owed
  # https://stripe.com/docs/connect/account-debits#transferring-from-a-connected-account
  [
    {
      amount: amount_to_payout.abs,
      currency: "usd",
      description: "",
      destination: platform_stripe_account.id
    },
    {
      stripe_account: payee.stripe_id
    }
  ]
end
params() click to toggle source
# File lib/cash_out/connect/transfer/create.rb, line 21
def params
  # Stripe does not allow negative transfers, so we must change the params accordingly
  amount_to_payout.positive? ? positive_payout_params : negative_payout_params
end
platform_stripe_account() click to toggle source
# File lib/cash_out/connect/transfer/create.rb, line 59
def platform_stripe_account
  # Calling retrieve without a param retrieves the platform account
  # In test mode, create charges with 4000 0000 0000 0077 to add funds
  # https://stripe.com/docs/testing#cards-responses
  @platform_stripe_account ||= Stripe::Account.retrieve
end
positive_payout_params() click to toggle source
# File lib/cash_out/connect/transfer/create.rb, line 42
def positive_payout_params
  # Only runs when payout is positive but payout amount > charges
  # Makes a transfer from platform account to payee
  # Platform Stripe Account balance MUST be greater than transfer amount
  [
    {
      amount: amount_to_payout,
      currency: "usd",
      description: "",
      destination: payee.stripe_id
    },
    {
      stripe_account: platform_stripe_account.id,
    }
  ]
end