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 |