Sha256: 464409754720d24fcce3933fab614ab10b11a370c35a6b2320dc307db2f23663

Contents?: true

Size: 1.15 KB

Versions: 1

Compression:

Stored size: 1.15 KB

Contents

require 'active_merchant'

class GatewayNotification < ActiveRecord::Base
  class EmptyChargeIdError < ArgumentError;end

  belongs_to :charge

  serialize :params

  before_create :set_charge_id

  attr_accessor :raw_post, :logger

  def acknowledge
    res = adapter.acknowledge

    if charge_id.nil? && adapter.item_id
      update_column(:charge_id, adapter.item_id)
    end

    res
  end

  def complete?
    adapter.complete?
  end

  def need_response?
    adapter.respond_to?(:success_response)
  end

  def success_response
    adapter.respond_to?(:success_response) ? adapter.success_response : "OK"
  end

  def approve
    raise EmptyChargeIdError unless charge_id

    logger.info "real amount = #{real_amount}"
    charge.approve(real_amount) unless charge.ok?
  end

  def real_amount
    adapter.gross
  end

  private

  def adapter
    @adapter ||= "ActiveMerchant::Billing::Integrations::#{gateway.classify}::Notification".classify.constantize.new(raw_post, Supercharged::Helpers.integrations_options(gateway))
  rescue NameError
    raise "Unknown integration '#{gateway}'"
  end

  def set_charge_id
    self.charge_id ||= adapter.item_id
    true
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
supercharged-2.2.0 app/models/gateway_notification.rb