emailbutler 0.8.1 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e06b545b530403687a7844d31538ea50de73cffbc8f225ab5a849fe13d7678b0
4
- data.tar.gz: c6fdc2b0fcf1afb430c0b1c80b2b1b89f9273007a54f97b3c96ddbad44a1bef2
3
+ metadata.gz: d753748defc72a9be03be5ce3b5292ac438ccb040babd44955968a73515805f5
4
+ data.tar.gz: 6a962a4ae519be7280a0bf90ec2fa4e1283a7431967d070899164446d74a4b66
5
5
  SHA512:
6
- metadata.gz: 71919a2533d61eb98ea21ef74266c261f1569acaf8ae2193fa30eef083b2ae06c659ec38af299d86d67d5b09f06ed9391b7fd63ba143687bd2592d071bbac916
7
- data.tar.gz: ea46055aa238b71c0c237138caf69e2ed8b4580d0956e95274e3762071b7ae72e273ddf6fc43147634d0723d8b5966b31b8a25d89b8ed71901937fa7c1f9e12a
6
+ metadata.gz: e84a65be9929fee1171136cf07190c42c9d6004171ee080fb87e46ea31587252ad231d7e4530aa1ca05deac266ac0903ca5055f0e20b84d720f26549c96ab64a
7
+ data.tar.gz: cc7bcf25f40122b0efe390b01e8c42cf76eef2fea4894376dec8a2e872cda5ca3ba9aaee858e8666f3417a6a859842480fde431c2394ab4bf11ef61119db5089
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Emailbutler
2
2
  Simple email tracker for Ruby on Rails applications.
3
- Emailbutler allows you to track delivery status of emails sent by your app through Sendgrid, SMTP2GO, Resend.
3
+ Emailbutler allows you to track delivery status of emails sent by your app through Sendgrid, SMTP2GO, Resend, Mailjet.
4
4
 
5
5
  There are situations when you need to check whether a certain letter or certain type of letters was successfully sent from the application, and through the UI of some providers you can try to find such a letter by the recipient or the subject of the letter, but sometimes it's not enough.
6
6
 
@@ -34,7 +34,7 @@ require 'emailbutler/adapters/active_record'
34
34
 
35
35
  Emailbutler.configure do |config|
36
36
  config.adapter = Emailbutler::Adapters::ActiveRecord.new # required
37
- config.providers = %w[sendgrid smtp2go resend] # optional
37
+ config.providers = %w[sendgrid smtp2go resend mailjet] # optional
38
38
  config.ui_username = 'username' # optional
39
39
  config.ui_password = 'password' # optional
40
40
  config.ui_secured_environments = ['production'] # optional
@@ -2,22 +2,9 @@
2
2
 
3
3
  module Emailbutler
4
4
  class WebhooksController < Emailbutler::ApplicationController
5
- # deprecated constants
6
- SENDGRID_USER_AGENT = 'SendGrid Event API'
7
- SMTP2GO_USER_AGENT = 'Go-http-client/1.1'
8
-
9
5
  skip_before_action :verify_authenticity_token
10
6
  before_action :validate_provider, only: %i[create]
11
7
 
12
- def create_deprecated
13
- Emailbutler::Container.resolve(:webhooks_receiver).call(
14
- mapper: receiver_mapper_deprecated(request.headers['HTTP_USER_AGENT']),
15
- payload: mapper_params_deprecated.to_h
16
- )
17
-
18
- head :ok
19
- end
20
-
21
8
  def create
22
9
  Emailbutler::Container.resolve(:webhooks_receiver).call(
23
10
  mapper: receiver_mapper,
@@ -38,6 +25,7 @@ module Emailbutler
38
25
  when 'sendgrid' then Emailbutler::Container.resolve(:sendgrid_mapper)
39
26
  when 'smtp2go' then Emailbutler::Container.resolve(:smtp2go_mapper)
40
27
  when 'resend' then Emailbutler::Container.resolve(:resend_mapper)
28
+ when 'mailjet' then Emailbutler::Container.resolve(:mailjet_mapper)
41
29
  end
42
30
  end
43
31
 
@@ -46,6 +34,7 @@ module Emailbutler
46
34
  when 'sendgrid' then sendgrid_params
47
35
  when 'smtp2go' then smtp2go_params
48
36
  when 'resend' then resend_params
37
+ when 'mailjet' then mailjet_params
49
38
  end
50
39
  end
51
40
 
@@ -61,18 +50,8 @@ module Emailbutler
61
50
  params.permit('type', 'created_at', 'data' => %w[email_id])
62
51
  end
63
52
 
64
- def receiver_mapper_deprecated(user_agent)
65
- case user_agent
66
- when SENDGRID_USER_AGENT then Emailbutler::Container.resolve(:sendgrid_mapper)
67
- when SMTP2GO_USER_AGENT then Emailbutler::Container.resolve(:smtp2go_mapper)
68
- end
69
- end
70
-
71
- def mapper_params_deprecated
72
- params.permit(
73
- 'event', 'sendtime', 'message-id',
74
- '_json' => %w[event timestamp smtp-id sg_message_id]
75
- )
53
+ def mailjet_params
54
+ params.permit('event', 'time', 'Message_GUID')
76
55
  end
77
56
  end
78
57
  end
data/config/routes.rb CHANGED
@@ -1,8 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  Emailbutler::Engine.routes.draw do
4
- post '/webhooks', to: 'webhooks#create_deprecated'
5
- post '/webhooks/:provider', to: 'webhooks#create'
4
+ post '/webhooks/:provider', to: 'webhooks#create' if Emailbutler.configuration.providers.any?
6
5
 
7
6
  resources :ui, only: %i[index show]
8
7
  namespace :ui do
@@ -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].freeze
10
+ AVAILABLE_PROVIDERS = %w[sendgrid smtp2go resend mailjet].freeze
11
11
 
12
12
  attr_accessor :adapter, :providers, :ui_username, :ui_password, :ui_secured_environments
13
13
 
@@ -4,6 +4,7 @@ require 'dry/container'
4
4
  require 'emailbutler/webhooks/mappers/sendgrid'
5
5
  require 'emailbutler/webhooks/mappers/smtp2go'
6
6
  require 'emailbutler/webhooks/mappers/resend'
7
+ require 'emailbutler/webhooks/mappers/mailjet'
7
8
  require 'emailbutler/webhooks/receiver'
8
9
 
9
10
  module Emailbutler
@@ -22,6 +23,7 @@ module Emailbutler
22
23
  register(:sendgrid_mapper) { Emailbutler::Webhooks::Mappers::Sendgrid.new }
23
24
  register(:smtp2go_mapper) { Emailbutler::Webhooks::Mappers::Smtp2Go.new }
24
25
  register(:resend_mapper) { Emailbutler::Webhooks::Mappers::Resend.new }
26
+ register(:mailjet_mapper) { Emailbutler::Webhooks::Mappers::Mailjet.new }
25
27
 
26
28
  # webhook receiver
27
29
  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.1'
4
+ VERSION = '0.8.3'
5
5
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Emailbutler
4
+ module Webhooks
5
+ module Mappers
6
+ class Mailjet
7
+ DELIVERABILITY_MAPPER = {
8
+ 'sent' => 'processed',
9
+ 'open' => 'delivered',
10
+ 'click' => 'delivered',
11
+ 'unsub' => 'failed',
12
+ 'blocked' => 'failed',
13
+ 'bounce' => 'failed',
14
+ 'spam' => 'failed'
15
+ }.freeze
16
+
17
+ def call(payload:)
18
+ payload.stringify_keys!
19
+ # message-id contains data like <uuid>
20
+ message_uuid = payload['Message_GUID']
21
+ status = DELIVERABILITY_MAPPER[payload['event']]
22
+ return [] if message_uuid.nil? || status.nil?
23
+
24
+ [
25
+ {
26
+ message_uuid: message_uuid,
27
+ status: status,
28
+ timestamp: payload['time'] ? Time.at(payload['time'].to_i).utc.to_datetime : nil
29
+ }
30
+ ]
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -16,7 +16,6 @@ module Emailbutler
16
16
 
17
17
  def call(payload:)
18
18
  payload.stringify_keys!
19
- # message-id contains data like <uuid>
20
19
  message_uuid = payload.dig('data', 'email_id')
21
20
  status = DELIVERABILITY_MAPPER[payload['type']]
22
21
  return [] if message_uuid.nil? || status.nil?
data/lib/emailbutler.rb CHANGED
@@ -24,12 +24,6 @@ module Emailbutler
24
24
  # end
25
25
  #
26
26
  def configure
27
- ActiveSupport::Deprecation.new.warn(
28
- 'Webhook endpoint should receive provider name in params. ' \
29
- 'Please update webhook url in settings of your SMTP provider.' \
30
- 'Webhook without provider in params will be removed soon.'
31
- )
32
-
33
27
  yield configuration
34
28
 
35
29
  configuration.validate
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.1
4
+ version: 0.8.3
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-06-04 00:00:00.000000000 Z
11
+ date: 2024-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-container
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: '1.39'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop-factory_bot
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '2.0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '2.0'
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: rubocop-performance
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -166,6 +180,20 @@ dependencies:
166
180
  version: '0.6'
167
181
  - !ruby/object:Gem::Dependency
168
182
  name: rubocop-rspec
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '3.0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '3.0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: rubocop-rspec_rails
169
197
  requirement: !ruby/object:Gem::Requirement
170
198
  requirements:
171
199
  - - "~>"
@@ -216,6 +244,7 @@ files:
216
244
  - lib/emailbutler/helpers.rb
217
245
  - lib/emailbutler/mailers/helpers.rb
218
246
  - lib/emailbutler/version.rb
247
+ - lib/emailbutler/webhooks/mappers/mailjet.rb
219
248
  - lib/emailbutler/webhooks/mappers/resend.rb
220
249
  - lib/emailbutler/webhooks/mappers/sendgrid.rb
221
250
  - lib/emailbutler/webhooks/mappers/smtp2go.rb