Sha256: a4b28219ef5b178d2a2f34f4c79d951ea37b0904693deb95180c5a0f33a42bb7

Contents?: true

Size: 1.83 KB

Versions: 1

Compression:

Stored size: 1.83 KB

Contents

module Spree
  module PaymentProcessingDecorator
    def self.prepended(base)
      base.delegate :settle, to: :provider
    end

    def settle!
      handle_payment_preconditions { process_settle }
    end

    def gateway_action(source, action, success_state)
      protect_from_connection_error do
        response = payment_method.send(action, money.money.cents,
                                       source,
                                       gateway_options)
        success_state = set_proper_state(success_state, response, action)
        handle_response(response, success_state, :failure)
      end
    end

    private

    def process_settle
      started_processing!
      gateway_action(source, :settle, :started_processing)
    end

    def gateway_error(error)
      if error.is_a? ActiveMerchant::Billing::Response
        text = error.params['message'] || error.params['response_reason_text'] || error.message
      elsif error.is_a? ActiveMerchant::ConnectionError
        text = Spree.t(:unable_to_connect_to_gateway)
      elsif error.is_a? Braintree::ErrorResult
        text = error.message
      else
        text = error.to_s
      end
      logger.error(Spree.t(:gateway_error))
      logger.error("  #{error.to_yaml}")
      raise Spree::Core::GatewayError, text
    end

    def set_proper_state(current_state, response, action)
      return current_state unless action.eql?(:purchase)
      return current_state unless source.is_a?(Spree::BraintreeCheckout)
      utils = Spree::Gateway::BraintreeVzeroBase::Utils.new(payment_method, order)
      state = utils.map_payment_status(response.try(:transaction).try(:status))

      case state
      when 'completed'
        'complete'
      when 'pending'
        'pend'
      else
        current_state
      end
    end
  end
end

::Spree::Payment.prepend(Spree::PaymentProcessingDecorator)

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
spree_braintree_vzero-3.5.1 app/models/spree/payment_processing_decorator.rb