Sha256: 4fa18f88250e2a89187ebad2e56967b2658a498c98c20a61872b8fa46662938c

Contents?: true

Size: 1.48 KB

Versions: 5

Compression:

Stored size: 1.48 KB

Contents

class OrderTransaction < ActiveRecord::Base
  belongs_to :order
  serialize :params

  class << self
    def authorize(amount, credit_card, options = {})
      process('authorization', amount) do |gw|
        gw.authorize(amount, credit_card, options)
      end
    end

    def capture(amount, authorization, options = {})
      process('capture', amount) do |gw|
        gw.capture(amount, authorization, options)
      end
    end

    private

    def process(action, amount = nil)
      result = OrderTransaction.new
      result.amount = amount
      result.action = action

      begin
        # TODO: is eval appropriate in this instance?  I tried Object.const_get but had problems.
        # OPTIMIZE: this is a bit crufty
        am_setting = Forge::Settings[Rails.env.to_sym][:active_merchant]
        gateway_class = eval("ActiveMerchant::Billing::" + am_setting[:gateway])
        gateway = gateway_class.new(:login => am_setting[:login], :password => am_setting[:password])
        response = yield gateway

        result.success   = response.success?
        result.reference = response.authorization
        result.message   = response.message
        result.params    = response.params
        result.test      = response.test?
      rescue ActiveMerchant::ActiveMerchantError => e
        result.success   = false
        result.reference = nil
        result.message   = e.message
        result.params    = {}
        result.test      = gateway.test?
      end

      result
    end
  end

end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
forge-cli-0.0.10 lib/forge/app/models/order_transaction.rb
forge-cli-0.0.9 lib/forge/app/models/order_transaction.rb
forge-cli-0.0.8 lib/forge/app/models/order_transaction.rb
forge-cli-0.0.7 lib/forge/app/models/order_transaction.rb
forge-cli-0.0.6 lib/forge/app/models/order_transaction.rb