class Contentful::Webhook::Listener::Server

Server is the responsible for handling Webhook receiver endpoints Configuration defaults are:

- port: 5678
- address: '0.0.0.0'
- logger: Contentful::Webhook::Support::NullLogger.new
- endpoints: [{
    endpoint: '/receive',
    controller: Contentful::Webhook::Listener::Controllers::Wait,
    timeout: 300
  }]

Constants

DEFAULT_ADDRESS
DEFAULT_ENDPOINTS
DEFAULT_PORT

Attributes

address[R]
endpoints[R]
logger[R]
port[R]
server[R]

Public Class Methods

new(config = {}) click to toggle source
# File lib/contentful/webhook/listener/server.rb, line 39
def initialize(config = {})
  @port = config.fetch(:port, DEFAULT_PORT)
  @address = config.fetch(:address, DEFAULT_ADDRESS)
  @endpoints = config.fetch(:endpoints, DEFAULT_ENDPOINTS)
  @logger = config.fetch(
    :logger,
    Contentful::Webhook::Listener::Support::NullLogger.new
  )
end
start(config = {}) { |config| ... } click to toggle source
# File lib/contentful/webhook/listener/server.rb, line 31
def self.start(config = {})
  yield config if block_given?

  Thread.new { Server.new(config).start }
end

Public Instance Methods

start() click to toggle source
# File lib/contentful/webhook/listener/server.rb, line 49
def start
  logger.info "Webhook server starting at: http://#{@address}:#{@port}"

  @server = create_server
  mount_endpoints

  @server.start
end

Protected Instance Methods

create_server() click to toggle source
# File lib/contentful/webhook/listener/server.rb, line 60
def create_server
  WEBrick::HTTPServer.new(
    Port: @port,
    BindAddress: @address,
    AccessLog: [],
    Logger: Contentful::Webhook::Listener::Support::NullLogger.new
  )
end
log_endpoint_data(endpoint_config) click to toggle source
# File lib/contentful/webhook/listener/server.rb, line 83
def log_endpoint_data(endpoint_config)
  endpoint_data = [
    endpoint_config[:endpoint],
    "Controller: #{endpoint_config[:controller].name}",
    "Timeout: #{endpoint_config[:timeout]}"
  ]

  logger.info "\t#{endpoint_data.join(' - ')}"
end
mount_endpoints() click to toggle source
# File lib/contentful/webhook/listener/server.rb, line 69
def mount_endpoints
  logger.info 'Available Endpoints:'
  @endpoints.each do |endpoint_config|
    @server.mount(
      endpoint_config[:endpoint],
      endpoint_config[:controller],
      @logger,
      endpoint_config[:timeout]
    )

    log_endpoint_data(endpoint_config)
  end
end