Method: Pay::PaddleBilling::PaymentMethod.sync

Defined in:
app/models/pay/paddle_billing/payment_method.rb

.sync(pay_customer:, attributes:, try: 0, retries: 1) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'app/models/pay/paddle_billing/payment_method.rb', line 11

def self.sync(pay_customer:, attributes:, try: 0, retries: 1)
  details = attributes.method_details
  attrs = {
    payment_method_type: details.type.downcase
  }

  case details.type.downcase
  when "card"
    attrs[:brand] = details.card.type
    attrs[:last4] = details.card.last4
    attrs[:exp_month] = details.card.expiry_month
    attrs[:exp_year] = details.card.expiry_year
  end

  payment_method = pay_customer.payment_methods.find_or_initialize_by(processor_id: attributes.payment_method_id)
  payment_method.update!(attrs)
  payment_method
rescue ActiveRecord::RecordInvalid, ActiveRecord::RecordNotUnique
  try += 1
  if try <= retries
    sleep 0.1
    retry
  else
    raise
  end
end