Class: Effective::Customer

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/effective/customer.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#stripe_customerObject

Returns the value of attribute stripe_customer.



5
6
7
# File 'app/models/effective/customer.rb', line 5

def stripe_customer
  @stripe_customer
end

Class Method Details

.for_user(user) ⇒ Object



23
24
25
# File 'app/models/effective/customer.rb', line 23

def self.for_user(user)
  Effective::Customer.where(user: user).first_or_initialize
end

Instance Method Details

#active?Boolean

Returns:

  • (Boolean)


69
70
71
# File 'app/models/effective/customer.rb', line 69

def active?
  subscriptions.present? && subscriptions.all? { |subscription| subscription.active? }
end

#create_stripe_customer!Object



35
36
37
38
39
40
41
42
43
44
45
# File 'app/models/effective/customer.rb', line 35

def create_stripe_customer!
  return if stripe_customer.present?
  raise('expected a user') unless user.present?

  Rails.logger.info "[STRIPE] create customer: #{user.email}"

  self.stripe_customer = Stripe::Customer.create(email: user.email, description: user.to_s, metadata: { user_id: user.id })
  self.stripe_customer_id = stripe_customer.id

  save!
end

#emailObject



31
32
33
# File 'app/models/effective/customer.rb', line 31

def email
  user.email if user
end

#past_due?Boolean

Returns:

  • (Boolean)


65
66
67
# File 'app/models/effective/customer.rb', line 65

def past_due?
  subscriptions.any? { |subscription| subscription.past_due? }
end

#payment_statusObject



73
74
75
76
77
78
79
80
81
82
83
# File 'app/models/effective/customer.rb', line 73

def payment_status
  if past_due?
    'We ran into an error processing your last payment. Please update or confirm your card details to continue.'
  elsif active?
    "Your payment is in good standing. Thanks so much for your support!"
  elsif active_card.blank?
    'No credit card on file. Please add a card.'
  else
    'Please update or confirm your card details to continue.'
  end.html_safe
end

#to_sObject



27
28
29
# File 'app/models/effective/customer.rb', line 27

def to_s
  user.to_s.presence || 'New Customer'
end

#token_required?Boolean

Returns:

  • (Boolean)


61
62
63
# File 'app/models/effective/customer.rb', line 61

def token_required?
  active_card.blank? || past_due?
end

#upcoming_invoiceObject



54
55
56
57
58
59
# File 'app/models/effective/customer.rb', line 54

def upcoming_invoice
  @upcoming_invoice ||= if stripe_customer_id.present?
    Rails.logger.info "[STRIPE] get upcoming invoice: #{stripe_customer_id}"
    ::Stripe::Invoice.upcoming(customer: stripe_customer_id) rescue nil
  end
end