Module: Mandrill::Rails::WebHookProcessor

Extended by:
ActiveSupport::Concern
Defined in:
lib/mandrill-rails/web_hook_processor.rb

Overview

WebHookProcessor is a module that mixes in Mandrill web hook processing support to a controller in your application.

The controller is expected to be a singlular resource controller. WebHookProcessor provides the :show and :create method implementation.

  1. Create a controller that includes Mandrill::Rails::WebHookProcessor

  2. Direct a GET :show and POST :create route to the controller

  3. Define handlers for each of the event types you want to handle

e.g. in routes.rb:

resource :webhook, :controller => 'webhook', :only => [:show,:create]

e.g. a Webhook controller:

class WebhookController < ApplicationController
  include Mandrill::Rails::WebHookProcessor

  # Command: handle each 'inbound' +event_payload+ from Mandrill
  def handle_inbound(event_payload)
    # do some stuff
  end

  # Define other handlers for each event type required.
  # Possible event types: inbound, send, hard_bounce, soft_bounce, open, click, spam, unsub, or reject
  # def handle_<event_type>(event_payload)
  #   # do some stuff
  # end

end

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#authenticate_mandrill_request!Object



99
100
101
102
103
104
105
106
107
108
# File 'lib/mandrill-rails/web_hook_processor.rb', line 99

def authenticate_mandrill_request!
  expected_signature = request.headers['HTTP_X_MANDRILL_SIGNATURE']
  mandrill_webhook_keys = self.class.mandrill_webhook_keys
  if Mandrill::WebHook::Processor.authentic?(expected_signature,mandrill_webhook_keys,request.original_url,request.request_parameters)
    true
  else
    head(:forbidden, :text => "Mandrill signature did not match.")
    false
  end
end

#createObject

Handles controller :create action (corresponds to a POST from Mandrill).



92
93
94
95
96
97
# File 'lib/mandrill-rails/web_hook_processor.rb', line 92

def create
  processor = Mandrill::WebHook::Processor.new(params, self)
  processor.on_unhandled_mandrill_events = self.class.on_unhandled_mandrill_events!
  processor.run!
  head(:ok)
end

#showObject

Handles controller :show action (corresponds to a Mandrill “are you there?” test ping). Returns 200 and does nothing else.



87
88
89
# File 'lib/mandrill-rails/web_hook_processor.rb', line 87

def show
  head(:ok)
end