Sha256: 629a657d2554a86ca735150a7339715913cdf8a52f8df829d2ab8b112e09d49d

Contents?: true

Size: 1015 Bytes

Versions: 62

Compression:

Stored size: 1015 Bytes

Contents

module Workarea
  class Payment
    class SavedCreditCard
      include ApplicationDocument
      include Payment::CreditCard

      field :first_name, type: String
      field :last_name, type: String
      field :default, type: Boolean, default: false

      belongs_to :profile, class_name: 'Workarea::Payment::Profile', index: true
      index({ profile_id: 1, created_at: 1 })

      before_validation :ensure_tokenized
      after_save :update_default

      validate :token_set

      private

      def ensure_tokenized
        return if tokenized?
        StoreCreditCard.new(self).perform! if !persisted? || card_change?
      end

      def token_set
        return true if token.present?

        errors.add(:base, I18n.t('workarea.payment.store_credit_card_failure'))
      end

      def update_default
        return unless default?

        profile
          .credit_cards
          .where(default: true)
          .excludes(id: id)
          .update_all(default: false)
      end
    end
  end
end

Version data entries

62 entries across 62 versions & 1 rubygems

Version Path
workarea-core-3.4.13 app/models/workarea/payment/saved_credit_card.rb
workarea-core-3.4.12 app/models/workarea/payment/saved_credit_card.rb