spreedly 1.3.6 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZmY0Y2RmODFjNWRiNDNmNGIzNjAzZWE0YWQ3N2Q5ZDZkZDU1MjVmMA==
4
+ NWQ5NjM1NzgyZTBkYWJjY2I1MDM0ZDExMzJiMjIyNTExNjg2ODQ5MA==
5
5
  data.tar.gz: !binary |-
6
- MjA0YTNmMzM0MDFhZDliZDE1NDU3ZGIxYzI3MDM3ZTk5ZjFlZmFiZg==
6
+ NmMyNjUyZTIxNDNiYzAwZjVjNzgwZDRkYzk0MjRkMWNiODkzNmZjOQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- OTk1ZDQ5MjRkN2NjZDBjMWQyNzYzOGRkZTI4M2Y2ZTBjZTA1YzA1M2ExYmNl
10
- NDc4OWNhNDg0NWMwY2QzZDEwN2Q0MTI5NjIwYzRjZDU4ZTZmZTBjZTU0MmJj
11
- MzRiNmQ5OGQyOThmNjczMTI0M2NlMmQ0MzY1ZGI0ZGYyYWJkOWM=
9
+ YmExNTYxMDhlYjdlZGZjZDYxOGE2Y2Q4MTcwNjlmN2M3NWYxYzE2N2FiMGI3
10
+ YWQ4NjY0OTRhYmViN2IxNWJhNmU4M2ZkYjJlM2I2ODRhMmZlYzM0ZGRhMzU2
11
+ NzhiMzc4NzUzOGI4MzNhYmIyNmZiYTFkYzgzOTk4YTdjYTcyYTk=
12
12
  data.tar.gz: !binary |-
13
- NDBjYzFmN2IxYTA5NmNmNDIzY2FkYzBiNTM3MDkyYTFlZWIxZjhhZmQzYzI0
14
- YjljYzYyMDQzODI5ZmQ5M2Q4YjlmZTQwYmUxZDU2MWM1OWUxNTY1ZjQ4NDdk
15
- N2VmMTkxM2E4ZDFlOWUxYmE3NmMwNmI2YTQ1NmZlZmE2NjU4ODE=
13
+ YzZmMDVlYjNhOWQ4NTg3ZTAzNjJjMTE3ZTgzNzViZTYwYTVmYmUzMTZmMzFi
14
+ NWZlZWY0NjJmYjllZDI5YTJhMzMyMmYzMjdlYTNkZjYxNTk5YTIxM2U5ODkw
15
+ NmVjMmI3YzU3OGE4NDkwOWRhNzAxYWNjMzhiZjQ2ODc3OTQyMjA=
data/HISTORY.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.4.0
4
+
5
+ * Add accessor for invoices
6
+ * Add accessor for last successful invoice
7
+
3
8
  ## 1.3.6
4
9
 
5
10
  * Modernize packaging
data/lib/spreedly.rb CHANGED
@@ -83,7 +83,6 @@ module Spreedly
83
83
  end
84
84
 
85
85
  class Subscriber < Resource
86
-
87
86
  # This will DELETE all the subscribers from the site.
88
87
  #
89
88
  # Only works for test sites (enforced on the Spreedly side).
@@ -219,7 +218,7 @@ module Spreedly
219
218
  end
220
219
  end
221
220
 
222
- # Allow Another Free Trial
221
+ # Allow Another Free Trial
223
222
  # usage: @subscriber.allow_free_trial
224
223
  def allow_free_trial
225
224
  result = Spreedly.post("/subscribers/#{id}/allow_free_trial.xml")
@@ -246,6 +245,21 @@ module Spreedly
246
245
  raise "Could not add fee to subscriber: result code #{result.code}."
247
246
  end
248
247
  end
248
+
249
+ # Get the invoices for the subscriber
250
+ def invoices
251
+ @invoices ||= @data["invoices"].collect{|i| Invoice.new(i)}
252
+ end
253
+
254
+ # Get the last successful invoice
255
+ def last_successful_invoice
256
+ invoices.detect do |invoice|
257
+ invoice.closed?
258
+ end
259
+ end
260
+ end
261
+
262
+ class Invoice < Resource
249
263
  end
250
264
 
251
265
  class SubscriptionPlan < Resource
data/lib/spreedly/mock.rb CHANGED
@@ -4,15 +4,15 @@ raise "Real Spreedly already required!" if defined?(Spreedly::REAL)
4
4
 
5
5
  module Spreedly
6
6
  MOCK = "mock"
7
-
7
+
8
8
  def self.configure(name, token)
9
9
  @site_name = name
10
10
  end
11
-
11
+
12
12
  def self.site_name
13
13
  @site_name
14
14
  end
15
-
15
+
16
16
  class Resource
17
17
  def self.attributes
18
18
  @attributes ||= {}
@@ -21,12 +21,13 @@ module Spreedly
21
21
  def self.attributes=(value)
22
22
  @attributes = value
23
23
  end
24
-
24
+
25
+ attr_reader :attributes
25
26
  def initialize(params={})
26
27
  @attributes = self.class.attributes.inject({}){|a,(k,v)| a[k.to_sym] = v.call; a}
27
28
  params.each {|k,v| @attributes[k.to_sym] = v }
28
29
  end
29
-
30
+
30
31
  def id
31
32
  @attributes[:id]
32
33
  end
@@ -41,7 +42,7 @@ module Spreedly
41
42
  end
42
43
  end
43
44
  end
44
-
45
+
45
46
  class Subscriber < Resource
46
47
  self.attributes = {
47
48
  :created_at => proc{Time.now},
@@ -58,7 +59,7 @@ module Spreedly
58
59
  def self.wipe! # :nodoc: all
59
60
  @subscribers = nil
60
61
  end
61
-
62
+
62
63
  def self.create!(id, *args) # :nodoc: all
63
64
  optional_attrs = args.last.is_a?(::Hash) ? args.pop : {}
64
65
  email, screen_name = args
@@ -71,34 +72,35 @@ module Spreedly
71
72
  subscribers[sub.id] = sub
72
73
  sub
73
74
  end
74
-
75
+
75
76
  def self.delete!(id)
76
77
  subscribers.delete(id)
77
78
  end
78
-
79
+
79
80
  def self.find(id)
80
81
  subscribers[id]
81
82
  end
82
-
83
+
83
84
  def self.subscribers
84
85
  @subscribers ||= {}
85
86
  end
86
-
87
+
87
88
  def self.all
88
89
  @subscribers.values
89
90
  end
90
-
91
+
91
92
  def initialize(params={})
92
93
  super
93
94
  if !id || id == ''
94
95
  raise "Could not create subscriber: Customer ID can't be blank."
95
96
  end
97
+ @invoices ||= []
96
98
  end
97
-
99
+
98
100
  def id
99
101
  @attributes[:customer_id]
100
102
  end
101
-
103
+
102
104
  def update(args)
103
105
  args.each_pair do |key, value|
104
106
  if @attributes.has_key?(key)
@@ -106,7 +108,7 @@ module Spreedly
106
108
  end
107
109
  end
108
110
  end
109
-
111
+
110
112
  def comp(quantity, units, feature_level=nil)
111
113
  raise "Could not comp subscriber: no longer exists." unless self.class.find(id)
112
114
  raise "Could not comp subscriber: validation failed." unless units && quantity
@@ -129,53 +131,91 @@ module Spreedly
129
131
  plan = SubscriptionPlan.find(plan_id)
130
132
  comp(plan.duration_quantity, plan.duration_units, plan.feature_level)
131
133
  end
132
-
134
+
133
135
  def allow_free_trial
134
- @attributes[:eligible_for_free_trial] = true
136
+ @attributes[:eligible_for_free_trial] = true
135
137
  end
136
138
 
137
139
  def stop_auto_renew
138
140
  raise "Could not stop auto renew for subscriber: subscriber does not exist." unless self.class.find(id)
139
141
  @attributes[:recurring] = false
140
142
  end
141
-
142
- def subscribe(plan_id)
143
- @attributes[:recurring] = true
143
+
144
+ def subscribe(plan_id, card_number="4222222222222")
144
145
  plan = SubscriptionPlan.find(plan_id)
146
+ @invoices.unshift(Invoice.new(
147
+ amount: (@invoices.select{|invoice| invoice.closed?}.size > 0 ? 0 : plan.amount),
148
+ closed: false
149
+ ))
150
+
151
+ return unless card_number == "4222222222222"
152
+
153
+ @invoices.first.attributes[:closed] = true
154
+ @attributes[:recurring] = true
145
155
  comp(plan.duration_quantity, plan.duration_units, plan.feature_level)
146
156
  end
147
-
157
+
148
158
  def add_fee(args)
149
159
  raise "Unprocessable Entity" unless (args.keys & [:amount, :group, :name]).size == 3
150
160
  raise "Unprocessable Entity" unless active?
151
161
  nil
152
162
  end
163
+
164
+ def invoices
165
+ @invoices
166
+ end
167
+
168
+ def last_successful_invoice
169
+ @invoices.detect{|invoice| invoice.closed?}
170
+ end
171
+ end
172
+
173
+ class Invoice < Resource
153
174
  end
154
-
175
+
155
176
  class SubscriptionPlan < Resource
156
177
  self.attributes = {
157
178
  :plan_type => proc{'regular'},
158
179
  :feature_level => proc{''}
159
180
  }
160
-
181
+
161
182
  def self.all
162
183
  plans.values
163
184
  end
164
-
185
+
165
186
  def self.find(id)
166
187
  plans[id.to_i]
167
188
  end
168
-
189
+
169
190
  def self.plans
170
191
  @plans ||= {
171
- 1 => new(:id => 1, :name => 'Default mock plan', :duration_quantity => 1, :duration_units => 'days'),
172
- 2 => new(:id => 2, :name => 'Test Free Trial Plan', :plan_type => 'free_trial', :duration_quantity => 1, :duration_units => 'days'),
173
- 3 => new(:id => 3, :name => 'Test Regular Plan', :duration_quantity => 1, :duration_units => 'days'),
192
+ 1 => new(
193
+ :id => 1,
194
+ :name => 'Default mock plan',
195
+ :duration_quantity => 1,
196
+ :duration_units => 'days',
197
+ :amount => 6
198
+ ),
199
+ 2 => new(
200
+ :id => 2,
201
+ :name => 'Test Free Trial Plan',
202
+ :plan_type => 'free_trial',
203
+ :duration_quantity => 1,
204
+ :duration_units => 'days',
205
+ :amount => 11
206
+ ),
207
+ 3 => new(
208
+ :id => 3,
209
+ :name => 'Test Regular Plan',
210
+ :duration_quantity => 1,
211
+ :duration_units => 'days',
212
+ :amount => 17
213
+ )
174
214
  }
175
215
  end
176
-
216
+
177
217
  def trial?
178
218
  (plan_type == "free_trial")
179
219
  end
180
220
  end
181
- end
221
+ end
@@ -4,7 +4,7 @@ module Spreedly
4
4
  class Subscriber
5
5
  # This method is *strictly* for use when testing, and will
6
6
  # probably only work against a test Spreedly site anyhow.
7
- def subscribe(plan_id)
7
+ def subscribe(plan_id, card_number="4222222222222")
8
8
  agent = Mechanize.new
9
9
  page = agent.get(Spreedly.subscribe_url(id, plan_id))
10
10
  page = page.forms.first.submit
@@ -12,13 +12,16 @@ module Spreedly
12
12
  form['credit_card[first_name]'] = 'Joe'
13
13
  form['credit_card[last_name]'] = 'Bob'
14
14
  form['subscriber[email]'] = 'joe@example.com'
15
- form['credit_card[number]'] = '4222222222222'
15
+ form['credit_card[number]'] = card_number
16
16
  form['credit_card[card_type]'] = 'visa'
17
17
  form['credit_card[verification_value]'] = '234'
18
18
  form['credit_card[month]'] = '1'
19
19
  form['credit_card[year]'] = '2024'
20
20
  page = form.click_button
21
- raise "Subscription didn't got through" unless page.title == "Thank you!"
21
+
22
+ if card_number == "4222222222222"
23
+ raise "Subscription didn't go through" unless page.title == "Thank you!"
24
+ end
22
25
  end
23
26
  end
24
27
  end
@@ -1,3 +1,3 @@
1
1
  module Spreedly
2
- VERSION = "1.3.6"
2
+ VERSION = "1.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spreedly
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.6
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Spreedly
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-02-26 00:00:00.000000000 Z
11
+ date: 2013-03-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  prerelease: false