stripe-rails 1.0.2 → 1.1.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 +4 -4
- data/.travis.yml +1 -5
- data/Changelog.md +6 -0
- data/README.md +24 -0
- data/app/models/stripe/event_dispatch.rb +1 -1
- data/gemfiles/rails4.gemfile +1 -0
- data/gemfiles/rails5.gemfile +1 -0
- data/lib/stripe/engine.rb +4 -1
- data/lib/stripe/rails.rb +3 -1
- data/lib/stripe/rails/version.rb +1 -1
- data/lib/stripe/testing.rb +12 -0
- data/stripe-rails.gemspec +4 -4
- data/test/callbacks_spec.rb +8 -2
- data/test/dummy/app/controllers/apis_controller.rb +7 -0
- data/test/dummy/config/routes.rb +1 -0
- data/test/dummy_apis_controller_spec.rb +17 -0
- data/test/spec_helper.rb +3 -3
- data/test/support/application_system_test_case.rb +1 -1
- data/test/testing_spec.rb +59 -0
- metadata +26 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ac50cc61a92527aeb62ea99d1c288dd9057e2796
|
4
|
+
data.tar.gz: a499347e24515c8d7ccddc7b961e62abf633e9a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 077e01fe7390da6d0c3facab63783dc89d71fe9d91ba14bddc7b6b765855379d832857d2b17630898d9d9cd5be618cac8ce676cddd99e29e5a1d761846118c62
|
7
|
+
data.tar.gz: 3a506cbec7767db9a96b5bf4b7c30b81dcc9f833d0904f049afee2b9aae64082e1da346a8902379e884869b473d18ca639506121cac1e10afbb4e0c3f79da50e
|
data/.travis.yml
CHANGED
@@ -4,10 +4,6 @@ rvm:
|
|
4
4
|
- 2.3.4
|
5
5
|
- 2.2.7
|
6
6
|
- 2.1.9
|
7
|
-
notifications:
|
8
|
-
email:
|
9
|
-
recipients:
|
10
|
-
- cowboyd@thefrontside.net
|
11
7
|
env:
|
12
8
|
global:
|
13
9
|
- GIT_COMMITTED_AT=$(if [ "$TRAVIS_PULL_REQUEST" == "false" ]; then git log -1 --pretty=format:%ct; else git log -1 --skip 1 --pretty=format:%ct; fi)
|
@@ -33,4 +29,4 @@ matrix:
|
|
33
29
|
- rvm: 2.1.9
|
34
30
|
gemfile: Gemfile
|
35
31
|
- rvm: 2.1.9
|
36
|
-
gemfile: gemfiles/rails5.gemfile
|
32
|
+
gemfile: gemfiles/rails5.gemfile
|
data/Changelog.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## 1.1.0 (2017-08-29)
|
2
|
+
|
3
|
+
* Adds a testing module for testing callbacks (thanks @Pyo25)
|
4
|
+
* Fixes loading with ActionController::API (thanks @gaffneyc)
|
5
|
+
* Fixes `NoMethodError: NoMethodError (undefined method `object' for #ActionController::Parameters` (thanks to a whole bunch of people for reporting this)
|
6
|
+
|
1
7
|
## 1.0.2 (2017-08-15)
|
2
8
|
|
3
9
|
* Remove authenticity token check (thanks @lewispb)
|
data/README.md
CHANGED
@@ -358,6 +358,30 @@ end
|
|
358
358
|
|
359
359
|
See the [complete listing of all stripe events][5], and the [webhook tutorial][6] for more great information on this subject.
|
360
360
|
|
361
|
+
## Unit testing
|
362
|
+
|
363
|
+
If you want to test your callbacks, you can use the `Stripe::Testing` module to send mocked Stripe events.
|
364
|
+
|
365
|
+
```ruby
|
366
|
+
test "my callback handles new subscription" do
|
367
|
+
Stripe::Testing.send_event "customer.subscription.created"
|
368
|
+
# Assertions
|
369
|
+
end
|
370
|
+
```
|
371
|
+
|
372
|
+
You can also overwrite some event properties: ([More info](https://github.com/rebelidealist/stripe-ruby-mock#customizing-webhooks))
|
373
|
+
|
374
|
+
```ruby
|
375
|
+
test "my callback handles new subscription" do
|
376
|
+
Stripe::Testing.send_event "customer.subscription.created", {
|
377
|
+
:email => "john@doe.com",
|
378
|
+
:account_balance => 40
|
379
|
+
}
|
380
|
+
# Assertions
|
381
|
+
end
|
382
|
+
```
|
383
|
+
|
384
|
+
The default fixtures come from [the `stripe-ruby-mock` gem](https://github.com/rebelidealist/stripe-ruby-mock/tree/master/lib/stripe_mock/webhook_fixtures).
|
361
385
|
|
362
386
|
## Thanks
|
363
387
|
|
@@ -11,7 +11,7 @@ module Stripe
|
|
11
11
|
def retrieve_stripe_event(params)
|
12
12
|
id = params['id']
|
13
13
|
if id == 'evt_00000000000000' #this is a webhook test
|
14
|
-
yield Stripe::Event.construct_from(params)
|
14
|
+
yield Stripe::Event.construct_from(params.to_unsafe_h)
|
15
15
|
else
|
16
16
|
yield Stripe::Event.retrieve(id)
|
17
17
|
end
|
data/gemfiles/rails4.gemfile
CHANGED
data/gemfiles/rails5.gemfile
CHANGED
data/lib/stripe/engine.rb
CHANGED
@@ -55,7 +55,10 @@ environment file directly.
|
|
55
55
|
|
56
56
|
initializer 'stripe.javascript_helper' do
|
57
57
|
ActiveSupport.on_load :action_controller do
|
58
|
-
helper
|
58
|
+
# ActionController::API does not have a helper method
|
59
|
+
if respond_to?(:helper)
|
60
|
+
helper Stripe::JavascriptHelper
|
61
|
+
end
|
59
62
|
end
|
60
63
|
end
|
61
64
|
|
data/lib/stripe/rails.rb
CHANGED
data/lib/stripe/rails/version.rb
CHANGED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'stripe_mock'
|
2
|
+
require 'stripe/callbacks'
|
3
|
+
|
4
|
+
module Stripe
|
5
|
+
module Testing
|
6
|
+
def self.send_event(event, properties = {})
|
7
|
+
evt = StripeMock.mock_webhook_event(event, properties)
|
8
|
+
target = evt.data.object
|
9
|
+
::Stripe::Callbacks.run_callbacks(evt, target)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
data/stripe-rails.gemspec
CHANGED
@@ -1,9 +1,8 @@
|
|
1
|
-
|
2
|
-
require File.expand_path('../lib/stripe/rails/version', __FILE__)
|
1
|
+
require File.expand_path('lib/stripe/rails/version', __dir__)
|
3
2
|
|
4
3
|
Gem::Specification.new do |gem|
|
5
|
-
gem.authors = ["Charles Lowell", "Nola Stowe"]
|
6
|
-
gem.email = ["
|
4
|
+
gem.authors = ["Charles Lowell", "Nola Stowe", "SengMing Tan"]
|
5
|
+
gem.email = ["sengming@sanemen.com"]
|
7
6
|
gem.description = "A gem to integrate stripe into your rails app"
|
8
7
|
gem.summary = "A gem to integrate stripe into your rails app"
|
9
8
|
gem.homepage = "https://github.com/Everapps/stripe-rails"
|
@@ -18,4 +17,5 @@ Gem::Specification.new do |gem|
|
|
18
17
|
gem.add_dependency 'rails', '>= 3'
|
19
18
|
gem.add_dependency 'stripe'
|
20
19
|
gem.add_dependency 'responders'
|
20
|
+
gem.add_dependency 'stripe-ruby-mock', '~> 2.4'
|
21
21
|
end
|
data/test/callbacks_spec.rb
CHANGED
@@ -5,8 +5,8 @@ describe Stripe::Callbacks do
|
|
5
5
|
include CallbackHelpers
|
6
6
|
|
7
7
|
let(:app) { Rails.application }
|
8
|
-
let(:event) { JSON.parse(File.read File.expand_path('
|
9
|
-
let(:invoice) { JSON.parse(File.read File.expand_path('
|
8
|
+
let(:event) { JSON.parse(File.read File.expand_path('event.json', __dir__)) }
|
9
|
+
let(:invoice) { JSON.parse(File.read File.expand_path('invoice.json', __dir__)) }
|
10
10
|
let(:content) { event }
|
11
11
|
let(:observer) { Class.new }
|
12
12
|
|
@@ -53,6 +53,12 @@ describe Stripe::Callbacks do
|
|
53
53
|
->{ subject }.must_raise RuntimeError
|
54
54
|
end
|
55
55
|
end
|
56
|
+
|
57
|
+
describe 'when run from a Stripe webhook test' do
|
58
|
+
before { event['id'] = 'evt_00000000000000' }
|
59
|
+
|
60
|
+
it { subject } # must_not raise error
|
61
|
+
end
|
56
62
|
end
|
57
63
|
|
58
64
|
describe 'defined without a bang and raising an exception' do
|
data/test/dummy/config/routes.rb
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ApisController do
|
4
|
+
include Rack::Test::Methods
|
5
|
+
|
6
|
+
let(:app) { Rails.application }
|
7
|
+
before do
|
8
|
+
header 'Accept', 'application/json'
|
9
|
+
header 'Content-Type', 'application/json'
|
10
|
+
end
|
11
|
+
|
12
|
+
describe 'the ping interface' do
|
13
|
+
subject { get '/apis/' }
|
14
|
+
|
15
|
+
it { subject.must_be :ok? }
|
16
|
+
end
|
17
|
+
end
|
data/test/spec_helper.rb
CHANGED
@@ -9,17 +9,17 @@ require 'minitest/autorun'
|
|
9
9
|
ENV["RAILS_ENV"] = "test"
|
10
10
|
ENV['STRIPE_SECRET_KEY'] = 'XYZ'
|
11
11
|
|
12
|
-
require File.expand_path("
|
12
|
+
require File.expand_path("dummy/config/environment.rb", __dir__)
|
13
13
|
require "rails/test_help"
|
14
14
|
|
15
15
|
Rails.backtrace_cleaner.remove_silencers!
|
16
16
|
|
17
17
|
# Load support files
|
18
|
-
Dir["#{
|
18
|
+
Dir["#{__dir__}/support/**/*.rb"].each { |f| require f }
|
19
19
|
|
20
20
|
# Load fixtures from the engine
|
21
21
|
if ActiveSupport::TestCase.method_defined?(:fixture_path=)
|
22
|
-
ActiveSupport::TestCase.fixture_path = File.expand_path("
|
22
|
+
ActiveSupport::TestCase.fixture_path = File.expand_path("fixtures", __dir__)
|
23
23
|
end
|
24
24
|
|
25
25
|
Stripe::Engine.testing = true
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Testing" do
|
4
|
+
let(:observer) { Class.new }
|
5
|
+
let(:event) { observer.instance_variable_get :@event }
|
6
|
+
let(:target) { observer.instance_variable_get :@target }
|
7
|
+
|
8
|
+
before do
|
9
|
+
StripeMock.start
|
10
|
+
|
11
|
+
observer.include Stripe::Callbacks
|
12
|
+
observer.class_eval do
|
13
|
+
after_invoice_payment_succeeded! { |target, event| @event, @target = event, target }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
after do
|
18
|
+
::Stripe::Callbacks.clear_callbacks!
|
19
|
+
StripeMock.stop
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '.send_event' do
|
23
|
+
subject { Stripe::Testing.send_event event_name }
|
24
|
+
|
25
|
+
describe 'when forwarding the event to the callback' do
|
26
|
+
let(:event_name) { "invoice.payment_succeeded" }
|
27
|
+
|
28
|
+
it 'the callback must run' do
|
29
|
+
subject
|
30
|
+
event.wont_be_nil
|
31
|
+
event.type.must_equal "invoice.payment_succeeded"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe 'when forwarding the event to another callback' do
|
36
|
+
let(:event_name) { 'customer.created' }
|
37
|
+
|
38
|
+
it 'the callback must not run' do
|
39
|
+
subject
|
40
|
+
event.must_be_nil
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe 'when overwriting event properties' do
|
45
|
+
subject { Stripe::Testing.send_event event_name, params }
|
46
|
+
let(:event_name) { "invoice.payment_succeeded" }
|
47
|
+
let(:params) { { subtotal: 500, total: 1000, currency: "eur" } }
|
48
|
+
|
49
|
+
it 'the callback should run with overwritten properties' do
|
50
|
+
subject
|
51
|
+
event.wont_be_nil
|
52
|
+
event.type.must_equal "invoice.payment_succeeded"
|
53
|
+
target.subtotal.must_equal 500
|
54
|
+
target.total.must_equal 1000
|
55
|
+
target.currency.must_equal "eur"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stripe-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Charles Lowell
|
8
8
|
- Nola Stowe
|
9
|
+
- SengMing Tan
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2017-08-
|
13
|
+
date: 2017-08-29 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: rails
|
@@ -53,9 +54,23 @@ dependencies:
|
|
53
54
|
- - ">="
|
54
55
|
- !ruby/object:Gem::Version
|
55
56
|
version: '0'
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: stripe-ruby-mock
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - "~>"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '2.4'
|
64
|
+
type: :runtime
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - "~>"
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '2.4'
|
56
71
|
description: A gem to integrate stripe into your rails app
|
57
72
|
email:
|
58
|
-
-
|
73
|
+
- sengming@sanemen.com
|
59
74
|
executables: []
|
60
75
|
extensions: []
|
61
76
|
extra_rdoc_files: []
|
@@ -93,6 +108,7 @@ files:
|
|
93
108
|
- lib/stripe/rails.rb
|
94
109
|
- lib/stripe/rails/tasks.rake
|
95
110
|
- lib/stripe/rails/version.rb
|
111
|
+
- lib/stripe/testing.rb
|
96
112
|
- stripe-rails.gemspec
|
97
113
|
- test/all.rb
|
98
114
|
- test/callbacks_spec.rb
|
@@ -101,6 +117,7 @@ files:
|
|
101
117
|
- test/dummy/Rakefile
|
102
118
|
- test/dummy/app/assets/javascripts/application.js
|
103
119
|
- test/dummy/app/assets/stylesheets/application.css
|
120
|
+
- test/dummy/app/controllers/apis_controller.rb
|
104
121
|
- test/dummy/app/controllers/application_controller.rb
|
105
122
|
- test/dummy/app/controllers/stripes_controller.rb
|
106
123
|
- test/dummy/app/helpers/application_helper.rb
|
@@ -134,6 +151,7 @@ files:
|
|
134
151
|
- test/dummy/public/500.html
|
135
152
|
- test/dummy/public/favicon.ico
|
136
153
|
- test/dummy/script/rails
|
154
|
+
- test/dummy_apis_controller_spec.rb
|
137
155
|
- test/dummy_stripes_controller_spec.rb
|
138
156
|
- test/event.json
|
139
157
|
- test/invoice.json
|
@@ -145,6 +163,7 @@ files:
|
|
145
163
|
- test/support/application_system_test_case.rb
|
146
164
|
- test/support/callback_helpers.rb
|
147
165
|
- test/support/null_system_test_case.rb
|
166
|
+
- test/testing_spec.rb
|
148
167
|
homepage: https://github.com/Everapps/stripe-rails
|
149
168
|
licenses:
|
150
169
|
- MIT
|
@@ -165,7 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
165
184
|
version: '0'
|
166
185
|
requirements: []
|
167
186
|
rubyforge_project:
|
168
|
-
rubygems_version: 2.6.
|
187
|
+
rubygems_version: 2.6.11
|
169
188
|
signing_key:
|
170
189
|
specification_version: 4
|
171
190
|
summary: A gem to integrate stripe into your rails app
|
@@ -177,6 +196,7 @@ test_files:
|
|
177
196
|
- test/dummy/Rakefile
|
178
197
|
- test/dummy/app/assets/javascripts/application.js
|
179
198
|
- test/dummy/app/assets/stylesheets/application.css
|
199
|
+
- test/dummy/app/controllers/apis_controller.rb
|
180
200
|
- test/dummy/app/controllers/application_controller.rb
|
181
201
|
- test/dummy/app/controllers/stripes_controller.rb
|
182
202
|
- test/dummy/app/helpers/application_helper.rb
|
@@ -210,6 +230,7 @@ test_files:
|
|
210
230
|
- test/dummy/public/500.html
|
211
231
|
- test/dummy/public/favicon.ico
|
212
232
|
- test/dummy/script/rails
|
233
|
+
- test/dummy_apis_controller_spec.rb
|
213
234
|
- test/dummy_stripes_controller_spec.rb
|
214
235
|
- test/event.json
|
215
236
|
- test/invoice.json
|
@@ -221,3 +242,4 @@ test_files:
|
|
221
242
|
- test/support/application_system_test_case.rb
|
222
243
|
- test/support/callback_helpers.rb
|
223
244
|
- test/support/null_system_test_case.rb
|
245
|
+
- test/testing_spec.rb
|