28 lines
623 B
Ruby
28 lines
623 B
Ruby
module Webhook
|
|
class Event
|
|
EVENT_TYPES = %w[
|
|
article_created
|
|
article_updated
|
|
article_destroyed
|
|
].freeze
|
|
|
|
attr_reader :event_type, :payload, :timestamp, :event_id
|
|
|
|
def initialize(event_type:, payload: {})
|
|
raise InvalidEvent unless EVENT_TYPES.include?(event_type)
|
|
|
|
@event_type = event_type
|
|
@payload = payload
|
|
|
|
now = Time.current
|
|
@timestamp = now.rfc3339
|
|
@event_id = Secrets::Generator.sortable(now)
|
|
end
|
|
|
|
def as_json(*_args)
|
|
Webhook::EventSerializer.new(self).serializable_hash
|
|
end
|
|
end
|
|
|
|
class InvalidEvent < StandardError; end
|
|
end
|