emailbutler 0.8.4 → 0.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 60f2148f4793cad24e9b23a458dc30a5501bb9bc18dd33690876bb5063a58f6b
4
- data.tar.gz: 9fa0ddc6da65ba27422abe993f1ab767f0cfb347925a89a4ebfe77b392d9bc65
3
+ metadata.gz: 0bd13652cc6d27528cda94c0245808f10ac00a71b903a59a85bf1b5f703d540e
4
+ data.tar.gz: d1e3a64b3b54906385f69231a2e4ecbc2eb417b06226d43954686e06dc55ccae
5
5
  SHA512:
6
- metadata.gz: 9356fdca863bdd820bdca2526e3f2b90e09dee401bf0a499664ee9eecca8766ba6e8e415228965732cc0b8db192d0669a81b86b8165abfc8c09fb3733e52ccc5
7
- data.tar.gz: e3135c5e199dd2e55804825ffb194d9de3de118bd898eab10040e84cef889b93ff72cbdacc2c72d79550629d4b20b16416bed5d40ee26f08e239191245791fa2
6
+ metadata.gz: aff55f8d47be9a08766807f4e83ada5e7ae11bb8dc8eedbf0940613222aa768c2ae2ebe6c9af6697fff543e0da256f66eb529c2cd0249981ea51a3bea5f69d36
7
+ data.tar.gz: 2e012d481612783002bf5f8800b0fbfb2ba8c5366f3867d73fa1aeb19cae687367718ef25db3aa7aad268b5d86560f55c406be64a5e0d3915b261236191375ca
data/README.md CHANGED
@@ -36,7 +36,7 @@ require 'emailbutler/adapters/active_record'
36
36
 
37
37
  Emailbutler.configure do |config|
38
38
  config.adapter = Emailbutler::Adapters::ActiveRecord.new # required
39
- config.providers = %w[sendgrid smtp2go resend mailjet] # optional
39
+ config.providers = %w[sendgrid smtp2go resend mailjet mailtrap mandrill] # optional
40
40
  config.ui_username = 'username' # optional
41
41
  config.ui_password = 'password' # optional
42
42
  config.ui_secured_environments = ['production'] # optional
@@ -26,6 +26,8 @@ module Emailbutler
26
26
  when 'smtp2go' then Emailbutler::Container.resolve(:smtp2go_mapper)
27
27
  when 'resend' then Emailbutler::Container.resolve(:resend_mapper)
28
28
  when 'mailjet' then Emailbutler::Container.resolve(:mailjet_mapper)
29
+ when 'mailtrap' then Emailbutler::Container.resolve(:mailtrap_mapper)
30
+ when 'mandrill' then Emailbutler::Container.resolve(:mandrill_mapper)
29
31
  end
30
32
  end
31
33
 
@@ -35,6 +37,8 @@ module Emailbutler
35
37
  when 'smtp2go' then smtp2go_params
36
38
  when 'resend' then resend_params
37
39
  when 'mailjet' then mailjet_params
40
+ when 'mailtrap' then mailtrap_params
41
+ when 'mandrill' then mandrill_params
38
42
  end
39
43
  end
40
44
 
@@ -53,5 +57,13 @@ module Emailbutler
53
57
  def mailjet_params
54
58
  params.permit('event', 'time', 'Message_GUID')
55
59
  end
60
+
61
+ def mailtrap_params
62
+ params.permit('events' => %w[event timestamp message_id])
63
+ end
64
+
65
+ def mandrill_params
66
+ params.permit('mandrill_events' => %w[event ts _id])
67
+ end
56
68
  end
57
69
  end
@@ -7,7 +7,7 @@ module Emailbutler
7
7
  AVAILABLE_ADAPTERS = %w[
8
8
  Emailbutler::Adapters::ActiveRecord
9
9
  ].freeze
10
- AVAILABLE_PROVIDERS = %w[sendgrid smtp2go resend mailjet].freeze
10
+ AVAILABLE_PROVIDERS = %w[sendgrid smtp2go resend mailjet mailtrap mandrill].freeze
11
11
 
12
12
  attr_accessor :adapter, :providers, :ui_username, :ui_password, :ui_secured_environments
13
13
 
@@ -16,8 +16,8 @@ module Emailbutler
16
16
  @providers = []
17
17
 
18
18
  # It's required to specify these 3 variables to enable basic auth to UI
19
- @ui_username = nil
20
- @ui_password = nil
19
+ @ui_username = ''
20
+ @ui_password = ''
21
21
  # Secured environments variable must directly contains environment names
22
22
  @ui_secured_environments = []
23
23
  end
@@ -25,9 +25,9 @@ module Emailbutler
25
25
  def validate
26
26
  validate_adapter
27
27
  validate_providers
28
+ validate_secured_environments
28
29
  validate_username
29
30
  validate_password
30
- validate_secured_environments
31
31
  end
32
32
 
33
33
  private
@@ -45,22 +45,22 @@ module Emailbutler
45
45
  raise InitializeError, 'Providers list contain invalid element'
46
46
  end
47
47
 
48
+ def validate_secured_environments
49
+ raise InitializeError, 'Environments list must be array' unless ui_secured_environments.is_a?(Array)
50
+ end
51
+
48
52
  def validate_username
49
- return if ui_username.blank?
50
- return if ui_username.is_a?(String)
53
+ return if ui_secured_environments.blank? && ui_username.is_a?(String)
54
+ return if ui_secured_environments.any? && ui_username.is_a?(String) && ui_username.present?
51
55
 
52
- raise InitializeError, 'Username must be nil or filled string'
56
+ raise InitializeError, 'Username must be string'
53
57
  end
54
58
 
55
59
  def validate_password
56
- return if ui_password.blank?
57
- return if ui_password.is_a?(String)
58
-
59
- raise InitializeError, 'Password must be nil or filled string'
60
- end
60
+ return if ui_secured_environments.blank? && ui_password.is_a?(String)
61
+ return if ui_secured_environments.any? && ui_password.is_a?(String) && ui_password.present?
61
62
 
62
- def validate_secured_environments
63
- raise InitializeError, 'Environments list must be array' unless ui_secured_environments.is_a?(Array)
63
+ raise InitializeError, 'Password must be string'
64
64
  end
65
65
  end
66
66
  end
@@ -5,6 +5,8 @@ require 'emailbutler/webhooks/mappers/sendgrid'
5
5
  require 'emailbutler/webhooks/mappers/smtp2go'
6
6
  require 'emailbutler/webhooks/mappers/resend'
7
7
  require 'emailbutler/webhooks/mappers/mailjet'
8
+ require 'emailbutler/webhooks/mappers/mailtrap'
9
+ require 'emailbutler/webhooks/mappers/mandrill'
8
10
  require 'emailbutler/webhooks/receiver'
9
11
 
10
12
  module Emailbutler
@@ -24,6 +26,8 @@ module Emailbutler
24
26
  register(:smtp2go_mapper) { Emailbutler::Webhooks::Mappers::Smtp2Go.new }
25
27
  register(:resend_mapper) { Emailbutler::Webhooks::Mappers::Resend.new }
26
28
  register(:mailjet_mapper) { Emailbutler::Webhooks::Mappers::Mailjet.new }
29
+ register(:mailtrap_mapper) { Emailbutler::Webhooks::Mappers::Mailtrap.new }
30
+ register(:mandrill_mapper) { Emailbutler::Webhooks::Mappers::Mandrill.new }
27
31
 
28
32
  # webhook receiver
29
33
  register(:webhooks_receiver) { Emailbutler::Webhooks::Receiver.new }
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Emailbutler
4
- VERSION = '0.8.4'
4
+ VERSION = '0.8.6'
5
5
  end
@@ -7,19 +7,15 @@ module Emailbutler
7
7
  DELIVERABILITY_MAPPER = {
8
8
  'sent' => 'processed',
9
9
  'open' => 'delivered',
10
- 'click' => 'delivered',
11
- 'unsub' => 'failed',
12
- 'blocked' => 'failed',
13
- 'bounce' => 'failed',
14
- 'spam' => 'failed'
10
+ 'click' => 'delivered'
15
11
  }.freeze
16
12
 
17
13
  def call(payload:)
18
14
  payload.stringify_keys!
19
15
  # message-id contains data like <uuid>
20
16
  message_uuid = payload['Message_GUID']
21
- status = DELIVERABILITY_MAPPER[payload['event']]
22
- return [] if message_uuid.nil? || status.nil?
17
+ status = DELIVERABILITY_MAPPER[payload['event']] || Emailbutler::Message::FAILED
18
+ return [] if message_uuid.nil?
23
19
 
24
20
  [
25
21
  {
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Emailbutler
4
+ module Webhooks
5
+ module Mappers
6
+ class Mailtrap
7
+ DELIVERABILITY_MAPPER = {
8
+ 'delivery' => 'delivered',
9
+ 'open' => 'delivered',
10
+ 'click' => 'delivered'
11
+ }.freeze
12
+
13
+ def call(payload:)
14
+ payload['events'].filter_map { |message|
15
+ message.stringify_keys!
16
+ message_uuid = message['message_id']
17
+ status = DELIVERABILITY_MAPPER[message['event']] || Emailbutler::Message::FAILED
18
+ next if message_uuid.nil?
19
+
20
+ {
21
+ message_uuid: message_uuid,
22
+ status: status,
23
+ timestamp: message['timestamp'] ? Time.at(message['timestamp']).utc.to_datetime : nil
24
+ }
25
+ }
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Emailbutler
4
+ module Webhooks
5
+ module Mappers
6
+ class Mandrill
7
+ DELIVERABILITY_MAPPER = {
8
+ 'send' => 'processed',
9
+ 'open' => 'delivered',
10
+ 'click' => 'delivered'
11
+ }.freeze
12
+
13
+ def call(payload:)
14
+ payload['mandrill_events'].filter_map { |message|
15
+ message.stringify_keys!
16
+ message_uuid = message['_id']
17
+ status = DELIVERABILITY_MAPPER[message['event']] || Emailbutler::Message::FAILED
18
+ next if message_uuid.nil?
19
+
20
+ {
21
+ message_uuid: message_uuid,
22
+ status: status,
23
+ timestamp: message['ts'] ? Time.at(message['ts']).utc.to_datetime : nil
24
+ }
25
+ }
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -8,17 +8,14 @@ module Emailbutler
8
8
  'email.sent' => 'processed',
9
9
  'email.delivered' => 'delivered',
10
10
  'email.opened' => 'delivered',
11
- 'email.clicked' => 'delivered',
12
- 'email.delivered_delayed' => 'failed',
13
- 'email.bounced' => 'failed',
14
- 'email.complained' => 'failed'
11
+ 'email.clicked' => 'delivered'
15
12
  }.freeze
16
13
 
17
14
  def call(payload:)
18
15
  payload.stringify_keys!
19
16
  message_uuid = payload.dig('data', 'email_id')
20
- status = DELIVERABILITY_MAPPER[payload['type']]
21
- return [] if message_uuid.nil? || status.nil?
17
+ status = DELIVERABILITY_MAPPER[payload['type']] || Emailbutler::Message::FAILED
18
+ return [] if message_uuid.nil?
22
19
 
23
20
  [
24
21
  {
@@ -8,18 +8,14 @@ module Emailbutler
8
8
  'processed' => 'processed',
9
9
  'delivered' => 'delivered',
10
10
  'open' => 'delivered',
11
- 'click' => 'delivered',
12
- 'deferred' => 'failed',
13
- 'bounce' => 'failed',
14
- 'dropped' => 'failed',
15
- 'spamreport' => 'failed'
11
+ 'click' => 'delivered'
16
12
  }.freeze
17
13
 
18
14
  def call(payload:)
19
15
  payload['_json'].filter_map { |message|
20
16
  message.stringify_keys!
21
17
  message_uuid = message['smtp-id'] || message['sg_message_id']
22
- status = DELIVERABILITY_MAPPER[message['event']]
18
+ status = DELIVERABILITY_MAPPER[message['event']] || Emailbutler::Message::FAILED
23
19
  next if message_uuid.nil? || status.nil?
24
20
 
25
21
  {
@@ -8,18 +8,15 @@ module Emailbutler
8
8
  'processed' => 'processed',
9
9
  'delivered' => 'delivered',
10
10
  'open' => 'delivered',
11
- 'click' => 'delivered',
12
- 'bounce' => 'failed',
13
- 'reject' => 'failed',
14
- 'spam' => 'failed'
11
+ 'click' => 'delivered'
15
12
  }.freeze
16
13
 
17
14
  def call(payload:)
18
15
  payload.stringify_keys!
19
16
  # message-id contains data like <uuid>
20
17
  message_uuid = payload['message-id'][1..-2]
21
- status = DELIVERABILITY_MAPPER[payload['event']]
22
- return [] if message_uuid.nil? || status.nil?
18
+ status = DELIVERABILITY_MAPPER[payload['event']] || Emailbutler::Message::FAILED
19
+ return [] if message_uuid.nil?
23
20
 
24
21
  [
25
22
  {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: emailbutler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.4
4
+ version: 0.8.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bogdanov Anton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-13 00:00:00.000000000 Z
11
+ date: 2024-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-container
@@ -245,6 +245,8 @@ files:
245
245
  - lib/emailbutler/mailers/helpers.rb
246
246
  - lib/emailbutler/version.rb
247
247
  - lib/emailbutler/webhooks/mappers/mailjet.rb
248
+ - lib/emailbutler/webhooks/mappers/mailtrap.rb
249
+ - lib/emailbutler/webhooks/mappers/mandrill.rb
248
250
  - lib/emailbutler/webhooks/mappers/resend.rb
249
251
  - lib/emailbutler/webhooks/mappers/sendgrid.rb
250
252
  - lib/emailbutler/webhooks/mappers/smtp2go.rb