* Start with webhooks: table and model * Start with webhooks api * Start with webhooks api * Webhook::Event class and events list * Remove commented callbacks * Start with sending events to webhook endpoints * A couple of tests for Articles::Creator * Send event to webhook endpoint on article destroy * Dispatch event on article update * Dispatch event when an article updated from admin * Spec for the webhook job * One more test for the dispatch event job * Integration-like spec for event dispatching to webhook endpoints when creating an article * Use Addressable::URI to parse endpoint url * Add oj as a faster fast_jsonapi backend * Renamed serializers * Move article serialization out of a model * Don't allow to create a webhook event with invalid type * Add fields for ArticleSerializer * Fix webhook event job specs * Specify timeout when dispatching events * Fix webhook job spec * Change webhook events queue name * Change serialized article fields for the dispatchable events * Include user data when serializing an article for webhook event * Moved decorating out of Webhook::DispatchEvent, fixed most specs * Fix route in ArticleSerializer * Move Article decoration to Webhook::PayloadAdapter * Refactor image url helpers to avoid including helpers into serializer * Fix specs * Default url options for production
26 lines
616 B
Ruby
26 lines
616 B
Ruby
module Webhook
|
|
class DispatchEvent
|
|
def initialize(event_type, record)
|
|
@event_type = event_type
|
|
@record = record
|
|
end
|
|
|
|
def self.call(*args)
|
|
new(*args).call
|
|
end
|
|
|
|
def call
|
|
endpoint_urls = Endpoint.for_events([event_type]).pluck(:target_url)
|
|
return if endpoint_urls.empty?
|
|
|
|
event_json = Event.new(event_type: event_type, payload: PayloadAdapter.new(record).hash).to_json
|
|
endpoint_urls.each do |url|
|
|
DispatchEventJob.perform_later(endpoint_url: url, payload: event_json)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
attr_reader :event_type, :record
|
|
end
|
|
end
|