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

Instance Method Details

#active_stripe_subscriptionObject



112
113
114
115
116
117
118
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 112

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

Returns:

  • (Boolean)


108
109
110
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 108

def active_stripe_subscription?
  !active_stripe_subscription.nil?
end

#check_stripe!Object



189
190
191
192
193
194
195
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 189

def check_stripe!
  if subscribed? && active_stripe_subscription?
    check_subscription!
  elsif !subscribed?
    check_trial!
  end
end

#check_subscription!Object



175
176
177
178
179
180
181
182
183
184
185
186
187
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 175

def check_subscription!
  raise Errors::NotSubscribedError unless subscribed?
  raise Errors::MissingStripeCustomerError unless stripe_customer

  stripe_customer.subscriptions.each do |subscription|
    case subscription.status
    when 'past_due'
      subscription_past_due!
    when 'canceled', 'unpaid'
      subscription_expired!
    end
  end
end

#check_trial!Object



168
169
170
171
172
173
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 168

def check_trial!
  raise Errors::AlreadySubscribedError if subscribed?
  return if remaining_trial_days > 3

  trial_expiring!
end

#remaining_trial_daysObject



126
127
128
129
130
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 126

def remaining_trial_days
  raise Errors::AlreadySubscribedError if subscribed?

  [0, (trial_ends_at.to_date - Time.now.utc.to_date).to_i].max
end

#subscribe!(params) ⇒ Object

params:

  • stripe_token

  • stripe_email

  • subscription_plan_id



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 58

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_textObject



150
151
152
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 150

def subscribed_text
  'Your team has been subscribed.'
end

#subscription_expired?Boolean

Returns:

  • (Boolean)


24
25
26
27
28
29
30
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 24

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_textObject



154
155
156
157
158
159
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 154

def subscription_expired_text
  [
    'Your subscription has expired.',
    subscribe_text
  ].join(' ')
end

#subscription_past_due_textObject



161
162
163
164
165
166
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 161

def subscription_past_due_text
  [
    'Your subscription is past due.',
    update_cc_text
  ].join(' ')
end

#subscription_text(options = { include_admin_info: false }) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 36

def subscription_text(options = { include_admin_info: false })
  subscription_text = []
  if active_stripe_subscription?
    subscription_text << stripe_customer_text
    subscription_text.concat(stripe_customer_subscriptions_info)
    if options[:include_admin_info]
      subscription_text.concat(stripe_customer_invoices_info)
      subscription_text.concat(stripe_customer_sources_info)
      subscription_text << update_cc_text
    end
  elsif subscribed && subscribed_at
    subscription_text << subscriber_text
  else
    subscription_text << trial_text
  end
  subscription_text.compact.join("\n")
end

#tagsObject



17
18
19
20
21
22
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 17

def tags
  [
    subscribed? ? 'subscribed' : 'trial',
    stripe_customer_id? ? 'paid' : nil
  ].compact
end

#trial_ends_atObject



120
121
122
123
124
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 120

def trial_ends_at
  raise Errors::AlreadySubscribedError if subscribed?

  created_at + trial_duration
end

#trial_expired?Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 32

def trial_expired?
  remaining_trial_days <= 0
end

#trial_textObject



132
133
134
135
136
137
138
139
140
141
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 132

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



98
99
100
101
102
103
104
105
106
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 98

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_textObject



143
144
145
146
147
148
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 143

def unsubscribed_text
  [
    'Your team has been unsubscribed.',
    subscribe_text
  ].join(' ')
end

#update_subscription!(params) ⇒ Object

params:

  • stripe_token



88
89
90
91
92
93
94
95
96
# File 'lib/slack-ruby-bot-server-stripe/models/methods.rb', line 88

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