stripe_webhooks 0.1 → 0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: db9fc92d2726f727a3658c8c11de00784440a412
4
- data.tar.gz: 41d70d0e78569b17bee76405aab05b340bad361c
3
+ metadata.gz: e0592b945f0b8f6dcc22b465338e266edb8e1da4
4
+ data.tar.gz: 7f35b9a9f565afb154351f6486319f79ba398e41
5
5
  SHA512:
6
- metadata.gz: 4304d004d08aa941ff8941a6c29cfd1f2d50f03317923d2506c375a75a79701cd3607a45c8c31e73bc46e1fb5c62e4b1e085baa0eee7f25364f3edaf1dc0b753
7
- data.tar.gz: b9b8a6ded885468ee5a6af6f5b83daf74c919da4bb7f455d46f6064267c1c543b9a0ebb82df4e75e463d78866c1a991f856ff765c970412aa4478779c4a80179
6
+ metadata.gz: 31e2ee5f45feb89438cfc0d866b2022fa115c6bb9ccfefcde9a038c334fb63f601fc2cabba118547d1fa9809ee09907123f65e47d976ad71d10865f45f445853
7
+ data.tar.gz: aca513f030fac3f13cc4d800cd65fa8c6df60920d35307002d6fd3ee6f65fa2084291f601400a321a952d8d0d61187aba55ab20df1b447d5fd69d928fe3e461b
data/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # StripeWebhooks
2
2
 
3
+ [![Code Climate](https://codeclimate.com/github/westlakedesign/stripe_webhooks/badges/gpa.svg)](https://codeclimate.com/github/westlakedesign/stripe_webhooks)
4
+ [![Test Coverage](https://codeclimate.com/github/westlakedesign/stripe_webhooks/badges/coverage.svg)](https://codeclimate.com/github/westlakedesign/stripe_webhooks/coverage)
5
+ [![Build Status](https://semaphoreci.com/api/v1/moser-it/stripe_webhooks/branches/master/shields_badge.svg)](https://semaphoreci.com/moser-it/stripe_webhooks)
6
+
3
7
  StripeWebhooks is a Rails engine for dealing with data posted from [Stripe via Webhooks](https://stripe.com/docs/webhooks).
4
8
 
5
9
  ## Goals
@@ -50,12 +54,7 @@ Create a callback object using the generator, which accepts a name argument foll
50
54
 
51
55
  *See the [official documentation](https://stripe.com/docs/api/ruby#event_types) for a list of possible events.*
52
56
 
53
- This will do a few things for you:
54
-
55
- 1. Appends an entry to `config/initializers/stripe_webhook_callbacks.rb`, and creates this file if it does not exist.
56
- 2. Creates a new callback object at `app/callbacks/NAME_callback.rb`
57
-
58
- A callback is a simple ruby object with a `#run` method.
57
+ This will creates a new callback object at `app/callbacks/NAME_callback.rb`. A callback is a simple ruby object with a `handles_events` declaration and a `#run` method.
59
58
 
60
59
  class CustomerCallback < ApplicationCallback
61
60
  handles_events 'customer.created', 'customer.updated', 'customer.deleted'
@@ -65,8 +64,3 @@ A callback is a simple ruby object with a `#run` method.
65
64
  end
66
65
 
67
66
  end
68
-
69
- Callbacks must be registered in order to be recognized. If you ran the generator, this will have been done for you in an initializer.
70
-
71
- StripeWebhooks.register_callback('customer')
72
-
data/Rakefile CHANGED
@@ -14,14 +14,11 @@ RDoc::Task.new(:rdoc) do |rdoc|
14
14
  rdoc.rdoc_files.include('lib/**/*.rb')
15
15
  end
16
16
 
17
- APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
17
+ APP_RAKEFILE = File.expand_path('../spec/dummy/Rakefile', __FILE__)
18
18
  load 'rails/tasks/engine.rake'
19
19
 
20
-
21
20
  load 'rails/tasks/statistics.rake'
22
21
 
23
-
24
-
25
22
  Bundler::GemHelper.install_tasks
26
23
 
27
24
  require 'rake/testtask'
@@ -33,5 +30,4 @@ Rake::TestTask.new(:test) do |t|
33
30
  t.verbose = false
34
31
  end
35
32
 
36
-
37
33
  task default: :test
@@ -1,24 +1,24 @@
1
- require_dependency "stripe_webhooks/application_controller"
1
+ require_dependency 'stripe_webhooks/application_controller'
2
2
 
3
3
  module StripeWebhooks
4
4
  class EventsController < ApplicationController
5
- protect_from_forgery :except => :create
5
+ protect_from_forgery except: :create
6
6
 
7
7
  def create
8
8
  begin
9
9
  raw_data = JSON.parse(request.body.read)
10
10
  rescue JSON::ParserError => e
11
- render :text => e.message, :status => 400
11
+ render text: e.message, status: 400
12
12
  return
13
13
  end
14
14
 
15
- @event = StripeWebhooks::Event.find_or_initialize_by(:stripe_event_id => raw_data['id'])
15
+ @event = StripeWebhooks::Event.find_or_initialize_by(stripe_event_id: raw_data['id'])
16
16
 
17
17
  if @event.save()
18
18
  StripeWebhooks::ProcessorJob.perform_later(@event)
19
- render :nothing => true, :status => 200
19
+ render nothing: true, status: 200
20
20
  else
21
- render :text => @event.errors.full_messages.first, :status => 422
21
+ render text: @event.errors.full_messages.first, status: 422
22
22
  end
23
23
  end
24
24
 
@@ -4,9 +4,7 @@ module StripeWebhooks
4
4
 
5
5
  def perform(event)
6
6
  event.validate!
7
- if event.is_authentic?
8
- event.run_callbacks!
9
- end
7
+ event.run_callbacks! if event.is_authentic?
10
8
  end
11
9
 
12
10
  end
@@ -14,9 +14,7 @@ module StripeWebhooks
14
14
  StripeWebhooks.callbacks.each do |label|
15
15
  class_name = "#{label.classify}Callback"
16
16
  callback = class_name.constantize.new
17
- if callback.handles?(event_type)
18
- callback.run_once(event)
19
- end
17
+ callback.run_once(event) if callback.handles?(event_type)
20
18
  end
21
19
  end
22
20
 
@@ -34,6 +32,12 @@ module StripeWebhooks
34
32
  def handles_events(*event_types)
35
33
  @event_types = event_types
36
34
  end
35
+
36
+ # Automatically register subclasses
37
+ #
38
+ def inherited(subclass)
39
+ StripeWebhooks.register_callback(subclass.new.label)
40
+ end
37
41
  end
38
42
  extend ClassMethods
39
43
 
@@ -50,9 +54,9 @@ module StripeWebhooks
50
54
  # Run the callback only if we have not run it once before
51
55
  #
52
56
  def run_once(event)
53
- if !StripeWebhooks::PerformedCallback.exists?(:stripe_event_id => event.id, :label => label)
57
+ unless StripeWebhooks::PerformedCallback.exists?(stripe_event_id: event.id, label: label)
54
58
  run(event)
55
- StripeWebhooks::PerformedCallback.create(:stripe_event_id => event.id, :label => label)
59
+ StripeWebhooks::PerformedCallback.create(stripe_event_id: event.id, label: label)
56
60
  end
57
61
  end
58
62
 
@@ -1,11 +1,12 @@
1
1
  module StripeWebhooks
2
2
  class Event < ActiveRecord::Base
3
- validates :stripe_event_id, :presence => true, :uniqueness => true
4
- has_many :performed_callbacks, :primary_key => :stripe_event_id, :foreign_key => :stripe_event_id
3
+ validates :stripe_event_id, presence: true, uniqueness: true
4
+ has_many :performed_callbacks, primary_key: :stripe_event_id, foreign_key: :stripe_event_id
5
5
 
6
6
  def stripe_event
7
7
  if created_at < 30.days.ago
8
- Rails.logger.warn('The event you requested was created over 30 days ago, which means it may no longer be available via the Stripe Events API.')
8
+ Rails.logger.warn('The event you requested was created over 30 days ago,
9
+ which means it may no longer be available via the Stripe Events API.')
9
10
  end
10
11
  @_stripe_event ||= Stripe::Event.retrieve(stripe_event_id)
11
12
  return @_stripe_event
@@ -15,21 +16,19 @@ module StripeWebhooks
15
16
  return true if is_authentic
16
17
  begin
17
18
  event = stripe_event()
18
- update_attributes({
19
- :is_processed => true,
20
- :is_authentic => true,
21
- :stripe_event_type => event.type,
22
- :stripe_created_at => Time.at(event.created).to_datetime
23
- })
19
+ update_attributes(is_processed: true,
20
+ is_authentic: true,
21
+ stripe_event_type: event.type,
22
+ stripe_created_at: Time.zone.at(event.created).to_datetime)
24
23
  return true
25
24
  rescue Stripe::InvalidRequestError
26
- update_attributes(:is_processed => true, :is_authentic => false)
25
+ update_attributes(is_processed: true, is_authentic: false)
27
26
  return false
28
27
  end
29
28
  end
30
29
 
31
30
  def run_callbacks!
32
- StripeWebhooks::Callback.run_callbacks_for(self.stripe_event_type, self.stripe_event)
31
+ StripeWebhooks::Callback.run_callbacks_for(stripe_event_type, stripe_event)
33
32
  return true
34
33
  end
35
34
 
@@ -1,5 +1,5 @@
1
1
  module StripeWebhooks
2
2
  class PerformedCallback < ActiveRecord::Base
3
- belongs_to :event, :primary_key => :stripe_event_id, :foreign_key => :stripe_event_id
3
+ belongs_to :event, primary_key: :stripe_event_id, foreign_key: :stripe_event_id
4
4
  end
5
5
  end
@@ -3,24 +3,22 @@ require 'generators/stripe_webhooks'
3
3
  module StripeWebhooks
4
4
  module Generators
5
5
  class CallbackGenerator < Base
6
- desc "Creates a stripe webhook callback object"
7
- argument :event_types, :type => :array, :default => [], :banner => 'event.type.a event.type.b ...'
6
+ desc 'Creates a stripe webhook callback object'
7
+ argument :event_types, type: :array, default: [], banner: 'event.type.a event.type.b ...'
8
8
 
9
9
  source_root File.expand_path('../templates', __FILE__)
10
10
 
11
11
  def create_callback
12
12
  application_callback = 'app/callbacks/application_callback.rb'
13
- if !File.exist?(application_callback)
13
+ unless File.exist?(application_callback)
14
14
  template 'application_callback.rb.erb', application_callback
15
15
  end
16
-
17
16
  template 'callback.rb.erb', "app/callbacks/#{name.underscore}_callback.rb"
18
-
19
- initializer = 'config/initializers/stripe_webhook_callbacks.rb'
20
- if !File.exist?(initializer)
21
- create_file(initializer)
17
+
18
+ if defined?(RSpec)
19
+ template 'callback_spec.rb.erb',
20
+ "#{RSpec.configuration.default_path}/callbacks/#{name.underscore}_callback_spec.rb"
22
21
  end
23
- append_to_file initializer, "StripeWebhooks.register_callback('#{name.underscore}')\n"
24
22
  end
25
23
 
26
24
  end
@@ -0,0 +1,10 @@
1
+ require 'rails_helper'
2
+
3
+ describe <%= name %>Callback do
4
+ pending "add some examples to (or delete) #{__FILE__}"
5
+
6
+ describe '#run' do
7
+
8
+ end
9
+
10
+ end
@@ -1,6 +1,5 @@
1
1
  module StripeWebhooks
2
2
  module Callbacks
3
-
4
3
  def self.included(base)
5
4
  base.instance_variable_set(:@callbacks, [])
6
5
  base.extend ClassMethods
@@ -14,11 +13,10 @@ module StripeWebhooks
14
13
  # === Example
15
14
  #
16
15
  # StripeWebhooks.register_callback('my_callback')
17
- #
16
+ #
18
17
  def register_callback(label)
19
- @callbacks << label
18
+ @callbacks << label unless @callbacks.include?(label) || label == 'application'
20
19
  end
21
20
  end
22
-
23
21
  end
24
22
  end
@@ -4,8 +4,8 @@ module StripeWebhooks
4
4
  config.autoload_paths << "#{root}/lib"
5
5
 
6
6
  config.generators do |g|
7
- g.test_framework :rspec, :fixture => false
8
- g.fixture_replacement :factory_girl, :dir => 'spec/factories'
7
+ g.test_framework :rspec, fixture: false
8
+ g.fixture_replacement :factory_girl, dir: 'spec/factories'
9
9
  g.assets false
10
10
  g.helper true
11
11
  end
@@ -1,3 +1,3 @@
1
1
  module StripeWebhooks
2
- VERSION = "0.1"
2
+ VERSION = '0.3'.freeze
3
3
  end
@@ -1,5 +1,5 @@
1
- require "stripe_webhooks/engine"
2
- require "stripe_webhooks/callbacks"
1
+ require 'stripe_webhooks/engine'
2
+ require 'stripe_webhooks/callbacks'
3
3
 
4
4
  module StripeWebhooks
5
5
  include Callbacks
@@ -2,47 +2,44 @@ require 'rails_helper'
2
2
 
3
3
  module StripeWebhooks
4
4
  RSpec.describe EventsController, type: :controller do
5
-
6
5
  routes { StripeWebhooks::Engine.routes }
7
6
 
8
- let(:customer_created){
7
+ let(:customer_created) do
9
8
  StripeMock.mock_webhook_payload('customer.created').to_json
10
- }
11
-
12
- describe "POST #create" do
9
+ end
13
10
 
14
- it "should create the event" do
15
- expect{
11
+ describe 'POST #create' do
12
+ it 'should create the event' do
13
+ expect do
16
14
  post :create, customer_created
17
- }.to change(StripeWebhooks::Event, :count).by(1)
15
+ end.to change(StripeWebhooks::Event, :count).by(1)
18
16
  expect(response).to have_http_status(:success)
19
17
  end
20
18
 
21
- it "should not create a duplicate event" do
19
+ it 'should not create a duplicate event' do
22
20
  post :create, customer_created
23
- expect{
21
+ expect do
24
22
  post :create, customer_created
25
- }.to_not change(StripeWebhooks::Event, :count)
23
+ end.to_not change(StripeWebhooks::Event, :count)
26
24
  expect(response).to have_http_status(:success)
27
25
  end
28
26
 
29
- it "should queue an active job" do
30
- expect{
27
+ it 'should queue an active job' do
28
+ expect do
31
29
  post :create, customer_created
32
- }.to change(ActiveJob::Base.queue_adapter.enqueued_jobs, :length).by(1)
30
+ end.to change(ActiveJob::Base.queue_adapter.enqueued_jobs, :length).by(1)
33
31
  expect(ActiveJob::Base.queue_adapter.enqueued_jobs.last[:job]).to eq(StripeWebhooks::ProcessorJob)
34
32
  end
35
33
 
36
- it "should return an 400 error when the JSON is poorly formed" do
34
+ it 'should return an 400 error when the JSON is poorly formed' do
37
35
  post :create, File.read(StripeWebhooks::Engine.root.join('spec', 'data', 'parse_error.json'))
38
36
  expect(response).to have_http_status(400)
39
37
  end
40
38
 
41
- it "should return a 422 error when the provided data is not valid" do
39
+ it 'should return a 422 error when the provided data is not valid' do
42
40
  post :create, File.read(StripeWebhooks::Engine.root.join('spec', 'data', 'invalid_data.json'))
43
41
  expect(response).to have_http_status(422)
44
42
  end
45
43
  end
46
-
47
44
  end
48
45
  end
@@ -1,9 +1,10 @@
1
1
  require File.expand_path('../boot', __FILE__)
2
2
 
3
3
  require 'rails/all'
4
+ require 'stripe'
4
5
 
5
6
  Bundler.require(*Rails.groups)
6
- require "stripe_webhooks"
7
+ require 'stripe_webhooks'
7
8
 
8
9
  module Dummy
9
10
  class Application < Rails::Application
@@ -23,4 +24,3 @@ module Dummy
23
24
  config.active_record.raise_in_transactional_callbacks = true
24
25
  end
25
26
  end
26
-
@@ -6,8 +6,9 @@
6
6
  #
7
7
  default: &default
8
8
  adapter: mysql2
9
- username: root
9
+ username: <%= ENV['DATABASE_USERNAME'] || 'root' %>
10
10
 
11
11
  test:
12
12
  <<: *default
13
- database: stripe_webhooks_test
13
+ database: <%= ENV['DATABASE_NAME_TEST'] || 'stripe_webhooks_test' %>
14
+ password: <%= ENV['DATABASE_PASSWORD'] %>
@@ -41,4 +41,6 @@ Rails.application.configure do
41
41
  # config.action_view.raise_on_missing_translations = true
42
42
 
43
43
  config.active_job.queue_adapter = :test
44
+
45
+ Stripe.api_key = 'ABCD123'
44
46
  end
@@ -1,3 +1,3 @@
1
1
  Rails.application.routes.draw do
2
- mount StripeWebhooks::Engine => "/stripe_webhooks"
2
+ mount StripeWebhooks::Engine => '/stripe_webhooks'
3
3
  end
@@ -1,8 +1,8 @@
1
1
  FactoryGirl.define do
2
- factory :stripe_webhooks_event, :class => 'StripeWebhooks::Event' do
3
- stripe_event_id "evt_00000000000000"
4
- stripe_event_type "charge.succeeded"
5
- stripe_created_at DateTime.now()
2
+ factory :stripe_webhooks_event, class: 'StripeWebhooks::Event' do
3
+ stripe_event_id 'evt_00000000000000'
4
+ stripe_event_type 'charge.succeeded'
5
+ stripe_created_at DateTime.current
6
6
  is_processed true
7
7
  is_authentic true
8
8
  end
@@ -1,7 +1,6 @@
1
1
  FactoryGirl.define do
2
- factory :stripe_webhooks_performed_callback, :class => 'StripeWebhooks::PerformedCallback' do
3
- stripe_event_id "MyString"
4
- label "MyString"
2
+ factory :stripe_webhooks_performed_callback, class: 'StripeWebhooks::PerformedCallback' do
3
+ stripe_event_id 'MyString'
4
+ label 'MyString'
5
5
  end
6
-
7
6
  end
@@ -12,6 +12,5 @@ require 'rails_helper'
12
12
  # end
13
13
  module StripeWebhooks
14
14
  RSpec.describe EventsHelper, type: :helper do
15
-
16
15
  end
17
16
  end
@@ -2,22 +2,19 @@ require 'rails_helper'
2
2
 
3
3
  module StripeWebhooks
4
4
  RSpec.describe ProcessorJob, type: :job do
5
-
6
5
  describe '#perform' do
7
6
  it 'should validate the event and run callbacks' do
8
7
  mock_event = StripeMock.mock_webhook_event('customer.created')
9
- event = StripeWebhooks::Event.create(:stripe_event_id => mock_event.id)
8
+ event = StripeWebhooks::Event.create(stripe_event_id: mock_event.id)
10
9
  expect(event).to receive(:run_callbacks!)
11
10
  StripeWebhooks::ProcessorJob.new(event).perform_now
12
11
  end
13
12
 
14
13
  it 'should not run callbacks on an event that is not authentic' do
15
- event = StripeWebhooks::Event.create(:stripe_event_id => 'fail!')
14
+ event = StripeWebhooks::Event.create(stripe_event_id: 'fail!')
16
15
  expect(event).to_not receive(:run_callbacks!)
17
16
  StripeWebhooks::ProcessorJob.perform_now(event)
18
17
  end
19
-
20
18
  end
21
-
22
19
  end
23
20
  end
@@ -2,19 +2,22 @@ require 'rails_helper'
2
2
 
3
3
  module StripeWebhooks
4
4
  RSpec.describe Callbacks do
5
-
6
- class ::HelloWorldCallback < StripeWebhooks::Callback
7
- handles_events 'test'
5
+ # We need to reset the callbacks array to its original state after this spec runs
6
+ before(:all) do
7
+ @callbacks_original = StripeWebhooks.callbacks
8
+ StripeWebhooks.instance_variable_set(:@callbacks, [])
9
+ end
10
+ after(:all) do
11
+ StripeWebhooks.instance_variable_set(:@callbacks, @callbacks_original)
8
12
  end
9
13
 
10
14
  describe '.register_callback' do
11
15
  it 'should append the label to the list of callbacks' do
12
- expect{
13
- StripeWebhooks.register_callback('hello_world')
14
- }.to change(StripeWebhooks.callbacks, :length).by(1)
15
- expect(StripeWebhooks.callbacks.last).to eq('hello_world')
16
+ expect do
17
+ StripeWebhooks.register_callback('some_callback')
18
+ end.to change(StripeWebhooks.callbacks, :length).by(1)
19
+ expect(StripeWebhooks.callbacks.last).to eq('some_callback')
16
20
  end
17
21
  end
18
-
19
22
  end
20
23
  end
@@ -2,17 +2,15 @@ require 'rails_helper'
2
2
 
3
3
  module StripeWebhooks
4
4
  RSpec.describe Callback, type: :model do
5
-
6
5
  class ::CustomerCallback < StripeWebhooks::Callback
7
6
  handles_events 'customer.created', 'customer.updated'
8
7
  mattr_accessor :callback_has_ran
9
8
  mattr_accessor :run_count
10
- def run(event)
9
+ def run(_event)
11
10
  self.run_count += 1
12
11
  self.callback_has_ran = true
13
12
  end
14
13
  end
15
- StripeWebhooks.register_callback('customer')
16
14
 
17
15
  # Reset the callback_has_ran flag for each test so we can tell if the callback was triggered
18
16
  before(:each) do
@@ -40,6 +38,20 @@ module StripeWebhooks
40
38
  end
41
39
  end
42
40
 
41
+ describe '.inherited' do
42
+ it 'should automatically register subclasses' do
43
+ expect do
44
+ class ::HelloWorldCallback < ApplicationCallback
45
+ handles_events 'test'
46
+ end
47
+ end.to change(StripeWebhooks.callbacks, :length).by(1)
48
+ expect(StripeWebhooks.callbacks.last).to eq('hello_world')
49
+ end
50
+ it 'should not register the application callback base class' do
51
+ expect(StripeWebhooks.callbacks).to_not include('application')
52
+ end
53
+ end
54
+
43
55
  describe '#label' do
44
56
  it 'should return a label string' do
45
57
  expect(CustomerCallback.new.label).to eq('customer')
@@ -58,9 +70,9 @@ module StripeWebhooks
58
70
  callback = CustomerCallback.new()
59
71
  event = StripeMock.mock_webhook_event('customer.created')
60
72
  callback.run_once(event)
61
- expect{
73
+ expect do
62
74
  callback.run_once(event)
63
- }.to_not change(CustomerCallback, :run_count)
75
+ end.to_not change(CustomerCallback, :run_count)
64
76
  expect(CustomerCallback.run_count).to eq(1)
65
77
  end
66
78
  end
@@ -76,6 +88,5 @@ module StripeWebhooks
76
88
  expect(callback.handles?('charge.succeeded')).to eq(false)
77
89
  end
78
90
  end
79
-
80
91
  end
81
92
  end
@@ -2,24 +2,23 @@ require 'rails_helper'
2
2
 
3
3
  module StripeWebhooks
4
4
  RSpec.describe Event, type: :model do
5
-
6
5
  describe '#stripe_event' do
7
6
  it 'should return the event from the Stripe API' do
8
7
  mock_event = StripeMock.mock_webhook_event('customer.created')
9
- event = StripeWebhooks::Event.create(:stripe_event_id => mock_event.id)
8
+ event = StripeWebhooks::Event.create(stripe_event_id: mock_event.id)
10
9
  expect(event.stripe_event).to be_a(Stripe::Event)
11
10
  end
12
11
 
13
12
  it 'should trigger a Stripe::InvalidRequestError error' do
14
- event = StripeWebhooks::Event.create(:stripe_event_id => 'fail!')
15
- expect{
13
+ event = StripeWebhooks::Event.create(stripe_event_id: 'fail!')
14
+ expect do
16
15
  event.stripe_event
17
- }.to raise_error(Stripe::InvalidRequestError)
16
+ end.to raise_error(Stripe::InvalidRequestError)
18
17
  end
19
18
 
20
19
  it 'should log a warning if the event is too old' do
21
20
  mock_event = StripeMock.mock_webhook_event('customer.created')
22
- event = StripeWebhooks::Event.create(:stripe_event_id => mock_event.id, :created_at => 31.days.ago)
21
+ event = StripeWebhooks::Event.create(stripe_event_id: mock_event.id, created_at: 31.days.ago)
23
22
  expect(Rails.logger).to receive(:warn)
24
23
  event.stripe_event
25
24
  end
@@ -28,14 +27,14 @@ module StripeWebhooks
28
27
  describe '#validate!' do
29
28
  it 'should mark the event as authentic and update the columns' do
30
29
  mock_event = StripeMock.mock_webhook_event('customer.created')
31
- event = StripeWebhooks::Event.create(:stripe_event_id => mock_event.id)
30
+ event = StripeWebhooks::Event.create(stripe_event_id: mock_event.id)
32
31
  event.validate!
33
32
  expect(event.is_authentic).to eq(true)
34
33
  expect(event.is_processed).to eq(true)
35
34
  end
36
35
 
37
36
  it 'should mark the event as not authentic' do
38
- event = StripeWebhooks::Event.create(:stripe_event_id => 'fail!')
37
+ event = StripeWebhooks::Event.create(stripe_event_id: 'fail!')
39
38
  event.validate!
40
39
  expect(event.is_authentic).to eq(false)
41
40
  expect(event.is_processed).to eq(true)
@@ -45,12 +44,14 @@ module StripeWebhooks
45
44
  describe '#run_callbacks!' do
46
45
  it 'should run callbacks associated with the given event type' do
47
46
  mock_event = StripeMock.mock_webhook_event('customer.created')
48
- event = StripeWebhooks::Event.create(:stripe_event_id => mock_event.id)
47
+ event = StripeWebhooks::Event.create(stripe_event_id: mock_event.id)
49
48
  event.validate!
50
- expect(StripeWebhooks::Callback).to receive(:run_callbacks_for).with(event.stripe_event_type, event.stripe_event)
49
+ expect(StripeWebhooks::Callback).to receive(:run_callbacks_for).with(
50
+ event.stripe_event_type,
51
+ event.stripe_event
52
+ )
51
53
  event.run_callbacks!
52
54
  end
53
55
  end
54
-
55
56
  end
56
57
  end
@@ -2,6 +2,5 @@ require 'rails_helper'
2
2
 
3
3
  module StripeWebhooks
4
4
  RSpec.describe PerformedCallback, type: :model do
5
-
6
5
  end
7
6
  end
data/spec/rails_helper.rb CHANGED
@@ -1,17 +1,19 @@
1
1
  # This file is copied to spec/ when you run 'rails generate rspec:install'
2
2
  ENV['RAILS_ENV'] ||= 'test'
3
3
  require 'spec_helper'
4
- require File.expand_path("../dummy/config/environment.rb", __FILE__)
4
+ require File.expand_path('../dummy/config/environment.rb', __FILE__)
5
5
  require 'rspec/rails'
6
6
 
7
7
  # Add additional requires below this line. Rails is not loaded until this point!
8
8
  require 'database_cleaner'
9
- require "factory_girl_rails"
9
+ require 'factory_girl_rails'
10
10
  require 'stripe_mock'
11
11
  require 'simplecov'
12
-
13
12
  SimpleCov.start 'rails'
14
13
 
14
+ require 'codeclimate-test-reporter'
15
+ CodeClimate::TestReporter.start
16
+
15
17
  # Requires supporting ruby files with custom matchers and macros, etc, in
16
18
  # spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
17
19
  # run as spec files by default. This means that files in spec/support that end
@@ -81,5 +83,4 @@ RSpec.configure do |config|
81
83
  example.run
82
84
  end
83
85
  end
84
-
85
86
  end
data/spec/spec_helper.rb CHANGED
@@ -40,48 +40,46 @@ RSpec.configure do |config|
40
40
  mocks.verify_partial_doubles = true
41
41
  end
42
42
 
43
- # The settings below are suggested to provide a good initial experience
44
- # with RSpec, but feel free to customize to your heart's content.
45
- =begin
46
- # These two settings work together to allow you to limit a spec run
47
- # to individual examples or groups you care about by tagging them with
48
- # `:focus` metadata. When nothing is tagged with `:focus`, all examples
49
- # get run.
50
- config.filter_run :focus
51
- config.run_all_when_everything_filtered = true
52
-
53
- # Limits the available syntax to the non-monkey patched syntax that is
54
- # recommended. For more details, see:
55
- # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
56
- # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
57
- # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching
58
- config.disable_monkey_patching!
59
-
60
- # Many RSpec users commonly either run the entire suite or an individual
61
- # file, and it's useful to allow more verbose output when running an
62
- # individual spec file.
63
- if config.files_to_run.one?
64
- # Use the documentation formatter for detailed output,
65
- # unless a formatter has already been configured
66
- # (e.g. via a command-line flag).
67
- config.default_formatter = 'doc'
68
- end
69
-
70
- # Print the 10 slowest examples and example groups at the
71
- # end of the spec run, to help surface which specs are running
72
- # particularly slow.
73
- config.profile_examples = 10
74
-
75
- # Run specs in random order to surface order dependencies. If you find an
76
- # order dependency and want to debug it, you can fix the order by providing
77
- # the seed, which is printed after each run.
78
- # --seed 1234
79
- config.order = :random
80
-
81
- # Seed global randomization in this process using the `--seed` CLI option.
82
- # Setting this allows you to use `--seed` to deterministically reproduce
83
- # test failures related to randomization by passing the same `--seed` value
84
- # as the one that triggered the failure.
85
- Kernel.srand config.seed
86
- =end
43
+ # The settings below are suggested to provide a good initial experience
44
+ # with RSpec, but feel free to customize to your heart's content.
45
+ # # These two settings work together to allow you to limit a spec run
46
+ # # to individual examples or groups you care about by tagging them with
47
+ # # `:focus` metadata. When nothing is tagged with `:focus`, all examples
48
+ # # get run.
49
+ # config.filter_run :focus
50
+ # config.run_all_when_everything_filtered = true
51
+ #
52
+ # # Limits the available syntax to the non-monkey patched syntax that is
53
+ # # recommended. For more details, see:
54
+ # # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax
55
+ # # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
56
+ # # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching
57
+ # config.disable_monkey_patching!
58
+ #
59
+ # # Many RSpec users commonly either run the entire suite or an individual
60
+ # # file, and it's useful to allow more verbose output when running an
61
+ # # individual spec file.
62
+ # if config.files_to_run.one?
63
+ # # Use the documentation formatter for detailed output,
64
+ # # unless a formatter has already been configured
65
+ # # (e.g. via a command-line flag).
66
+ # config.default_formatter = 'doc'
67
+ # end
68
+ #
69
+ # # Print the 10 slowest examples and example groups at the
70
+ # # end of the spec run, to help surface which specs are running
71
+ # # particularly slow.
72
+ # config.profile_examples = 10
73
+ #
74
+ # # Run specs in random order to surface order dependencies. If you find an
75
+ # # order dependency and want to debug it, you can fix the order by providing
76
+ # # the seed, which is printed after each run.
77
+ # # --seed 1234
78
+ # config.order = :random
79
+ #
80
+ # # Seed global randomization in this process using the `--seed` CLI option.
81
+ # # Setting this allows you to use `--seed` to deterministically reproduce
82
+ # # test failures related to randomization by passing the same `--seed` value
83
+ # # as the one that triggered the failure.
84
+ # Kernel.srand config.seed
87
85
  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.1'
4
+ version: '0.3'
5
5
  platform: ruby
6
6
  authors:
7
- - Westlake Interactive
7
+ - Moser Consulting
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-07 00:00:00.000000000 Z
11
+ date: 2016-08-11 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: 4.2.0
19
+ version: '5.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: 4.2.0
26
+ version: '5.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: stripe
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -112,20 +112,49 @@ dependencies:
112
112
  name: stripe-ruby-mock
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '='
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: codeclimate-test-reporter
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
116
144
  - !ruby/object:Gem::Version
117
- version: 2.1.0
145
+ version: '0'
118
146
  type: :development
119
147
  prerelease: false
120
148
  version_requirements: !ruby/object:Gem::Requirement
121
149
  requirements:
122
- - - '='
150
+ - - ">="
123
151
  - !ruby/object:Gem::Version
124
- version: 2.1.0
125
- description: Provides an endpoint for captring data posted via Webhooks in Stripe,
126
- and a system for running callbacks in response to desired event types.
152
+ version: '0'
153
+ description: |-
154
+ Provides an endpoint for captring data posted via Webhooks in Stripe,
155
+ and a system for running callbacks in response to desired event types.
127
156
  email:
128
- - greg@westlakedesign.com
157
+ - greg.woods@moserit.com
129
158
  executables: []
130
159
  extensions: []
131
160
  extra_rdoc_files: []
@@ -148,6 +177,7 @@ files:
148
177
  - lib/generators/stripe_webhooks/callback_generator.rb
149
178
  - lib/generators/stripe_webhooks/templates/application_callback.rb.erb
150
179
  - lib/generators/stripe_webhooks/templates/callback.rb.erb
180
+ - lib/generators/stripe_webhooks/templates/callback_spec.rb.erb
151
181
  - lib/stripe_webhooks.rb
152
182
  - lib/stripe_webhooks/callbacks.rb
153
183
  - lib/stripe_webhooks/engine.rb
@@ -223,7 +253,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
223
253
  version: '0'
224
254
  requirements: []
225
255
  rubyforge_project:
226
- rubygems_version: 2.4.6
256
+ rubygems_version: 2.5.1
227
257
  signing_key:
228
258
  specification_version: 4
229
259
  summary: Stripe Webhook event capture and processing engine.