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
- #cancel ⇒ Object
- #cancel_now! ⇒ Object
- #canceled? ⇒ Boolean
- #cancelled? ⇒ Boolean
- #has_incomplete_payment? ⇒ Boolean
- #incomplete? ⇒ Boolean
- #latest_payment ⇒ Object
- #no_prorate ⇒ Object
- #on_grace_period? ⇒ Boolean
- #on_trial? ⇒ Boolean
- #past_due? ⇒ Boolean
- #pause ⇒ Object
- #paused? ⇒ Boolean
- #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
57 58 59 |
# File 'app/models/pay/subscription.rb', line 57 def active? ["trialing", "active"].include?(status) && (ends_at.nil? || on_grace_period? || on_trial?) end |
#cancel ⇒ Object
83 84 85 |
# File 'app/models/pay/subscription.rb', line 83 def cancel send("#{processor}_cancel") end |
#cancel_now! ⇒ Object
87 88 89 |
# File 'app/models/pay/subscription.rb', line 87 def cancel_now! send("#{processor}_cancel_now!") end |
#canceled? ⇒ Boolean
44 45 46 |
# File 'app/models/pay/subscription.rb', line 44 def canceled? ends_at? end |
#cancelled? ⇒ Boolean
48 49 50 |
# File 'app/models/pay/subscription.rb', line 48 def cancelled? canceled? end |
#has_incomplete_payment? ⇒ Boolean
69 70 71 |
# File 'app/models/pay/subscription.rb', line 69 def has_incomplete_payment? past_due? || incomplete? end |
#incomplete? ⇒ Boolean
65 66 67 |
# File 'app/models/pay/subscription.rb', line 65 def incomplete? status == "incomplete" end |
#latest_payment ⇒ Object
126 127 128 129 |
# File 'app/models/pay/subscription.rb', line 126 def latest_payment return unless stripe? processor_subscription(expand: ["latest_invoice.payment_intent"]).latest_invoice.payment_intent end |
#no_prorate ⇒ Object
32 33 34 |
# File 'app/models/pay/subscription.rb', line 32 def no_prorate self.prorate = false end |
#on_grace_period? ⇒ Boolean
52 53 54 55 |
# File 'app/models/pay/subscription.rb', line 52 def on_grace_period? return unless processor? send("#{processor}_on_grace_period?") end |
#on_trial? ⇒ Boolean
40 41 42 |
# File 'app/models/pay/subscription.rb', line 40 def on_trial? trial_ends_at? && Time.zone.now < trial_ends_at end |
#past_due? ⇒ Boolean
61 62 63 |
# File 'app/models/pay/subscription.rb', line 61 def past_due? status == "past_due" end |
#pause ⇒ Object
78 79 80 81 |
# File 'app/models/pay/subscription.rb', line 78 def pause return unless paddle? send("#{processor}_pause") end |
#paused? ⇒ Boolean
73 74 75 76 |
# File 'app/models/pay/subscription.rb', line 73 def paused? return unless paddle? send("#{processor}_paused?") end |
#processor_subscription(options = {}) ⇒ Object
122 123 124 |
# File 'app/models/pay/subscription.rb', line 122 def processor_subscription( = {}) owner.processor_subscription(processor_id, ) end |
#resume ⇒ Object
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'app/models/pay/subscription.rb', line 91 def resume unless on_grace_period? unless paddle? raise StandardError, "You can only resume subscriptions within their grace period." end end unless paused? if paddle? raise StandardError, "You can only resume paused subscriptions." end end send("#{processor}_resume") update(ends_at: nil, status: "active") self end |
#skip_trial ⇒ Object
36 37 38 |
# File 'app/models/pay/subscription.rb', line 36 def skip_trial self.trial_ends_at = nil end |
#swap(plan) ⇒ Object
112 113 114 115 |
# File 'app/models/pay/subscription.rb', line 112 def swap(plan) send("#{processor}_swap", plan) update(processor_plan: plan, ends_at: nil) end |
#swap_and_invoice(plan) ⇒ Object
117 118 119 120 |
# File 'app/models/pay/subscription.rb', line 117 def swap_and_invoice(plan) swap(plan) owner.invoice!(subscription_id: processor_id) end |