module Webhooks::Outgoing::IssuingModel
def generate_created_webhook
def generate_created_webhook generate_webhook(:created) end
def generate_deleted_webhook
def generate_deleted_webhook return false unless parent.present? return false if parent.being_destroyed? generate_webhook(:deleted, async: false) end
def generate_updated_webhook
def generate_updated_webhook generate_webhook(:updated) end
def generate_webhook(action, async: true)
def generate_webhook(action, async: true) # allow individual models to opt out of generating webhooks return if skip_generate_webhook?(action) # we can only generate webhooks for objects that return their their team / parent. return unless parent.present? # Try to find an event type definition for this action. event_type = Webhooks::Outgoing::EventType.find_by(id: "#{self.class.name.underscore}.#{action}") # If the event type is defined as one that people can be subscribed to, # and this object has a parent where an associated outgoing webhooks endpoint could be registered. if event_type # Only generate an event record if an endpoint is actually listening for this event type. # If there are endpoints listening, make sure we know which API versions they're looking for. if (api_versions = parent.endpoint_api_versions_listening_for_event_type(event_type)).any? if async # serialization can be heavy so run it as a job Webhooks::Outgoing::GenerateJob.perform_later(self, action, api_versions) else generate_webhook_perform(action, api_versions) end end end end
def generate_webhook_perform(action, api_versions)
def generate_webhook_perform(action, api_versions) event_type = Webhooks::Outgoing::EventType.find_by(id: "#{self.class.name.underscore}.#{action}") api_versions.each do |api_version| webhook = send(BulletTrain::OutgoingWebhooks.parent_association).webhooks_outgoing_events.create( event_type_id: event_type.id, subject: self, data: to_api_json(api_version), api_version: api_version ) webhook.deliver end end
def parent
def parent return unless respond_to? BulletTrain::OutgoingWebhooks.parent_association send(BulletTrain::OutgoingWebhooks.parent_association) end
def skip_generate_webhook?(action)
def skip_generate_webhook?(action) false end