sosedoff/arrow_payments

View on GitHub
lib/arrow_payments/client/transactions.rb

Summary

Maintainability
A
0 mins
Test Coverage
module ArrowPayments
  module Transactions
    # Get transaction details
    # @param [String] transaction ID
    # @return [Transaction] transactions instance
    def transaction(id)
      Transaction.new(get("/transaction/#{id}"))
    rescue NotFound
      nil
    end

    alias :get_transaction :transaction

    # Get customer transactions by status
    # @param [String] customer ID
    # @param [String] transaction status
    # @return [Array<Transaction>]
    def transactions(customer_id, status='NotSettled')
      unless Transaction::STATUSES.include?(status)
        raise ArgumentError, "Invalid status: #{status}"
      end

      resp = get("/customer/#{customer_id}/Transactions/#{status}")
      resp['Transactions'].map { |t| Transaction.new(t) }
    end

    alias :get_transactions :transactions

    # Create a new transaction
    # @return [Transaction]
    def create_transaction(transaction)
      if transaction.kind_of?(Hash)
        transaction = ArrowPayments::Transaction.new(transaction)
      end

      # Set default transaction attributes
      transaction.transaction_source = 'API'

      params = transaction.to_source_hash
      params['Amount'] = params['TotalAmount']

      resp = post('/transaction/add', params)

      if resp['Success'] == true
        ArrowPayments::Transaction.new(resp)
      else
        raise ArrowPayments::Error, resp['Message']
      end
    end

    # Capture an unsettled transaction
    # @param [String] transaction ID
    # @param [Integer] amount, less than or equal to original amount
    # @return [Boolean]
    def capture_transaction(id, amount)
      resp = post('/transaction/capture', 'TransactionId' => id, 'Amount' => amount)
      resp['Success'] == true
    end

    # Void a previously submitted transaction that have not yet settled
    # @param [String] transaction ID
    # @return [Boolean]
    def void_transaction(id)
      resp = post('/transaction/void', 'TransactionId' => id)
      resp['Success'] == true
    end
  end
end