spreedly 1.3.6 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
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