Sha256: 685ba077dfec1b305eae3542f590386e3162a8c2f1383b604307ec3db12bc50f

Contents?: true

Size: 860 Bytes

Versions: 4

Compression:

Stored size: 860 Bytes

Contents

# frozen_string_literal: true

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

        def self.call(args={})
          new.call(**args)
        end

        def call(payload:)
          payload['_json'].filter_map { |message|
            message_uuid = message['smtp-id']
            status = DELIVERABILITY_MAPPER[message['event']]
            next unless message_uuid || status

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

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
emailbutler-0.4.0 lib/emailbutler/webhooks/mappers/sendgrid.rb
emailbutler-0.3.0 lib/emailbutler/webhooks/mappers/sendgrid.rb
emailbutler-0.2.3 lib/emailbutler/webhooks/mappers/sendgrid.rb
emailbutler-0.2.2 lib/emailbutler/webhooks/mappers/sendgrid.rb