Sha256: 314cd6e413001f72747dc5c661b66fc302935beebbe471acdac24d38347e5a1c

Contents?: true

Size: 1.04 KB

Versions: 10

Compression:

Stored size: 1.04 KB

Contents

# frozen_string_literal: true

module Emailbutler
  module Webhooks
    module Mappers
      class Sendgrid
        DELIVERABILITY_MAPPER = {
          'processed' => 'processed',
          'delivered' => 'delivered',
          'open' => 'delivered',
          'click' => 'delivered',
          'deferred' => 'failed',
          'bounce' => 'failed',
          'dropped' => 'failed',
          'spamreport' => 'failed'
        }.freeze

        def self.call(...)
          new.call(...)
        end

        def call(payload:)
          payload['_json'].filter_map { |message|
            message.stringify_keys!
            message_uuid = message['smtp-id'] || message['sg_message_id']
            status = DELIVERABILITY_MAPPER[message['event']]
            next if message_uuid.nil? || status.nil?

            {
              message_uuid: message_uuid,
              status: status,
              timestamp: message['timestamp'] ? Time.at(message['timestamp'].to_i).utc.to_datetime : nil
            }
          }
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
emailbutler-0.7.6 lib/emailbutler/webhooks/mappers/sendgrid.rb
emailbutler-0.7.5 lib/emailbutler/webhooks/mappers/sendgrid.rb
emailbutler-0.7.4 lib/emailbutler/webhooks/mappers/sendgrid.rb
emailbutler-0.7.3 lib/emailbutler/webhooks/mappers/sendgrid.rb
emailbutler-0.7.2 lib/emailbutler/webhooks/mappers/sendgrid.rb
emailbutler-0.7.1 lib/emailbutler/webhooks/mappers/sendgrid.rb
emailbutler-0.7.0 lib/emailbutler/webhooks/mappers/sendgrid.rb
emailbutler-0.6.1 lib/emailbutler/webhooks/mappers/sendgrid.rb
emailbutler-0.6.0 lib/emailbutler/webhooks/mappers/sendgrid.rb
emailbutler-0.5.9 lib/emailbutler/webhooks/mappers/sendgrid.rb