contentful-webhook-listener 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c8b4a6280628a73f9bbd6ca719228b5cbcbc7398
4
- data.tar.gz: 92e8e9344d9f42c84ebea75180744f94d21fede4
3
+ metadata.gz: ead87c79c6faa39c84983c279db131c1968c03ae
4
+ data.tar.gz: 78d9920ce209f081d38328df7d36d6f199981746
5
5
  SHA512:
6
- metadata.gz: 7e7b67146a95642319490f8664f56828063ed9d7bf79ba92977fbeec9784f86c4d1496aa07134d08332d0dc5fa6bf6192047704387f68bb65bb05fb6b4dc12bf
7
- data.tar.gz: b659e728a75d5ca1f2addf41796f7da3e68c5be2e2fc920cb0cbfd8446833afd58c3d57836dd6a8837f86771b8c1ca69176f3f9b5a9cd84738ec0345909e6893
6
+ metadata.gz: 2e5111ccd3751dda799a590371247f919933d2aed6f4604fe5bd459f54582825b40a78e23a25240f3a424a574fa6296cd6662c5d824b6d8ac8b0e0e31b0f68e4
7
+ data.tar.gz: ff31507c823c30180b93ad98fe4cd2985f4ba44fb956acd6d73a33c8438765d83c885ae9622f444c5f410a862c97eed7e5d05a1992cdcd069f8e28d313b3ab34
data/.travis.yml CHANGED
@@ -1,6 +1,9 @@
1
1
  rvm:
2
- - 1.9.3
3
2
  - 2.0.0
4
- - jruby-19mode
5
-
3
+ - 2.1.0
4
+ - 2.2.3
5
+ - 2.3.0
6
6
  env: TEST=true
7
+ notifications:
8
+ slack:
9
+ secure: SJn1oaxNBtYfT3vDMY82Q4l8m2QlDfiLGwY4/N+5RNdw5u03ebAjoiuGrzcbWGRxt7eiFQjH/EyApq4f1WkB1jARdOg7I45IOIH1PEcks2U5PEqtRidNR/7ySm8UjAkDnXviZPhhBaUOCgQNNIl4zvLUnGKAJYTUvub2owWkGzT1pamewFq4JznPPpdzHW3BcAk/lo5a+vvLTIIeHwwYfcsRZYf+C3Q/Ii+S8RgXn8uAQ+TIv2uRR3o/whnnGXPghEUkBraS+KAdd46k9iEuL1D2DvogwGbPg0Rvd+g3LzpIKhVAvV1lIPiwBDXGeUYGgM5b2GcPVbpI/ktEeHKokIdKn9LpBQ1d63KQ2Sx23ggP2mXoF+0UIDZWiS9mG7UYyrf2YAps8/EPvist1AIJuu9UCs7Wxi+r3MaeBM/CM5vMLToTq3uWaBtbctIQl8DUslnC6m1kL4vPwKureMYQX1DssIZ5kyOkHNEHwKdre3j7R/9tWdWOgPotozACUNovOHh9a3DZusYZcFx+H56/SKIEnD50TNY3DguJbNwEdGHqhwQ/aql04qg/4jXfT5hnPNqLVzq+T+wu85t53CQP/+0PP/Rt7JZo9/CE9n1jEF7UrQbJRuyBCqkJU5+mkjVYM3wVgs9m1TFG+Y6sJyBrMd+W5aG0BM1QZ7QofX/pQN0=
data/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## v0.2.0
6
+ ### Added
7
+ * Added `WebhookAware` controller
8
+
5
9
  ## v0.1.0
6
10
  ### Added
7
11
  * Full Spec Coverage
data/Guardfile ADDED
@@ -0,0 +1,5 @@
1
+ guard :rspec, cmd: 'rspec --format documentation --color' do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
4
+ watch('spec/spec_helper.rb') { "spec" }
5
+ end
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2015 David Litvak Bruno
1
+ Copyright (c) 2015 Contentful GmbH
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -30,24 +30,23 @@ Or install it yourself as:
30
30
 
31
31
  ## Usage
32
32
 
33
- Require gem:
33
+ * Require gem:
34
34
 
35
35
  ```ruby
36
36
  require 'contentful/webhook/listener'
37
37
  ```
38
38
 
39
- Create your own Controllers:
39
+ * Create your own Controllers:
40
40
 
41
41
  ```ruby
42
- class MyController < Contentful::Webhook::Listener::Controllers::Wait
42
+ class MyController < Contentful::Webhook::Listener::Controllers::Base
43
43
  def perform(request, response)
44
- super(request, response)
45
44
  "do your process..." # This will run on a brackground Thread
46
45
  end
47
46
  end
48
47
  ```
49
48
 
50
- Configure and start your Webhook Listener
49
+ * Configure and start your Webhook Listener
51
50
 
52
51
  ```ruby
53
52
  require 'logger'
@@ -68,6 +67,57 @@ end
68
67
 
69
68
  You can add multiple endpoints, each with it's own Controller.
70
69
 
70
+ ### Webhook Aware Controllers
71
+
72
+ You can create controllers that can respond on specific Webhook events.
73
+
74
+ ```ruby
75
+ class MyController < Contentful::Webhook::Listener::Controllers::WebhookAware
76
+ def publish
77
+ # Do stuff on publish
78
+ if webhook.entry?
79
+ logger.info "published Entry ID: #{webhook.id} for Space: #{webhook.space_id}"
80
+ end
81
+ end
82
+
83
+ def unpublish
84
+ # Do stuff on unpublish
85
+ end
86
+
87
+ def archive
88
+ # Do stuff on archive
89
+ end
90
+
91
+ def unarchive
92
+ # Do stuff on unarchive
93
+ end
94
+
95
+ def create
96
+ # Do stuff on create
97
+ end
98
+
99
+ def save
100
+ # Do stuff on save
101
+ end
102
+
103
+ def delete
104
+ # Do stuff on delete
105
+ end
106
+ end
107
+ ```
108
+
109
+ The controller has a `webhook` object bound when invoked, that has a few helpers:
110
+
111
+ * `webhook.entry?` will return if the webhook was fired for an Entry
112
+ * `webhook.asset?` will return if the webhook was fired for an Asset
113
+ * `webhook.content_type?` will return if the webhook was fired for a Content Type
114
+
115
+ * `webhook.id` will return the Resource (Entry/Asset/Content Type) ID
116
+ * `webhook.space_id` will return the Space ID
117
+
118
+ * `webhook.sys` will include the metadata for the resource
119
+ * `webhook.fields` will include the resource fields (not included on Unpublish)
120
+
71
121
  ## Contributing
72
122
 
73
123
  1. Fork it ( https://github.com/[my-github-username]/contentful-webhook-listener/fork )
@@ -21,4 +21,6 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.6"
22
22
  spec.add_development_dependency "rake"
23
23
  spec.add_development_dependency "rspec"
24
+ spec.add_development_dependency "guard"
25
+ spec.add_development_dependency "guard-rspec"
24
26
  end
@@ -2,3 +2,4 @@ require 'contentful/webhook/listener/version'
2
2
  require 'contentful/webhook/listener/server'
3
3
  require 'contentful/webhook/listener/controllers'
4
4
  require 'contentful/webhook/listener/support'
5
+ require 'contentful/webhook/listener/webhooks'
@@ -1,2 +1,3 @@
1
1
  require 'contentful/webhook/listener/controllers/base'
2
2
  require 'contentful/webhook/listener/controllers/wait'
3
+ require 'contentful/webhook/listener/controllers/webhook_aware'
@@ -19,7 +19,7 @@ module Contentful
19
19
  response.status = 200
20
20
 
21
21
  Thread.new do
22
- perform(request, response)
22
+ perform(request, response)
23
23
  end
24
24
  end
25
25
 
@@ -1,4 +1,5 @@
1
1
  require 'thread'
2
+ require 'contentful/webhook/listener/controllers/base'
2
3
 
3
4
  module Contentful
4
5
  module Webhook
@@ -0,0 +1,50 @@
1
+ require 'contentful/webhook/listener/controllers/wait'
2
+ require 'contentful/webhook/listener/webhooks'
3
+
4
+ module Contentful
5
+ module Webhook
6
+ module Listener
7
+ module Controllers
8
+ class WebhookAware < Wait
9
+ attr_reader :webhook
10
+
11
+ def publish
12
+ end
13
+
14
+ def unpublish
15
+ end
16
+
17
+ def archive
18
+ end
19
+
20
+ def unarchive
21
+ end
22
+
23
+ def save
24
+ end
25
+
26
+ def auto_save
27
+ end
28
+
29
+ def create
30
+ end
31
+
32
+ def delete
33
+ end
34
+
35
+ protected
36
+
37
+ def perform(request, response)
38
+ @webhook = WebhookFactory.new(request).create
39
+ super(request, response)
40
+ logger.debug "Webhook Data: {id: #{webhook.id}, space_id: #{webhook.space_id}, kind: #{webhook.kind}, event: #{webhook.event}}"
41
+ send(webhook.event)
42
+ rescue
43
+ response.body = "Not a Webhook"
44
+ response.status = 400
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -4,7 +4,7 @@ module Contentful
4
4
  module Support
5
5
  # NullLogger will silence any call to the :logger instance
6
6
  class NullLogger
7
- def write(_body)
7
+ def write(*)
8
8
  nil
9
9
  end
10
10
 
@@ -12,6 +12,8 @@ module Contentful
12
12
  alias_method :debug, :write
13
13
  alias_method :warn, :write
14
14
  alias_method :error, :write
15
+ alias_method :fatal, :write
16
+ alias_method :debug?, :write
15
17
  end
16
18
  end
17
19
  end
@@ -2,7 +2,7 @@ module Contentful
2
2
  module Webhook
3
3
  # Webhook Listener
4
4
  module Listener
5
- VERSION = '0.1.0'
5
+ VERSION = '0.2.0'
6
6
  end
7
7
  end
8
8
  end
@@ -0,0 +1,80 @@
1
+ require 'json'
2
+
3
+ module Contentful
4
+ module Webhook
5
+ module Listener
6
+ module WebhookConstants
7
+ WEBHOOK_TOPIC = 'X-Contentful-Topic'
8
+ WEBHOOK_NAME = 'X-Contentful-Webhook-Name'
9
+ end
10
+
11
+ class WebhookFactory
12
+ def initialize(request)
13
+ @headers = {}
14
+ request.each { |header, value| @headers[header] = value }
15
+ @body = JSON.load(request.body)
16
+ end
17
+
18
+ def create
19
+ webhook_class.new(@headers, @body)
20
+ end
21
+
22
+ private
23
+
24
+ def webhook_class
25
+ Object.const_get(webhook_class_name)
26
+ end
27
+
28
+ def webhook_class_name
29
+ event_name = @headers[::Contentful::Webhook::Listener::WebhookConstants::WEBHOOK_TOPIC].split('.')[-1].split('_').collect(&:capitalize).join
30
+ "Contentful::Webhook::Listener::#{event_name}Webhook"
31
+ end
32
+ end
33
+
34
+ class BaseWebhook
35
+ attr_reader :origin, :kind, :event, :raw_topic, :raw_headers, :raw_body, :id, :name, :space_id, :sys
36
+
37
+ def initialize(headers, body)
38
+ @raw_topic = headers[::Contentful::Webhook::Listener::WebhookConstants::WEBHOOK_TOPIC]
39
+ @name = headers[::Contentful::Webhook::Listener::WebhookConstants::WEBHOOK_NAME]
40
+ @origin, @kind, @event = @raw_topic.split('.')
41
+ @raw_body = body
42
+ @raw_headers = headers
43
+ @sys = body['sys']
44
+ @id = sys['id']
45
+ @space_id = sys['space']['sys']['id']
46
+ end
47
+
48
+ def entry?
49
+ kind == 'Entry'
50
+ end
51
+
52
+ def asset?
53
+ kind == 'Asset'
54
+ end
55
+
56
+ def content_type?
57
+ kind == 'ContentType'
58
+ end
59
+ end
60
+
61
+ class FieldWebhook < BaseWebhook
62
+ attr_reader :fields
63
+
64
+ def initialize(headers, body)
65
+ super(headers, body)
66
+ @fields = body['fields']
67
+ end
68
+ end
69
+
70
+ class PublishWebhook < FieldWebhook; end
71
+ class SaveWebhook < FieldWebhook; end
72
+ class AutoSaveWebhook < FieldWebhook; end
73
+ class CreateWebhook < FieldWebhook; end
74
+ class ArchiveWebhook < FieldWebhook; end
75
+ class UnarchiveWebhook < FieldWebhook; end
76
+ class UnpublishWebhook < BaseWebhook; end
77
+ class DeleteWebhook < BaseWebhook; end
78
+ end
79
+ end
80
+ end
@@ -1,19 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
- class Contentful::Webhook::Listener::Controllers::Wait
4
- @@sleeping = false
5
-
6
- def sleep(time)
7
- @@sleeping = true
8
- end
9
-
10
- def self.sleeping
11
- value = @@sleeping
12
- @@sleeping = false
13
- value
14
- end
15
- end
16
-
17
3
  describe Contentful::Webhook::Listener::Controllers::Wait do
18
4
  let(:server) { MockServer.new }
19
5
  let(:logger) { Contentful::Webhook::Listener::Support::NullLogger.new }
@@ -31,9 +17,7 @@ describe Contentful::Webhook::Listener::Controllers::Wait do
31
17
  # This spec requires to read/erase a Class Variable
32
18
  # because RSpec doesn't know how to test within spawned Threads
33
19
  it "##{name} wait on background" do
34
- wait.send(name, MockRequest.new, MockResponse.new)
35
-
36
- sleep(0.1) # Wait for Thread to actually run
20
+ wait.send(name, MockRequest.new, MockResponse.new).join
37
21
 
38
22
  expect(wait.class.sleeping).to be_truthy
39
23
  end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe Contentful::Webhook::Listener::Controllers::WebhookAware do
4
+ let(:server) { MockServer.new }
5
+ let(:logger) { Contentful::Webhook::Listener::Support::NullLogger.new }
6
+ let(:timeout) { 10 }
7
+ let(:body) { {sys: { id: 'foo', space: { sys: { id: 'space_foo' } } }, fields: {} } }
8
+ subject { described_class.new(server, logger, timeout) }
9
+
10
+ describe 'event methods called for corresponding webhook event type' do
11
+ [:publish, :unpublish, :archive, :unarchive, :save, :auto_save, :create, :delete].each do |event|
12
+ it "calls ##{event}" do
13
+ expect(subject).to receive(event)
14
+ subject.respond(RequestDummy.new({'X-Contentful-Topic' => "ContentfulManagement.Entry.#{event}"}, body), MockResponse.new).join
15
+ end
16
+ end
17
+ end
18
+
19
+ it 'returns 400 Bad Request on non-webhook call' do
20
+ response = MockResponse.new
21
+ subject.respond(RequestDummy.new(nil, "foo"), response).join
22
+
23
+ expect(response.status).to eq(400)
24
+ expect(response.body).to eq('Not a Webhook')
25
+ end
26
+ end
@@ -0,0 +1,142 @@
1
+ require 'spec_helper'
2
+
3
+ describe Contentful::Webhook::Listener::WebhookFactory do
4
+ let(:body) { {sys: { id: 'foo', space: { sys: { id: 'space_foo' } } }, fields: {} } }
5
+ let(:topic) { 'ContentfulManagement.Entry.publish' }
6
+ let(:name) { 'WebhookName' }
7
+ let(:request) { RequestDummy.new({'X-Contentful-Topic' => topic, 'X-Contentful-Webhook-Name' => name}, body) }
8
+ subject { described_class.new(request) }
9
+
10
+
11
+ describe 'instance methods' do
12
+ describe '#create' do
13
+ describe 'retrieves an instance of the correct webhook type' do
14
+ it 'publish event creates a PublishWebhook' do
15
+ webhook = described_class.new(RequestDummy.new({'X-Contentful-Topic' => 'ContentfulManagement.Entry.publish'}, body)).create
16
+ expect(webhook).to be_a Contentful::Webhook::Listener::PublishWebhook
17
+ end
18
+ it 'save event creates a SaveWebhook' do
19
+ webhook = described_class.new(RequestDummy.new({'X-Contentful-Topic' => 'ContentfulManagement.Entry.save'}, body)).create
20
+ expect(webhook).to be_a Contentful::Webhook::Listener::SaveWebhook
21
+ end
22
+ it 'auto_save event creates an AutoSaveWebhook' do
23
+ webhook = described_class.new(RequestDummy.new({'X-Contentful-Topic' => 'ContentfulManagement.Entry.auto_save'}, body)).create
24
+ expect(webhook).to be_a Contentful::Webhook::Listener::AutoSaveWebhook
25
+ end
26
+ it 'create event creates a CreateWebhook' do
27
+ webhook = described_class.new(RequestDummy.new({'X-Contentful-Topic' => 'ContentfulManagement.Entry.create'}, body)).create
28
+ expect(webhook).to be_a Contentful::Webhook::Listener::CreateWebhook
29
+ end
30
+ it 'archive event creates a ArchiveWebhook' do
31
+ webhook = described_class.new(RequestDummy.new({'X-Contentful-Topic' => 'ContentfulManagement.Entry.archive'}, body)).create
32
+ expect(webhook).to be_a Contentful::Webhook::Listener::ArchiveWebhook
33
+ end
34
+ it 'unarchive event creates a UnarchiveWebhook' do
35
+ webhook = described_class.new(RequestDummy.new({'X-Contentful-Topic' => 'ContentfulManagement.Entry.unarchive'}, body)).create
36
+ expect(webhook).to be_a Contentful::Webhook::Listener::UnarchiveWebhook
37
+ end
38
+ it 'unpublish event creates a UnpublishWebhook' do
39
+ webhook = described_class.new(RequestDummy.new({'X-Contentful-Topic' => 'ContentfulManagement.Entry.unpublish'}, body)).create
40
+ expect(webhook).to be_a Contentful::Webhook::Listener::UnpublishWebhook
41
+ end
42
+ it 'delete event creates a DeleteWebhook' do
43
+ webhook = described_class.new(RequestDummy.new({'X-Contentful-Topic' => 'ContentfulManagement.Entry.delete'}, body)).create
44
+ expect(webhook).to be_a Contentful::Webhook::Listener::DeleteWebhook
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ describe Contentful::Webhook::Listener::BaseWebhook do
52
+ let(:body) { {'sys' => { 'id' => 'foo', 'space' => { 'sys' => { 'id' => 'space_foo' } } }, 'fields' => {} } }
53
+ let(:topic) { 'ContentfulManagement.Entry.publish' }
54
+ let(:name) { 'WebhookName' }
55
+ let(:headers) { {'X-Contentful-Topic' => topic, 'X-Contentful-Webhook-Name' => name} }
56
+ subject { described_class.new(headers, body) }
57
+
58
+ describe 'attributes' do
59
+ it ':origin' do
60
+ expect(subject.origin).to eq 'ContentfulManagement'
61
+ end
62
+ it ':kind' do
63
+ expect(subject.kind).to eq 'Entry'
64
+ end
65
+ it ':event' do
66
+ expect(subject.event).to eq 'publish'
67
+ end
68
+ it ':raw_topic' do
69
+ expect(subject.raw_topic).to eq 'ContentfulManagement.Entry.publish'
70
+ end
71
+ it ':raw_body' do
72
+ expect(subject.raw_body).to eq body
73
+ end
74
+ it ':id' do
75
+ expect(subject.id).to eq 'foo'
76
+ end
77
+ it ':name' do
78
+ expect(subject.name).to eq 'WebhookName'
79
+ end
80
+ it ':space_id' do
81
+ expect(subject.space_id).to eq 'space_foo'
82
+ end
83
+ it ':sys' do
84
+ expect(subject.sys).to eq body['sys']
85
+ end
86
+ end
87
+
88
+ describe 'instance methods' do
89
+ describe 'kind methods' do
90
+ describe '#entry?' do
91
+ it 'true when kind == Entry' do
92
+ expect(described_class.new(headers, body).entry?).to be_truthy
93
+ end
94
+ it 'false when kind != Entry' do
95
+ headers['X-Contentful-Topic'] = 'ContentfulManagement.Asset.publish'
96
+ expect(described_class.new(headers, body).entry?).to be_falsey
97
+
98
+ headers['X-Contentful-Topic'] = 'ContentfulManagement.ContentType.publish'
99
+ expect(described_class.new(headers, body).entry?).to be_falsey
100
+ end
101
+ end
102
+ describe '#asset?' do
103
+ it 'true when kind == Asset' do
104
+ headers['X-Contentful-Topic'] = 'ContentfulManagement.Asset.publish'
105
+ expect(described_class.new(headers, body).asset?).to be_truthy
106
+ end
107
+ it 'false when kind != Asset' do
108
+ expect(described_class.new(headers, body).asset?).to be_falsey
109
+
110
+ headers['X-Contentful-Topic'] = 'ContentfulManagement.ContentType.publish'
111
+ expect(described_class.new(headers, body).asset?).to be_falsey
112
+ end
113
+ end
114
+ describe '#content_type?' do
115
+ it 'true when kind == ContentType' do
116
+ headers['X-Contentful-Topic'] = 'ContentfulManagement.ContentType.publish'
117
+ expect(described_class.new(headers, body).content_type?).to be_truthy
118
+ end
119
+ it 'false when kind != ContentType' do
120
+ expect(described_class.new(headers, body).content_type?).to be_falsey
121
+
122
+ headers['X-Contentful-Topic'] = 'ContentfulManagement.Asset.publish'
123
+ expect(described_class.new(headers, body).content_type?).to be_falsey
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
129
+
130
+ describe Contentful::Webhook::Listener::FieldWebhook do
131
+ let(:body) { {'sys' => { 'id' => 'foo', 'space' => { 'sys' => { 'id' => 'space_foo' } } }, 'fields' => {} } }
132
+ let(:topic) { 'ContentfulManagement.Entry.publish' }
133
+ let(:name) { 'WebhookName' }
134
+ let(:headers) { {'X-Contentful-Topic' => topic, 'X-Contentful-Webhook-Name' => name} }
135
+ subject { described_class.new(headers, body) }
136
+
137
+ describe 'attributes' do
138
+ it ':fields' do
139
+ expect(subject.fields).to eq body['fields']
140
+ end
141
+ end
142
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,8 +1,9 @@
1
1
  $LOAD_PATH.unshift File.expand_path('lib', __FILE__)
2
2
 
3
- require 'contentful/webhook/listener'
4
3
  require 'rspec'
5
4
  require 'rspec/mocks'
5
+ require 'contentful/webhook/listener'
6
+ require 'json'
6
7
 
7
8
  class MockServer
8
9
  def [](key)
@@ -16,3 +17,36 @@ end
16
17
  class MockResponse
17
18
  attr_accessor :status, :body
18
19
  end
20
+
21
+ class RequestDummy
22
+ attr_reader :headers, :body
23
+
24
+ def initialize(headers, body)
25
+ @headers = headers || {}
26
+ @body = JSON.dump(body)
27
+ end
28
+
29
+ def [](key)
30
+ headers[key]
31
+ end
32
+
33
+ def each
34
+ headers.each do |h, v|
35
+ yield(h, v)
36
+ end
37
+ end
38
+ end
39
+
40
+ class Contentful::Webhook::Listener::Controllers::Wait
41
+ @@sleeping = false
42
+
43
+ def sleep(time)
44
+ @@sleeping = true
45
+ end
46
+
47
+ def self.sleeping
48
+ value = @@sleeping
49
+ @@sleeping = false
50
+ value
51
+ end
52
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: contentful-webhook-listener
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Contentful GmbH (David Litvak Bruno)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-11 00:00:00.000000000 Z
11
+ date: 2016-04-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: guard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard-rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  description: A Simple HTTP Webserver with pluggable behavior for listening to Contentful
56
84
  API Webhooks
57
85
  email:
@@ -65,6 +93,7 @@ files:
65
93
  - CHANGELOG.md
66
94
  - CONTRIBUTING.md
67
95
  - Gemfile
96
+ - Guardfile
68
97
  - LICENSE
69
98
  - LICENSE.txt
70
99
  - README.md
@@ -74,14 +103,18 @@ files:
74
103
  - lib/contentful/webhook/listener/controllers.rb
75
104
  - lib/contentful/webhook/listener/controllers/base.rb
76
105
  - lib/contentful/webhook/listener/controllers/wait.rb
106
+ - lib/contentful/webhook/listener/controllers/webhook_aware.rb
77
107
  - lib/contentful/webhook/listener/server.rb
78
108
  - lib/contentful/webhook/listener/support.rb
79
109
  - lib/contentful/webhook/listener/support/null_logger.rb
80
110
  - lib/contentful/webhook/listener/version.rb
111
+ - lib/contentful/webhook/listener/webhooks.rb
81
112
  - spec/contentful/webhook/listener/controllers/base_spec.rb
82
113
  - spec/contentful/webhook/listener/controllers/wait_spec.rb
114
+ - spec/contentful/webhook/listener/controllers/webhook_aware_spec.rb
83
115
  - spec/contentful/webhook/listener/server_spec.rb
84
116
  - spec/contentful/webhook/listener/support/null_logger_spec.rb
117
+ - spec/contentful/webhook/listener/webhooks_spec.rb
85
118
  - spec/spec_helper.rb
86
119
  homepage: https://github.com/contentful/contentful-webhook-listener.rb
87
120
  licenses:
@@ -103,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
136
  version: '0'
104
137
  requirements: []
105
138
  rubyforge_project:
106
- rubygems_version: 2.4.5.1
139
+ rubygems_version: 2.5.0
107
140
  signing_key:
108
141
  specification_version: 4
109
142
  summary: A Simple HTTP Webserver with pluggable behavior for listening to Contentful
@@ -111,6 +144,8 @@ summary: A Simple HTTP Webserver with pluggable behavior for listening to Conten
111
144
  test_files:
112
145
  - spec/contentful/webhook/listener/controllers/base_spec.rb
113
146
  - spec/contentful/webhook/listener/controllers/wait_spec.rb
147
+ - spec/contentful/webhook/listener/controllers/webhook_aware_spec.rb
114
148
  - spec/contentful/webhook/listener/server_spec.rb
115
149
  - spec/contentful/webhook/listener/support/null_logger_spec.rb
150
+ - spec/contentful/webhook/listener/webhooks_spec.rb
116
151
  - spec/spec_helper.rb