Class: Tang::SaveCard

Inherits:
Object
  • Object
show all
Defined in:
app/services/tang/save_card.rb

Class Method Summary collapse

Class Method Details

.call(customer, token) ⇒ Object



3
4
5
6
7
8
9
10
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
# File 'app/services/tang/save_card.rb', line 3

def self.call(customer, token)
  if customer.card.present?
    card = customer.card
  else
    card = Card.new(customer: customer)
  end

  begin
    if customer.stripe_id.present?
      cu = Stripe::Customer.retrieve(customer.stripe_id)
      cu.source = token
      cu.save
    else
      cu = Stripe::Customer.create(
        source: token,
        email: customer.email
      )
      customer.stripe_id = cu.id
      customer.save!
    end

    # Save the payment method
    stripe_card = Stripe::Customer.retrieve_source(
      cu.id,
      cu.default_source,
    )
    card.update_from_stripe(stripe_card)

  rescue Stripe::StripeError => e
    card.errors.add(:base, :invalid, message: e.message)
  end
  return card
end