module Webhookr module ServiceUnderTest class Adapter SERVICE_NAME = 'service_under_test' include Webhookr::Services::Adapter::Base class << self def process(payload) [*payload].collect do |p| p = Rack::Utils.parse_nested_query(p) validate(payload) OpenStruct.new({ :event_type => p["event"], :data => OpenStruct.new(p["data"]) }) end end def validate(payload) if payload.nil? || payload == "blort" raise Webhookr::InvalidPayloadError.new("'#{payload}' is not valid") end end end end end end module Webhookr module ServiceUnderTest def stub(options = {}) ops = { :service_name => "service_under_test", :event_type => "test_event", :email => "gerry@zoocasa.com" }.merge(options) OpenStruct.new({ :payload => "event=#{ops[:event_type]}&data[email]=#{ops[:email]}", :service_name => ops[:service_name], :event_type => ops[:event_type], :email => ops[:email] }) end end end class PlainOldCallBackClass @@call_count = 0 @@email = nil def self.reset! @@call_count = 0 @@email = nil end def self.call_count @@call_count end def self.email @@email end def on_test_event(payload) @@call_count += 1 @@email = payload.data.email end end