Class: Charger::Subscription

Inherits:
Object
  • Object
show all
Includes:
Resource
Defined in:
lib/charger/subscription.rb

Constant Summary collapse

STATES =
%w{trialing trial_ended assessing active soft_failure past_due suspended canceled unpaid expired}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.allArray<Subscription>

This is a VERY long running task. It will scrape all of the subscriptions in the chargify account/

Returns:



49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/charger/subscription.rb', line 49

def self.all
  subscriptions = []

  num = 1
  loop do
    subs = page(num, 200)
    break if subs.empty?
    num += 1
    subscriptions += subs
  end

  subscriptions
end

.find(id) ⇒ Subscription

Finds a [Subscription] in chargify. This can raise an exception.

Returns:

Raises:

  • (RestClient::Exception)

    if the id is invalid and the resource is not found.



41
42
43
# File 'lib/charger/subscription.rb', line 41

def self.find id
  new(client.get("subscriptions/#{id}")['subscription'])
end

.page(num = 1, limit = 20) ⇒ Array<Subscription>

Get all of the subscriptions for a specific page

Parameters:

  • num (Integer) (defaults to: 1)

    default is 1

  • limit (Integer) (defaults to: 20)

    max is 200 and default is 20

Returns:



68
69
70
71
72
73
74
# File 'lib/charger/subscription.rb', line 68

def self.page num=1, limit=20
  subscriptions = []
  client.get("subscriptions", params: {page: num, per_page: limit}).each do |data|
    subscriptions << new(data['subscription'])
  end
  subscriptions
end

Instance Method Details

#activated_between?(a, b) ⇒ Boolean

Returns:

  • (Boolean)


138
139
140
141
# File 'lib/charger/subscription.rb', line 138

def activated_between? a, b
  return false unless activated?
  activated_at > a && activated_at < b
end

#activated_on?(date) ⇒ Boolean

Returns:

  • (Boolean)


133
134
135
136
# File 'lib/charger/subscription.rb', line 133

def activated_on? date
  return false unless activated?
  activated_between?(date.beginning_of_day, date.end_of_day)
end

#active?Boolean

Returns:

  • (Boolean)


88
89
90
# File 'lib/charger/subscription.rb', line 88

def active?
  state == 'active'
end

#assessing?Boolean

Returns:

  • (Boolean)


84
85
86
# File 'lib/charger/subscription.rb', line 84

def assessing?
  state == 'assessing'
end

#canceled?Boolean

Returns:

  • (Boolean)


112
113
114
# File 'lib/charger/subscription.rb', line 112

def canceled?
  state == 'canceled'
end

#canceled_between?(a, b) ⇒ Boolean

Returns:

  • (Boolean)


148
149
150
151
# File 'lib/charger/subscription.rb', line 148

def canceled_between? a, b
  return false unless canceled?
  canceled_at > a && canceled_at < b
end

#canceled_on?(date) ⇒ Boolean

Returns:

  • (Boolean)


143
144
145
146
# File 'lib/charger/subscription.rb', line 143

def canceled_on? date
  return false unless canceled?
  canceled_between?(date.beginning_of_day, date.end_of_day)
end

#end_of_life?Boolean

Returns:

  • (Boolean)


108
109
110
# File 'lib/charger/subscription.rb', line 108

def end_of_life?
  %w{canceled expired suspended trial_ended}.include?(state)
end

#events(force = false) ⇒ Object



169
170
171
172
173
174
175
176
# File 'lib/charger/subscription.rb', line 169

def events force=false
  @events = nil if force
  @events ||= Event.find_by_subscription_id(id)
  @events.each do |event|
    event.subscription = self
  end
  @events
end

#expired?Boolean

Returns:

  • (Boolean)


116
117
118
# File 'lib/charger/subscription.rb', line 116

def expired?
  state == 'expired'
end

#line_items(force = false) ⇒ Object

Parameters:

  • force (Boolean) (defaults to: false)

    will cause this to un-cache the results



179
180
181
182
183
184
185
186
# File 'lib/charger/subscription.rb', line 179

def line_items force=false
  @line_items = nil if force
  @line_items ||= LineItem.find_by_subscription_id(id)
  @line_items.each do |item|
    item.subscription = self
  end
  @line_items
end

#live?Boolean

Returns:

  • (Boolean)


76
77
78
# File 'lib/charger/subscription.rb', line 76

def live?
  %w{trialing assessing active}.include?(state)
end

#mrrObject



161
162
163
164
165
166
167
# File 'lib/charger/subscription.rb', line 161

def mrr
  if product.interval_unit == 'day'
    total / (product.interval / 30)
  else
    total / product.interval
  end
end

#past_due?Boolean

Returns:

  • (Boolean)


100
101
102
# File 'lib/charger/subscription.rb', line 100

def past_due?
  state == 'past_due'
end

#persisted?Boolean

Returns:

  • (Boolean)


129
130
131
# File 'lib/charger/subscription.rb', line 129

def persisted?
  !!id
end

#problem?Boolean

Returns:

  • (Boolean)


92
93
94
# File 'lib/charger/subscription.rb', line 92

def problem?
  %w{soft_failure past_due unpaid}.include?(state)
end

#soft_failure?Boolean

Returns:

  • (Boolean)


96
97
98
# File 'lib/charger/subscription.rb', line 96

def soft_failure?
  state == 'soft_failure'
end

#statements(force = false) ⇒ Object



197
198
199
200
201
202
203
204
# File 'lib/charger/subscription.rb', line 197

def statements force=false
  @statements = nil if force
  @statements ||= Statement.find_by_subscription_id(id)
  @statements.each do |statement|
    statement.subscription = self
  end
  @statements
end

#suspended?Boolean

Returns:

  • (Boolean)


120
121
122
# File 'lib/charger/subscription.rb', line 120

def suspended?
  state == 'suspended'
end

#totalObject



153
154
155
156
157
158
159
# File 'lib/charger/subscription.rb', line 153

def total
  sum = product.price_in_cents.to_f / 100.0
  line_items.each do |item|
    sum += item.total if item.allocated?
  end
  sum
end

#transactions(force = false) ⇒ Object



188
189
190
191
192
193
194
195
# File 'lib/charger/subscription.rb', line 188

def transactions force=false
  @transactions = nil if force
  @transactions ||= Transaction.find_by_subscription_id(id)
  @transactions.each do |transaction|
    transaction.subscription = self
  end
  @transactions
end

#trial_ended?Boolean

Returns:

  • (Boolean)


124
125
126
# File 'lib/charger/subscription.rb', line 124

def trial_ended?
  state == 'trial_ended'
end

#trialing?Boolean

Returns:

  • (Boolean)


80
81
82
# File 'lib/charger/subscription.rb', line 80

def trialing?
  state == 'trialing'
end

#unpaid?Boolean

Returns:

  • (Boolean)


104
105
106
# File 'lib/charger/subscription.rb', line 104

def unpaid?
  state == 'unpaid'
end