Repository is archived
No release in over 3 years
Low commit activity in last 3 years
A Simple HTTP Webserver with pluggable behavior for listening to Contentful API Webhooks
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.6
>= 0
~> 3.0.0
>= 0
>= 0
 Project Readme

Build Status

Contentful Webhook Listener

A Simple HTTP Webserver with pluggable behavior for listening to API Webhooks

Contentful

Contentful provides a content infrastructure for digital teams to power content in websites, apps, and devices. Unlike a CMS, Contentful was built to integrate with the modern software stack. It offers a central hub for structured content, powerful management and delivery APIs, and a customizable web app that enable developers and content creators to ship digital products faster.

What does contentful-webhook-listener do?

The aim of contentful-webhook-listener is to have developers setting up their Contentful Webhooks for triggering background jobs.

Installation

Add this line to your application's Gemfile:

gem 'contentful-webhook-listener'

And then execute:

$ bundle

Or install it yourself as:

$ gem install contentful-webhook-listener

Usage

  • Require gem:
require 'contentful/webhook/listener'
  • Create your own Controllers:
class MyController < Contentful::Webhook::Listener::Controllers::Base
  def perform(request, response)
    "do your process..." # This will run on a brackground Thread
  end
end
  • Configure and start your Webhook Listener
require 'logger'

Contentful::Webhook::Listener::Server.start do |config|
  config[:port] = 5678         # Optional
  config[:address] = "0.0.0.0" # Optional
  config[:logger] = Logger.new(STDOUT) # Optional, will use a NullLogger by default
  config[:endpoints] = [
    {
      endpoint: "/receive",     # Where your server will listen
      controller: MyController, # The controller that will process the endpoint
      timeout: 15               # If using Wait, will wait `X` seconds before executing
    }
  ]
end

You can add multiple endpoints, each with it's own Controller.

Webhook Aware Controllers

You can create controllers that can respond on specific Webhook events.

class MyController < Contentful::Webhook::Listener::Controllers::WebhookAware
  def publish
    # Do stuff on publish
    if webhook.entry?
      logger.info "published Entry ID: #{webhook.id} for Space: #{webhook.space_id}"
    end
  end

  def unpublish
    # Do stuff on unpublish
  end

  def archive
    # Do stuff on archive
  end

  def unarchive
    # Do stuff on unarchive
  end

  def create
    # Do stuff on create
  end

  def save
    # Do stuff on save
  end

  def delete
    # Do stuff on delete
  end
end

The controller has a webhook object bound when invoked, that has a few helpers:

  • webhook.entry? will return if the webhook was fired for an Entry

  • webhook.asset? will return if the webhook was fired for an Asset

  • webhook.content_type? will return if the webhook was fired for a Content Type

  • webhook.id will return the Resource (Entry/Asset/Content Type) ID

  • webhook.space_id will return the Space ID

  • webhook.sys will include the metadata for the resource

  • webhook.fields will include the resource fields (not included on Unpublish)

Contributing

  1. Fork it ( https://github.com/[my-github-username]/contentful-webhook-listener/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request