contentful-webhook-listener 0.0.4 → 0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 382b718018bfcb1215a64a6aeb222c7d54bf9417
4
- data.tar.gz: ed7e2df879c2878252b5fb56722bbc69408fba49
3
+ metadata.gz: c8b4a6280628a73f9bbd6ca719228b5cbcbc7398
4
+ data.tar.gz: 92e8e9344d9f42c84ebea75180744f94d21fede4
5
5
  SHA512:
6
- metadata.gz: e5eccc8b497c478a1ee20e18abd252bca1b603b5e694357fe9008cad6ccc76d1043a1bba52166a4b453170ff85ff1109e14f819dcb2ff64800639eff64e77302
7
- data.tar.gz: 29ef8f044881f404f0c1cdc870a9c600be03b5095798f93005a50265001641c6917fc2be0ef18d3b269ec75d66192763137194171c1c1a463eeb504df3c0b590
6
+ metadata.gz: 7e7b67146a95642319490f8664f56828063ed9d7bf79ba92977fbeec9784f86c4d1496aa07134d08332d0dc5fa6bf6192047704387f68bb65bb05fb6b4dc12bf
7
+ data.tar.gz: b659e728a75d5ca1f2addf41796f7da3e68c5be2e2fc920cb0cbfd8446833afd58c3d57836dd6a8837f86771b8c1ca69176f3f9b5a9cd84738ec0345909e6893
@@ -2,6 +2,13 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## v0.1.0
6
+ ### Added
7
+ * Full Spec Coverage
8
+
9
+ ### Changed
10
+ * Small refactor on Server
11
+
5
12
  ## v0.0.4
6
13
  ### Added
7
14
  * `logger` now available from Controllers
data/Rakefile CHANGED
@@ -1,3 +1,11 @@
1
1
  require "bundler/gem_tasks"
2
2
 
3
- task default: :install
3
+ begin
4
+ require 'rspec/core/rake_task'
5
+ RSpec::Core::RakeTask.new(:spec) do |t|
6
+ t.rspec_opts = '--format documentation --color'
7
+ end
8
+ task default: :spec
9
+ rescue LoadError
10
+ end
11
+
@@ -20,4 +20,5 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.6"
22
22
  spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "rspec"
23
24
  end
@@ -34,7 +34,7 @@ module Contentful
34
34
  Thread.new { Server.new(config).start }
35
35
  end
36
36
 
37
- attr_reader :port, :address, :endpoints, :logger
37
+ attr_reader :port, :address, :endpoints, :logger, :server
38
38
 
39
39
  def initialize(config = {})
40
40
  @port = config.fetch(:port, DEFAULT_PORT)
@@ -49,15 +49,16 @@ module Contentful
49
49
  def start
50
50
  logger.info "Webhook server starting at: http://#{@address}:#{@port}"
51
51
 
52
+ @server = create_server
52
53
  mount_endpoints
53
54
 
54
- server.start
55
+ @server.start
55
56
  end
56
57
 
57
58
  protected
58
59
 
59
- def server
60
- @server ||= WEBrick::HTTPServer.new(
60
+ def create_server
61
+ WEBrick::HTTPServer.new(
61
62
  Port: @port,
62
63
  BindAddress: @address,
63
64
  AccessLog: [],
@@ -68,7 +69,7 @@ module Contentful
68
69
  def mount_endpoints
69
70
  logger.info 'Available Endpoints:'
70
71
  @endpoints.each do |endpoint_config|
71
- server.mount(
72
+ @server.mount(
72
73
  endpoint_config[:endpoint],
73
74
  endpoint_config[:controller],
74
75
  @logger,
@@ -2,7 +2,7 @@ module Contentful
2
2
  module Webhook
3
3
  # Webhook Listener
4
4
  module Listener
5
- VERSION = '0.0.4'
5
+ VERSION = '0.1.0'
6
6
  end
7
7
  end
8
8
  end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Contentful::Webhook::Listener::Controllers::Base do
4
+ let(:server) { MockServer.new }
5
+ let(:logger) { Contentful::Webhook::Listener::Support::NullLogger.new }
6
+ let(:base) { Contentful::Webhook::Listener::Controllers::Base.new server, logger }
7
+
8
+ describe "instance methods" do
9
+ [:do_GET, :do_POST, :respond].each do |name|
10
+ it "##{name} spawn a background job" do
11
+ expect(Thread).to receive(:new)
12
+
13
+ base.send(name, MockRequest.new, MockResponse.new)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
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
+ describe Contentful::Webhook::Listener::Controllers::Wait do
18
+ let(:server) { MockServer.new }
19
+ let(:logger) { Contentful::Webhook::Listener::Support::NullLogger.new }
20
+ let(:timeout) { 10 }
21
+ let(:wait) { Contentful::Webhook::Listener::Controllers::Wait.new server, logger, timeout }
22
+
23
+ describe "instance methods" do
24
+ [:do_GET, :do_POST, :respond].each do |name|
25
+ it "##{name} spawn a background job" do
26
+ expect(Thread).to receive(:new)
27
+
28
+ wait.send(name, MockRequest.new, MockResponse.new)
29
+ end
30
+
31
+ # This spec requires to read/erase a Class Variable
32
+ # because RSpec doesn't know how to test within spawned Threads
33
+ 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
37
+
38
+ expect(wait.class.sleeping).to be_truthy
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ describe Contentful::Webhook::Listener::Server do
4
+ let(:server) { Contentful::Webhook::Listener::Server.new }
5
+
6
+ describe 'class methods' do
7
+ describe '::start' do
8
+ it 'spawns a brackground thread' do
9
+ expect(Thread).to receive(:new)
10
+
11
+ Contentful::Webhook::Listener::Server.start
12
+ end
13
+ end
14
+ end
15
+
16
+ describe 'instance methods' do
17
+ describe "#start" do
18
+ before do
19
+ expect_any_instance_of(WEBrick::HTTPServer).to receive(:start)
20
+ expect(WEBrick::Utils).to receive(:create_listeners) { [] } # Mock TCP Port binding
21
+ end
22
+
23
+ it "logs server messages" do
24
+ expect(server.logger).to receive(:info).once.ordered.with("Webhook server starting at: http://#{server.address}:#{server.port}")
25
+ expect(server.logger).to receive(:info).once.ordered.with("Available Endpoints:")
26
+ expect(server.logger).to receive(:info).once.ordered.with("\t/receive - Controller: Contentful::Webhook::Listener::Controllers::Wait - Timeout: 300")
27
+
28
+ server.start
29
+ end
30
+
31
+ it "mounts endpoints" do
32
+ expect_any_instance_of(WEBrick::HTTPServer).to receive(:mount).with(
33
+ "/receive",
34
+ Contentful::Webhook::Listener::Controllers::Wait,
35
+ Contentful::Webhook::Listener::Support::NullLogger,
36
+ 300
37
+ )
38
+
39
+ server.start
40
+ end
41
+ end
42
+ end
43
+
44
+ describe "defaults" do
45
+ it ":port" do
46
+ expect(server.port).to eq 5678
47
+ end
48
+
49
+ it ":address" do
50
+ expect(server.address).to eq "0.0.0.0"
51
+ end
52
+
53
+ it ":endpoints" do
54
+ expected = [
55
+ {
56
+ endpoint: '/receive',
57
+ controller: Contentful::Webhook::Listener::Controllers::Wait,
58
+ timeout: 300
59
+ }
60
+ ]
61
+
62
+ expect(server.endpoints).to match_array expected
63
+ end
64
+
65
+ it ":logger" do
66
+ expect(server.logger).to be_a Contentful::Webhook::Listener::Support::NullLogger
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Contentful::Webhook::Listener::Support::NullLogger do
4
+ let(:logger) { Contentful::Webhook::Listener::Support::NullLogger.new }
5
+
6
+ describe "instance methods" do
7
+ [:info, :debug, :warn, :error, :write].each do |name|
8
+ it "##{name} returns nil" do
9
+ expect(logger.send(name, "foo")).to eq nil
10
+ end
11
+
12
+ it "##{name} doesn't output to STDOUT" do
13
+ expect { logger.send(name, "foo") }.to_not output("foo").to_stdout
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,18 @@
1
+ $LOAD_PATH.unshift File.expand_path('lib', __FILE__)
2
+
3
+ require 'contentful/webhook/listener'
4
+ require 'rspec'
5
+ require 'rspec/mocks'
6
+
7
+ class MockServer
8
+ def [](key)
9
+ nil
10
+ end
11
+ end
12
+
13
+ class MockRequest
14
+ end
15
+
16
+ class MockResponse
17
+ attr_accessor :status, :body
18
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: contentful-webhook-listener
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Contentful GmbH (David Litvak Bruno)
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  description: A Simple HTTP Webserver with pluggable behavior for listening to Contentful
42
56
  API Webhooks
43
57
  email:
@@ -64,6 +78,11 @@ files:
64
78
  - lib/contentful/webhook/listener/support.rb
65
79
  - lib/contentful/webhook/listener/support/null_logger.rb
66
80
  - lib/contentful/webhook/listener/version.rb
81
+ - spec/contentful/webhook/listener/controllers/base_spec.rb
82
+ - spec/contentful/webhook/listener/controllers/wait_spec.rb
83
+ - spec/contentful/webhook/listener/server_spec.rb
84
+ - spec/contentful/webhook/listener/support/null_logger_spec.rb
85
+ - spec/spec_helper.rb
67
86
  homepage: https://github.com/contentful/contentful-webhook-listener.rb
68
87
  licenses:
69
88
  - MIT
@@ -89,4 +108,9 @@ signing_key:
89
108
  specification_version: 4
90
109
  summary: A Simple HTTP Webserver with pluggable behavior for listening to Contentful
91
110
  API Webhooks
92
- test_files: []
111
+ test_files:
112
+ - spec/contentful/webhook/listener/controllers/base_spec.rb
113
+ - spec/contentful/webhook/listener/controllers/wait_spec.rb
114
+ - spec/contentful/webhook/listener/server_spec.rb
115
+ - spec/contentful/webhook/listener/support/null_logger_spec.rb
116
+ - spec/spec_helper.rb