saucy 0.12.2 → 0.12.3

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.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ 0.12.3
2
+
3
+ * Notify airbrake if updating a subscription fails and continue
4
+
1
5
  0.12.2
2
6
 
3
7
  * Fix for misssed reference to 30 days
@@ -1,3 +1,5 @@
1
+ require 'airbrake'
2
+
1
3
  module Saucy
2
4
  module Subscription
3
5
  extend ActiveSupport::Concern
@@ -228,14 +230,18 @@ module Saucy
228
230
  def update_subscriptions!
229
231
  recently_billed = where("next_billing_date <= ?", Time.now)
230
232
  recently_billed.each do |account|
231
- account.subscription_status = account.subscription.status
232
- account.next_billing_date = account.subscription.next_billing_date
233
- account.save!
234
- if account.past_due?
235
- BillingMailer.problem(account).deliver!
236
- else
237
- BillingMailer.receipt(account, account.most_recent_transaction).deliver!
238
- Saucy::Notifications.notify_observers("billed", :account => account)
233
+ begin
234
+ account.subscription_status = account.subscription.status
235
+ account.next_billing_date = account.subscription.next_billing_date
236
+ account.save!
237
+ if account.past_due?
238
+ BillingMailer.problem(account).deliver!
239
+ else
240
+ BillingMailer.receipt(account, account.most_recent_transaction).deliver!
241
+ Saucy::Notifications.notify_observers("billed", :account => account)
242
+ end
243
+ rescue Exception => e
244
+ Airbrake.notify(e)
239
245
  end
240
246
  end
241
247
  end
@@ -307,6 +307,37 @@ describe Account, "with a paid subscription" do
307
307
  end
308
308
  end
309
309
 
310
+ context "when there is an error" do
311
+ before(:each) do
312
+ Airbrake.stubs(:notify => true)
313
+ @subscription = mock
314
+ @subscription.stubs(:status).raises(RuntimeError)
315
+ Account.any_instance.stubs(:subscription).returns(@subscription)
316
+ end
317
+
318
+ it "notifies Airbrake if expiring account notifications fail" do
319
+ Timecop.travel(subject.next_billing_date + 1.day) do
320
+ Account.update_subscriptions!
321
+ Airbrake.should have_received(:notify).once()
322
+ end
323
+ end
324
+
325
+ it "delivers the rest of the emails even if one fails" do
326
+ Factory(:account,
327
+ :cardholder_name => "Ralph Robot",
328
+ :billing_email => "ralph@example.com",
329
+ :card_number => "4111111111111111",
330
+ :verification_code => "123",
331
+ :expiration_month => 5,
332
+ :expiration_year => 2012,
333
+ :plan => Factory(:paid_plan))
334
+ Timecop.travel(subject.next_billing_date + 1.day) do
335
+ Account.update_subscriptions!
336
+ @subscription.should have_received(:status).twice()
337
+ end
338
+ end
339
+ end
340
+
310
341
  context "when billing didn't work" do
311
342
  let(:subscription) { FakeBraintree.subscriptions[subject.subscription_token] }
312
343
 
metadata CHANGED
@@ -1,14 +1,10 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: saucy
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 12
8
- - 2
9
- version: 0.12.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.12.3
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - thoughtbot, inc.
13
9
  - Joe Ferris
14
10
  - Mike Burns
@@ -18,130 +14,103 @@ authors:
18
14
  autorequire:
19
15
  bindir: bin
20
16
  cert_chain: []
21
-
22
- date: 2011-10-06 00:00:00 -04:00
23
- default_executable:
24
- dependencies:
25
- - !ruby/object:Gem::Dependency
17
+ date: 2011-10-07 00:00:00.000000000Z
18
+ dependencies:
19
+ - !ruby/object:Gem::Dependency
26
20
  name: clearance
27
- prerelease: false
28
- requirement: &id001 !ruby/object:Gem::Requirement
29
- requirements:
21
+ requirement: &70365143039700 !ruby/object:Gem::Requirement
22
+ none: false
23
+ requirements:
30
24
  - - ~>
31
- - !ruby/object:Gem::Version
32
- segments:
33
- - 0
34
- - 11
35
- - 2
25
+ - !ruby/object:Gem::Version
36
26
  version: 0.11.2
37
27
  type: :runtime
38
- version_requirements: *id001
39
- - !ruby/object:Gem::Dependency
40
- name: formtastic
41
28
  prerelease: false
42
- requirement: &id002 !ruby/object:Gem::Requirement
43
- requirements:
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- segments:
47
- - 1
48
- - 2
49
- version: "1.2"
29
+ version_requirements: *70365143039700
30
+ - !ruby/object:Gem::Dependency
31
+ name: formtastic
32
+ requirement: &70365143072740 !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '1.2'
50
38
  type: :runtime
51
- version_requirements: *id002
52
- - !ruby/object:Gem::Dependency
53
- name: railties
54
39
  prerelease: false
55
- requirement: &id003 !ruby/object:Gem::Requirement
56
- requirements:
57
- - - ">="
58
- - !ruby/object:Gem::Version
59
- segments:
60
- - 3
61
- - 0
62
- - 3
40
+ version_requirements: *70365143072740
41
+ - !ruby/object:Gem::Dependency
42
+ name: railties
43
+ requirement: &70365143072280 !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
63
48
  version: 3.0.3
64
49
  type: :runtime
65
- version_requirements: *id003
66
- - !ruby/object:Gem::Dependency
67
- name: braintree
68
50
  prerelease: false
69
- requirement: &id004 !ruby/object:Gem::Requirement
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- segments:
74
- - 2
75
- - 6
76
- - 2
51
+ version_requirements: *70365143072280
52
+ - !ruby/object:Gem::Dependency
53
+ name: braintree
54
+ requirement: &70365143071820 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ! '>='
58
+ - !ruby/object:Gem::Version
77
59
  version: 2.6.2
78
60
  type: :runtime
79
- version_requirements: *id004
80
- - !ruby/object:Gem::Dependency
81
- name: sham_rack
82
61
  prerelease: false
83
- requirement: &id005 !ruby/object:Gem::Requirement
84
- requirements:
85
- - - "="
86
- - !ruby/object:Gem::Version
87
- segments:
88
- - 1
89
- - 3
90
- - 3
62
+ version_requirements: *70365143071820
63
+ - !ruby/object:Gem::Dependency
64
+ name: sham_rack
65
+ requirement: &70365143071360 !ruby/object:Gem::Requirement
66
+ none: false
67
+ requirements:
68
+ - - =
69
+ - !ruby/object:Gem::Version
91
70
  version: 1.3.3
92
71
  type: :runtime
93
- version_requirements: *id005
94
- - !ruby/object:Gem::Dependency
95
- name: sinatra
96
72
  prerelease: false
97
- requirement: &id006 !ruby/object:Gem::Requirement
98
- requirements:
99
- - - ">="
100
- - !ruby/object:Gem::Version
101
- segments:
102
- - 1
103
- - 1
104
- - 2
73
+ version_requirements: *70365143071360
74
+ - !ruby/object:Gem::Dependency
75
+ name: sinatra
76
+ requirement: &70365143070900 !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
105
81
  version: 1.1.2
106
82
  type: :runtime
107
- version_requirements: *id006
108
- - !ruby/object:Gem::Dependency
109
- name: airbrake
110
83
  prerelease: false
111
- requirement: &id007 !ruby/object:Gem::Requirement
112
- requirements:
84
+ version_requirements: *70365143070900
85
+ - !ruby/object:Gem::Dependency
86
+ name: airbrake
87
+ requirement: &70365143070440 !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
113
90
  - - ~>
114
- - !ruby/object:Gem::Version
115
- segments:
116
- - 3
117
- - 0
118
- - 4
91
+ - !ruby/object:Gem::Version
119
92
  version: 3.0.4
120
93
  type: :runtime
121
- version_requirements: *id007
122
- - !ruby/object:Gem::Dependency
123
- name: aruba
124
94
  prerelease: false
125
- requirement: &id008 !ruby/object:Gem::Requirement
126
- requirements:
127
- - - "="
128
- - !ruby/object:Gem::Version
129
- segments:
130
- - 0
131
- - 2
132
- - 6
95
+ version_requirements: *70365143070440
96
+ - !ruby/object:Gem::Dependency
97
+ name: aruba
98
+ requirement: &70365143069980 !ruby/object:Gem::Requirement
99
+ none: false
100
+ requirements:
101
+ - - =
102
+ - !ruby/object:Gem::Version
133
103
  version: 0.2.6
134
104
  type: :development
135
- version_requirements: *id008
136
- description: Clearance-based Rails engine for Software as a Service (Saas) that provides account and project management
105
+ prerelease: false
106
+ version_requirements: *70365143069980
107
+ description: Clearance-based Rails engine for Software as a Service (Saas) that provides
108
+ account and project management
137
109
  email: support@thoughtbot.com
138
110
  executables: []
139
-
140
111
  extensions: []
141
-
142
112
  extra_rdoc_files: []
143
-
144
- files:
113
+ files:
145
114
  - CHANGELOG.md
146
115
  - Gemfile
147
116
  - Gemfile.lock
@@ -313,37 +282,31 @@ files:
313
282
  - spec/support/clearance_matchers.rb
314
283
  - spec/support/notifications.rb
315
284
  - spec/views/accounts/_account.html.erb_spec.rb
316
- has_rdoc: true
317
285
  homepage: http://github.com/thoughtbot/saucy
318
286
  licenses: []
319
-
320
287
  post_install_message:
321
288
  rdoc_options: []
322
-
323
- require_paths:
289
+ require_paths:
324
290
  - lib
325
- required_ruby_version: !ruby/object:Gem::Requirement
326
- requirements:
327
- - - ">="
328
- - !ruby/object:Gem::Version
329
- segments:
330
- - 0
331
- version: "0"
332
- required_rubygems_version: !ruby/object:Gem::Requirement
333
- requirements:
334
- - - ">="
335
- - !ruby/object:Gem::Version
336
- segments:
337
- - 0
338
- version: "0"
291
+ required_ruby_version: !ruby/object:Gem::Requirement
292
+ none: false
293
+ requirements:
294
+ - - ! '>='
295
+ - !ruby/object:Gem::Version
296
+ version: '0'
297
+ required_rubygems_version: !ruby/object:Gem::Requirement
298
+ none: false
299
+ requirements:
300
+ - - ! '>='
301
+ - !ruby/object:Gem::Version
302
+ version: '0'
339
303
  requirements: []
340
-
341
304
  rubyforge_project:
342
- rubygems_version: 1.3.6
305
+ rubygems_version: 1.8.6
343
306
  signing_key:
344
307
  specification_version: 3
345
308
  summary: Clearance-based Rails engine for SaaS
346
- test_files:
309
+ test_files:
347
310
  - features/run_features.feature
348
311
  - features/step_definitions/clearance_steps.rb
349
312
  - features/step_definitions/rails_steps.rb