Sha256: 06e5b6fd06788f339eebe04a01cc4c67f4ebf03d9639c7ed499da6cdb75a90cd

Contents?: true

Size: 1.12 KB

Versions: 3

Compression:

Stored size: 1.12 KB

Contents

module Moneytree
  class PaymentGateway < ApplicationRecord
    include Moneytree::Account

    belongs_to :account, polymorphic: true

    enum psp: Moneytree::PSPS
    serialize :psp_credentials
    # encrypts :psp_credentials
    # FIXME: enable https://github.com/ankane/lockbox
    delegate :oauth_link, :scope_correct?, to: :payment_provider

    # has_many :orders
    # has_many :transactions
    # has_many :customers
    # has_many :cards

    def oauth_callback(params)
      update! psp_credentials: payment_provider.get_access_token(params)
    end

    def psp_connected?
      psp.present? && psp_credentials.present?
    end

    def needs_oauth?
      !psp_connected? || !scope_correct?
    end

    def scope_correct?
      psp_credentials[:scope] == payment_provider.scope
    end

    def charge; end

    def refund; end

    private

    def payment_provider
      @payment_provider ||=
        case psp
        when 'stripe'
          Moneytree::PaymentProvider::Stripe.new(self)
        # when 'square'
        #   Moneytree::PaymentProvider::Square.new(self)
        else
          raise 'BOOM'
        end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
moneytree-rails-0.1.3 app/models/moneytree/payment_gateway.rb
moneytree-rails-0.1.2 app/models/moneytree/payment_gateway.rb
moneytree-rails-0.1.1 app/models/moneytree/payment_gateway.rb