Class: Pay::Subscription
- Inherits:
-
ApplicationRecord
- Object
- ApplicationRecord
- Pay::Subscription
- Defined in:
- app/models/pay/subscription.rb
Constant Summary collapse
- STATUSES =
%w[incomplete incomplete_expired trialing active past_due canceled unpaid paused]
Instance Method Summary collapse
- #active? ⇒ Boolean
- #canceled? ⇒ Boolean
- #cancelled? ⇒ Boolean
- #change_quantity(quantity) ⇒ Object
- #has_incomplete_payment? ⇒ Boolean
- #incomplete? ⇒ Boolean
- #latest_payment ⇒ Object
- #no_prorate ⇒ Object
- #on_trial? ⇒ Boolean
- #past_due? ⇒ Boolean
- #payment_processor ⇒ Object
- #payment_processor_for(name) ⇒ Object
- #processor_subscription(**options) ⇒ Object
- #resume ⇒ Object
- #skip_trial ⇒ Object
- #swap(plan) ⇒ Object
- #swap_and_invoice(plan) ⇒ Object
Methods inherited from ApplicationRecord
Instance Method Details
#active? ⇒ Boolean
83 84 85 |
# File 'app/models/pay/subscription.rb', line 83 def active? ["trialing", "active"].include?(status) && (ends_at.nil? || on_grace_period? || on_trial?) end |
#canceled? ⇒ Boolean
75 76 77 |
# File 'app/models/pay/subscription.rb', line 75 def canceled? ends_at? end |
#cancelled? ⇒ Boolean
79 80 81 |
# File 'app/models/pay/subscription.rb', line 79 def cancelled? canceled? end |
#change_quantity(quantity) ⇒ Object
99 100 101 102 |
# File 'app/models/pay/subscription.rb', line 99 def change_quantity(quantity) payment_processor.change_quantity(quantity) update(quantity: quantity) end |
#has_incomplete_payment? ⇒ Boolean
95 96 97 |
# File 'app/models/pay/subscription.rb', line 95 def has_incomplete_payment? past_due? || incomplete? end |
#incomplete? ⇒ Boolean
91 92 93 |
# File 'app/models/pay/subscription.rb', line 91 def incomplete? status == "incomplete" end |
#latest_payment ⇒ Object
124 125 126 127 |
# File 'app/models/pay/subscription.rb', line 124 def latest_payment return unless stripe? processor_subscription(expand: ["latest_invoice.payment_intent"]).latest_invoice.payment_intent end |
#no_prorate ⇒ Object
63 64 65 |
# File 'app/models/pay/subscription.rb', line 63 def no_prorate self.prorate = false end |
#on_trial? ⇒ Boolean
71 72 73 |
# File 'app/models/pay/subscription.rb', line 71 def on_trial? trial_ends_at? && Time.zone.now < trial_ends_at end |
#past_due? ⇒ Boolean
87 88 89 |
# File 'app/models/pay/subscription.rb', line 87 def past_due? status == "past_due" end |
#payment_processor ⇒ Object
48 49 50 |
# File 'app/models/pay/subscription.rb', line 48 def payment_processor @payment_processor ||= payment_processor_for(processor).new(self) end |
#payment_processor_for(name) ⇒ Object
52 53 54 |
# File 'app/models/pay/subscription.rb', line 52 def payment_processor_for(name) "Pay::#{name.to_s.classify}::Subscription".constantize end |
#processor_subscription(**options) ⇒ Object
120 121 122 |
# File 'app/models/pay/subscription.rb', line 120 def processor_subscription(**) payment_processor.subscription(**) end |
#resume ⇒ Object
104 105 106 107 108 |
# File 'app/models/pay/subscription.rb', line 104 def resume payment_processor.resume update(ends_at: nil, status: "active") self end |
#skip_trial ⇒ Object
67 68 69 |
# File 'app/models/pay/subscription.rb', line 67 def skip_trial self.trial_ends_at = nil end |
#swap(plan) ⇒ Object
110 111 112 113 |
# File 'app/models/pay/subscription.rb', line 110 def swap(plan) payment_processor.swap(plan) update(processor_plan: plan, ends_at: nil) end |
#swap_and_invoice(plan) ⇒ Object
115 116 117 118 |
# File 'app/models/pay/subscription.rb', line 115 def swap_and_invoice(plan) swap(plan) owner.invoice!(subscription_id: processor_id) end |