namespace :pay do
namespace :payment_methods do desc "Sync default payment methods for Pay::Customers" task sync_default: :environment do Pay::Customer.find_each do |pay_customer| sync_default_payment_method(pay_customer) end end end
end
def sync_default_payment_method(pay_customer, retries: 2)
try = 0 begin puts "Syncing Pay::Customer ##{pay_customer.id} attempt #{try + 1}: #{pay_customer.processor.titleize} #{pay_customer.processor_id}" case pay_customer.processor when "braintree" payment_method = pay_customer.customer.payment_methods.find(&:default?) Pay::Braintree::PaymentMethod.sync(payment_method.token, object: payment_method) if payment_method when "stripe" payment_method_id = pay_customer.customer.invoice_settings.default_payment_method Pay::Stripe::PaymentMethod.sync(payment_method_id) if payment_method_id when "paddle" Pay::Paddle::PaymentMethod.sync(pay_customer) end rescue sleep 0.5 try += 1 try <= retries ? retry : raise end
end