Module: SlackRubyBotServer::Stripe::Models::Methods
- Extended by:
- ActiveModel::Callbacks, ActiveSupport::Concern
- Included in:
- ActiveRecord, Mongoid
- Defined in:
- lib/slack-ruby-bot-server-stripe/models/methods.rb
Instance Method Summary collapse
- #active_stripe_subscription ⇒ Object
- #active_stripe_subscription? ⇒ Boolean
- #check_stripe! ⇒ Object
- #check_subscription! ⇒ Object
- #check_trial! ⇒ Object
- #remaining_trial_days ⇒ Object
- #stripe_subscriptions ⇒ Object
-
#subscribe!(params) ⇒ Object
params: - stripe_token - stripe_email - subscription_plan_id.
- #subscribed_text ⇒ Object
- #subscription_expired? ⇒ Boolean
- #subscription_expired_text ⇒ Object
- #subscription_past_due_text ⇒ Object
- #subscription_text(options = { include_admin_info: false }) ⇒ Object
- #tags ⇒ Object
- #trial_ends_at ⇒ Object
- #trial_expired? ⇒ Boolean
- #trial_text ⇒ Object
- #unsubscribe! ⇒ Object
- #unsubscribed_text ⇒ Object
-
#update_subscription!(params) ⇒ Object
params: - stripe_token.
Instance Method Details
#active_stripe_subscription ⇒ Object
118 119 120 121 122 123 124 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 118 def active_stripe_subscription return unless stripe_customer stripe_customer.subscriptions.detect do |subscription| subscription.status == 'active' && !subscription.cancel_at_period_end end end |
#active_stripe_subscription? ⇒ Boolean
114 115 116 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 114 def active_stripe_subscription? !active_stripe_subscription.nil? end |
#check_stripe! ⇒ Object
205 206 207 208 209 210 211 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 205 def check_stripe! if subscribed? && active_stripe_subscription? check_subscription! elsif !subscribed? check_trial! end end |
#check_subscription! ⇒ Object
187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 187 def check_subscription! raise Errors::NotSubscribedError unless subscribed? raise Errors::MissingStripeCustomerError unless stripe_customer if stripe_customer.subscriptions.none? subscription_expired! else stripe_customer.subscriptions.each do |subscription| case subscription.status when 'past_due' subscription_past_due! when 'canceled', 'unpaid' subscription_expired! end end end end |
#check_trial! ⇒ Object
180 181 182 183 184 185 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 180 def check_trial! raise Errors::AlreadySubscribedError if subscribed? return if remaining_trial_days > 3 trial_expiring! end |
#remaining_trial_days ⇒ Object
138 139 140 141 142 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 138 def remaining_trial_days raise Errors::AlreadySubscribedError if subscribed? [0, (trial_ends_at.to_date - Time.now.utc.to_date).to_i].max end |
#stripe_subscriptions ⇒ Object
126 127 128 129 130 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 126 def stripe_subscriptions return unless stripe_customer stripe_customer.subscriptions end |
#subscribe!(params) ⇒ Object
params:
-
stripe_token
-
stripe_email
-
subscription_plan_id
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 64 def subscribe!(params) raise Errors::AlreadySubscribedError if subscribed? raise Errors::StripeCustomerExistsError if stripe_customer_id customer = ::Stripe::Customer.create( source: params[:stripe_token], plan: params[:subscription_plan_id] || SlackRubyBotServer::Stripe.config.subscription_plan_id, email: params[:stripe_email], metadata: { id: id, team_id: team_id, name: name, domain: domain } ) update_attributes!( subscribed: true, subscribed_at: Time.now.utc, stripe_customer_id: customer['id'], subscription_expired_at: nil, subscription_past_due_at: nil, subscription_past_due_informed_at: nil ) customer end |
#subscribed_text ⇒ Object
162 163 164 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 162 def subscribed_text 'Your team has been subscribed.' end |
#subscription_expired? ⇒ Boolean
26 27 28 29 30 31 32 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 26 def subscription_expired? return false if subscribed? return true if subscription_expired_at time_limit = Time.now - trial_duration created_at < time_limit end |
#subscription_expired_text ⇒ Object
166 167 168 169 170 171 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 166 def subscription_expired_text [ 'Your subscription has expired.', subscribe_text ].join(' ') end |
#subscription_past_due_text ⇒ Object
173 174 175 176 177 178 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 173 def subscription_past_due_text [ 'Your subscription is past due.', update_cc_text ].join(' ') end |
#subscription_text(options = { include_admin_info: false }) ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 38 def subscription_text( = { include_admin_info: false }) subscription_text = [] if stripe_customer subscription_text << stripe_customer_text if stripe_subscriptions&.any? subscription_text.concat(stripe_customer_subscriptions_info) if [:include_admin_info] subscription_text.concat(stripe_customer_invoices_info) subscription_text.concat(stripe_customer_sources_info) subscription_text << update_cc_text end else subscription_text << 'No active subscriptions.' end elsif subscribed && subscribed_at subscription_text << subscriber_text else subscription_text << trial_text end subscription_text.compact.join("\n") end |
#tags ⇒ Object
19 20 21 22 23 24 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 19 def [ subscribed? ? 'subscribed' : 'trial', stripe_customer_id? ? 'paid' : nil ].compact end |
#trial_ends_at ⇒ Object
132 133 134 135 136 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 132 def trial_ends_at raise Errors::AlreadySubscribedError if subscribed? created_at + trial_duration end |
#trial_expired? ⇒ Boolean
34 35 36 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 34 def trial_expired? remaining_trial_days <= 0 end |
#trial_text ⇒ Object
144 145 146 147 148 149 150 151 152 153 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 144 def trial_text raise Errors::AlreadySubscribedError if subscribed? [ remaining_trial_days.zero? ? 'Your trial subscription has expired.' : "Your trial subscription expires in #{remaining_trial_days} day#{remaining_trial_days == 1 ? '' : 's'}.", subscribe_text ].join(' ') end |
#unsubscribe! ⇒ Object
104 105 106 107 108 109 110 111 112 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 104 def unsubscribe! raise Errors::NotSubscribedError unless subscribed? raise Errors::MissingStripeCustomerError unless active_stripe_subscription? run_callbacks :unsubscribed do active_stripe_subscription.delete(at_period_end: true) update_attributes!(subscribed: false, stripe_customer_id: nil) end end |
#unsubscribed_text ⇒ Object
155 156 157 158 159 160 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 155 def unsubscribed_text [ 'Your team has been unsubscribed.', subscribe_text ].join(' ') end |
#update_subscription!(params) ⇒ Object
params:
-
stripe_token
94 95 96 97 98 99 100 101 102 |
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 94 def update_subscription!(params) raise Errors::NotSubscribedError unless subscribed? raise Errors::MissingStripeCustomerError unless active_stripe_subscription? stripe_customer.source = params[:stripe_token] stripe_customer.save stripe_customer end |