stripe_webhooks 0.3 → 0.4
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/app/controllers/stripe_webhooks/events_controller.rb +6 -3
- data/app/models/stripe_webhooks/event.rb +11 -1
- data/db/migrate/20170201175643_add_user_id_to_stripe_webhook_events.rb +8 -0
- data/lib/generators/stripe_webhooks/callback_generator.rb +2 -2
- data/lib/stripe_webhooks/version.rb +1 -1
- data/spec/controllers/stripe_webhooks/events_controller_spec.rb +10 -6
- data/spec/dummy/config/application.rb +0 -3
- data/spec/dummy/config/environments/test.rb +2 -2
- data/spec/dummy/db/schema.rb +17 -18
- data/spec/rails_helper.rb +0 -3
- metadata +20 -19
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f069c998280e950ef58ee9cf8e78bf94f44cc458
|
|
4
|
+
data.tar.gz: 3fabcf9db7389bb00ebfce7cbbd689094b78c949
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 261e7691366f50ae94e5a8613ef18ebd685c66a6c37136cbf71ca29a31c9a2975a3dc4ec1f574d0ba6211f89989d5390b15c4546e957956fee25f9aebfcc9fe4
|
|
7
|
+
data.tar.gz: 1cdeb62697cbfa7765dbddc14eae12252c5aed2bdcc3f3dff4acdcb7e52cd316d32b020b6fb906f03d24151ce47585955b276ea7a427a6ecd0242e865bca82e3
|
|
@@ -8,17 +8,20 @@ module StripeWebhooks
|
|
|
8
8
|
begin
|
|
9
9
|
raw_data = JSON.parse(request.body.read)
|
|
10
10
|
rescue JSON::ParserError => e
|
|
11
|
-
render
|
|
11
|
+
render plain: e.message, status: 400
|
|
12
12
|
return
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
@event = StripeWebhooks::Event.find_or_initialize_by(stripe_event_id: raw_data['id'])
|
|
16
|
+
@event.stripe_event_type = raw_data['type']
|
|
17
|
+
@event.livemode = raw_data['livemode']
|
|
18
|
+
@event.user_id = raw_data['user_id']
|
|
16
19
|
|
|
17
20
|
if @event.save()
|
|
18
21
|
StripeWebhooks::ProcessorJob.perform_later(@event)
|
|
19
|
-
|
|
22
|
+
head :ok
|
|
20
23
|
else
|
|
21
|
-
render
|
|
24
|
+
render plain: @event.errors.full_messages.first, status: 422
|
|
22
25
|
end
|
|
23
26
|
end
|
|
24
27
|
|
|
@@ -8,7 +8,7 @@ module StripeWebhooks
|
|
|
8
8
|
Rails.logger.warn('The event you requested was created over 30 days ago,
|
|
9
9
|
which means it may no longer be available via the Stripe Events API.')
|
|
10
10
|
end
|
|
11
|
-
@_stripe_event ||=
|
|
11
|
+
@_stripe_event ||= fetch_event
|
|
12
12
|
return @_stripe_event
|
|
13
13
|
end
|
|
14
14
|
|
|
@@ -32,5 +32,15 @@ module StripeWebhooks
|
|
|
32
32
|
return true
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def fetch_event
|
|
38
|
+
if user_id
|
|
39
|
+
Stripe::Event.retrieve(stripe_event_id, stripe_account: user_id)
|
|
40
|
+
else
|
|
41
|
+
Stripe::Event.retrieve(stripe_event_id)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
35
45
|
end
|
|
36
46
|
end
|
|
@@ -15,9 +15,9 @@ module StripeWebhooks
|
|
|
15
15
|
end
|
|
16
16
|
template 'callback.rb.erb', "app/callbacks/#{name.underscore}_callback.rb"
|
|
17
17
|
|
|
18
|
-
if defined?(RSpec)
|
|
18
|
+
if defined?(RSpec) && Dir.exist?(Rails.root.join('spec'))
|
|
19
19
|
template 'callback_spec.rb.erb',
|
|
20
|
-
|
|
20
|
+
Rails.root.join('spec', 'callbacks', "#{name.underscore}_callback_spec.rb")
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
|
|
@@ -11,33 +11,37 @@ module StripeWebhooks
|
|
|
11
11
|
describe 'POST #create' do
|
|
12
12
|
it 'should create the event' do
|
|
13
13
|
expect do
|
|
14
|
-
post :create, customer_created
|
|
14
|
+
post :create, body: customer_created, format: :json
|
|
15
15
|
end.to change(StripeWebhooks::Event, :count).by(1)
|
|
16
16
|
expect(response).to have_http_status(:success)
|
|
17
17
|
end
|
|
18
18
|
|
|
19
19
|
it 'should not create a duplicate event' do
|
|
20
|
-
post :create, customer_created
|
|
20
|
+
post :create, body: customer_created, format: :json
|
|
21
21
|
expect do
|
|
22
|
-
post :create, customer_created
|
|
22
|
+
post :create, body: customer_created, format: :json
|
|
23
23
|
end.to_not change(StripeWebhooks::Event, :count)
|
|
24
24
|
expect(response).to have_http_status(:success)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
it 'should queue an active job' do
|
|
28
28
|
expect do
|
|
29
|
-
post :create, customer_created
|
|
29
|
+
post :create, body: customer_created, format: :json
|
|
30
30
|
end.to change(ActiveJob::Base.queue_adapter.enqueued_jobs, :length).by(1)
|
|
31
31
|
expect(ActiveJob::Base.queue_adapter.enqueued_jobs.last[:job]).to eq(StripeWebhooks::ProcessorJob)
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
it 'should return an 400 error when the JSON is poorly formed' do
|
|
35
|
-
post :create,
|
|
35
|
+
post :create,
|
|
36
|
+
body: File.read(StripeWebhooks::Engine.root.join('spec', 'data', 'parse_error.json')),
|
|
37
|
+
format: :json
|
|
36
38
|
expect(response).to have_http_status(400)
|
|
37
39
|
end
|
|
38
40
|
|
|
39
41
|
it 'should return a 422 error when the provided data is not valid' do
|
|
40
|
-
post :create,
|
|
42
|
+
post :create,
|
|
43
|
+
body: File.read(StripeWebhooks::Engine.root.join('spec', 'data', 'invalid_data.json')),
|
|
44
|
+
format: :json
|
|
41
45
|
expect(response).to have_http_status(422)
|
|
42
46
|
end
|
|
43
47
|
end
|
|
@@ -19,8 +19,5 @@ module Dummy
|
|
|
19
19
|
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
|
|
20
20
|
# config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
|
|
21
21
|
# config.i18n.default_locale = :de
|
|
22
|
-
|
|
23
|
-
# Do not swallow errors in after_commit/after_rollback callbacks.
|
|
24
|
-
config.active_record.raise_in_transactional_callbacks = true
|
|
25
22
|
end
|
|
26
23
|
end
|
|
@@ -13,8 +13,8 @@ Rails.application.configure do
|
|
|
13
13
|
config.eager_load = false
|
|
14
14
|
|
|
15
15
|
# Configure static file server for tests with Cache-Control for performance.
|
|
16
|
-
config.
|
|
17
|
-
config.
|
|
16
|
+
config.public_file_server.enabled = true
|
|
17
|
+
config.public_file_server.headers = { 'Cache-Control' => 'public, max-age=3600' }
|
|
18
18
|
|
|
19
19
|
# Show full error reports and disable caching.
|
|
20
20
|
config.consider_all_requests_local = true
|
data/spec/dummy/db/schema.rb
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
# encoding: UTF-8
|
|
2
1
|
# This file is auto-generated from the current state of the database. Instead
|
|
3
2
|
# of editing this file, please use the migrations feature of Active Record to
|
|
4
3
|
# incrementally modify your database, and then regenerate this schema definition.
|
|
@@ -11,27 +10,27 @@
|
|
|
11
10
|
#
|
|
12
11
|
# It's strongly recommended that you check this file into your version control system.
|
|
13
12
|
|
|
14
|
-
ActiveRecord::Schema.define(version:
|
|
13
|
+
ActiveRecord::Schema.define(version: 20170201180822) do
|
|
15
14
|
|
|
16
|
-
create_table "stripe_webhooks_events", force: :cascade do |t|
|
|
17
|
-
t.string "stripe_event_id"
|
|
18
|
-
t.string "stripe_event_type"
|
|
15
|
+
create_table "stripe_webhooks_events", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
|
|
16
|
+
t.string "stripe_event_id"
|
|
17
|
+
t.string "stripe_event_type"
|
|
19
18
|
t.datetime "stripe_created_at"
|
|
20
|
-
t.boolean "is_processed",
|
|
21
|
-
t.boolean "is_authentic",
|
|
22
|
-
t.datetime "created_at",
|
|
23
|
-
t.datetime "updated_at",
|
|
19
|
+
t.boolean "is_processed", default: false
|
|
20
|
+
t.boolean "is_authentic", default: false
|
|
21
|
+
t.datetime "created_at", null: false
|
|
22
|
+
t.datetime "updated_at", null: false
|
|
23
|
+
t.string "user_id"
|
|
24
|
+
t.boolean "livemode", default: false
|
|
25
|
+
t.index ["stripe_event_id"], name: "index_stripe_webhooks_events_on_stripe_event_id", unique: true, using: :btree
|
|
24
26
|
end
|
|
25
27
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
t.
|
|
30
|
-
t.
|
|
31
|
-
t.
|
|
32
|
-
t.datetime "updated_at", null: false
|
|
28
|
+
create_table "stripe_webhooks_performed_callbacks", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
|
|
29
|
+
t.string "stripe_event_id", null: false
|
|
30
|
+
t.string "label", null: false
|
|
31
|
+
t.datetime "created_at", null: false
|
|
32
|
+
t.datetime "updated_at", null: false
|
|
33
|
+
t.index ["stripe_event_id", "label"], name: "index_stripe_webhooks_performed_callbacks_event_id_label", using: :btree
|
|
33
34
|
end
|
|
34
35
|
|
|
35
|
-
add_index "stripe_webhooks_performed_callbacks", ["stripe_event_id", "label"], name: "index_stripe_webhooks_performed_callbacks_event_id_label", using: :btree
|
|
36
|
-
|
|
37
36
|
end
|
data/spec/rails_helper.rb
CHANGED
|
@@ -11,9 +11,6 @@ require 'stripe_mock'
|
|
|
11
11
|
require 'simplecov'
|
|
12
12
|
SimpleCov.start 'rails'
|
|
13
13
|
|
|
14
|
-
require 'codeclimate-test-reporter'
|
|
15
|
-
CodeClimate::TestReporter.start
|
|
16
|
-
|
|
17
14
|
# Requires supporting ruby files with custom matchers and macros, etc, in
|
|
18
15
|
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
|
|
19
16
|
# run as spec files by default. This means that files in spec/support that end
|
metadata
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: stripe_webhooks
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: '0.
|
|
4
|
+
version: '0.4'
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Moser Consulting
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2017-02-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - "
|
|
17
|
+
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
19
|
+
version: '4.0'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- - "
|
|
24
|
+
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
26
|
+
version: '4.0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: stripe
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -58,56 +58,56 @@ dependencies:
|
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: 3.
|
|
61
|
+
version: 3.5.0
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: 3.
|
|
68
|
+
version: 3.5.0
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: factory_girl_rails
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
73
|
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: 4.
|
|
75
|
+
version: 4.8.0
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: 4.
|
|
82
|
+
version: 4.8.0
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
84
|
name: database_cleaner
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
|
-
- - "
|
|
87
|
+
- - ">="
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
|
-
version:
|
|
89
|
+
version: '0'
|
|
90
90
|
type: :development
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
|
-
- - "
|
|
94
|
+
- - ">="
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
|
-
version:
|
|
96
|
+
version: '0'
|
|
97
97
|
- !ruby/object:Gem::Dependency
|
|
98
98
|
name: simplecov
|
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
|
100
100
|
requirements:
|
|
101
|
-
- - "
|
|
101
|
+
- - ">="
|
|
102
102
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: 0
|
|
103
|
+
version: '0'
|
|
104
104
|
type: :development
|
|
105
105
|
prerelease: false
|
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
107
|
requirements:
|
|
108
|
-
- - "
|
|
108
|
+
- - ">="
|
|
109
109
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: 0
|
|
110
|
+
version: '0'
|
|
111
111
|
- !ruby/object:Gem::Dependency
|
|
112
112
|
name: stripe-ruby-mock
|
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -173,6 +173,7 @@ files:
|
|
|
173
173
|
- config/routes.rb
|
|
174
174
|
- db/migrate/20150715152905_create_stripe_webhooks_events.rb
|
|
175
175
|
- db/migrate/20150716195741_create_stripe_webhooks_performed_callbacks.rb
|
|
176
|
+
- db/migrate/20170201175643_add_user_id_to_stripe_webhook_events.rb
|
|
176
177
|
- lib/generators/stripe_webhooks.rb
|
|
177
178
|
- lib/generators/stripe_webhooks/callback_generator.rb
|
|
178
179
|
- lib/generators/stripe_webhooks/templates/application_callback.rb.erb
|
|
@@ -253,7 +254,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
253
254
|
version: '0'
|
|
254
255
|
requirements: []
|
|
255
256
|
rubyforge_project:
|
|
256
|
-
rubygems_version: 2.5.
|
|
257
|
+
rubygems_version: 2.5.2
|
|
257
258
|
signing_key:
|
|
258
259
|
specification_version: 4
|
|
259
260
|
summary: Stripe Webhook event capture and processing engine.
|