Module: PostProxy::WebhookEvents
- Defined in:
- lib/postproxy/webhook_events.rb
Defined Under Namespace
Classes: CommentCreatedData, Event, ImportedProfile, MediaFailedData, MessageEventData, PlatformPostData, PostImportedData, PostProcessedData, PostProcessedPlatform, ProfileCommentCreatedData, ProfileEventData, ProfileStatsData, ReactionEventData
Constant Summary collapse
- DATA_CLASSES =
{ "post.processed" => PostProcessedData, "post.imported" => PostImportedData, "platform_post.published" => PlatformPostData, "platform_post.failed" => PlatformPostData, "platform_post.failed_waiting_for_retry" => PlatformPostData, "platform_post.insights" => PlatformPostData, "profile.connected" => ProfileEventData, "profile.disconnected" => ProfileEventData, "profile.stats" => ProfileStatsData, "media.failed" => MediaFailedData, "comment.created" => CommentCreatedData, "profile_comment.created" => ProfileCommentCreatedData, "message.received" => MessageEventData, "message.sent" => MessageEventData, "message.delivered" => MessageEventData, "message.read" => MessageEventData, "message.edited" => MessageEventData, "message.deleted" => MessageEventData, "message.failed_waiting_for_retry" => MessageEventData, "message.failed" => MessageEventData, "reaction.received" => ReactionEventData }.freeze
Class Method Summary collapse
-
.parse(body) ⇒ Object
Parse a webhook body and return a typed Event.
Class Method Details
.parse(body) ⇒ Object
Parse a webhook body and return a typed Event. data is parsed into the
appropriate model based on type. Raises WebhookParseError on bad input.
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/postproxy/webhook_events.rb', line 129 def self.parse(body) parsed = case body when String then JSON.parse(body, symbolize_names: true) when Hash then body.transform_keys(&:to_sym) else raise WebhookParseError, "Webhook body must be a String or Hash" end rescue JSON::ParserError => e raise WebhookParseError, "Invalid JSON: #{e.}" else type = parsed[:type].to_s raise WebhookParseError, "Unknown webhook event type: #{type.inspect}" unless DATA_CLASSES.key?(type) data_class = DATA_CLASSES[type] data_hash = (parsed[:data] || {}).transform_keys(&:to_sym) Event.new( id: parsed[:id], type: type, created_at: parsed[:created_at], data: data_class.new(**data_hash) ) end |