flowmailer_rails 0.1.0 → 0.2.0

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: 3b1b138e49c32a25c5acd356442942b9a42c38e55b4741b9b69206af53cab09b
4
- data.tar.gz: 517ef17f387643e360448dcd27f968257f6f61606e6fed8ab24963cd44ac84a7
3
+ metadata.gz: 26ad29df91bf8ce2e60eea7d6bc7e35ead984aaacb88a09fce445ec98def8542
4
+ data.tar.gz: 606d48b72365d4c9c36bf3b605ff29a4ed9ff159b34889209280ccf1b90872ce
5
5
  SHA512:
6
- metadata.gz: d3caf9173ee0bc60f66eb2b064a28d56ac68e2cf48af17644448680178ae76433c895c20adaa4bb63c7b992996f4f4560b7560bc9b4e6df9a6c7201661ad8da7
7
- data.tar.gz: 9ea6b6bf40e79072b9ba7218fb8aaa32e52a5f03e93a9e31a5d01e6bc558173ba8835972d2dc43f9cf1f8eb6f9e782220b72b8098eb1a2f38d03eae6da800487
6
+ metadata.gz: 6571137fd7a30106c0fa50adc8e0631c6ae7f74efeea7f5a4dbecccad74dc94a3419ee4143d46a2e9ac681d072d6c9fc9b6ea53914f810383cee6e0cc90381dc
7
+ data.tar.gz: fdf61fa3331fea173cdfaa6e36826b30f7c5e1e48286ee6c91cad28d71264aadcd9b26f040c225617db810aa4dc5c365cd4f3202266e4d9f21a47546f69fa578
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- flowmailer_rails (0.1.0)
4
+ flowmailer_rails (0.2.0)
5
5
  actionmailer (>= 3.0.0)
6
6
  faraday (>= 0.7.4, < 1.0)
7
7
  faraday_middleware
@@ -9,68 +9,69 @@ PATH
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- actionmailer (6.0.3.4)
13
- actionpack (= 6.0.3.4)
14
- actionview (= 6.0.3.4)
15
- activejob (= 6.0.3.4)
12
+ actionmailer (6.1.3.2)
13
+ actionpack (= 6.1.3.2)
14
+ actionview (= 6.1.3.2)
15
+ activejob (= 6.1.3.2)
16
+ activesupport (= 6.1.3.2)
16
17
  mail (~> 2.5, >= 2.5.4)
17
18
  rails-dom-testing (~> 2.0)
18
- actionpack (6.0.3.4)
19
- actionview (= 6.0.3.4)
20
- activesupport (= 6.0.3.4)
21
- rack (~> 2.0, >= 2.0.8)
19
+ actionpack (6.1.3.2)
20
+ actionview (= 6.1.3.2)
21
+ activesupport (= 6.1.3.2)
22
+ rack (~> 2.0, >= 2.0.9)
22
23
  rack-test (>= 0.6.3)
23
24
  rails-dom-testing (~> 2.0)
24
25
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
25
- actionview (6.0.3.4)
26
- activesupport (= 6.0.3.4)
26
+ actionview (6.1.3.2)
27
+ activesupport (= 6.1.3.2)
27
28
  builder (~> 3.1)
28
29
  erubi (~> 1.4)
29
30
  rails-dom-testing (~> 2.0)
30
31
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
31
- activejob (6.0.3.4)
32
- activesupport (= 6.0.3.4)
32
+ activejob (6.1.3.2)
33
+ activesupport (= 6.1.3.2)
33
34
  globalid (>= 0.3.6)
34
- activesupport (6.0.3.4)
35
+ activesupport (6.1.3.2)
35
36
  concurrent-ruby (~> 1.0, >= 1.0.2)
36
- i18n (>= 0.7, < 2)
37
- minitest (~> 5.1)
38
- tzinfo (~> 1.1)
39
- zeitwerk (~> 2.2, >= 2.2.2)
37
+ i18n (>= 1.6, < 2)
38
+ minitest (>= 5.1)
39
+ tzinfo (~> 2.0)
40
+ zeitwerk (~> 2.3)
40
41
  addressable (2.7.0)
41
42
  public_suffix (>= 2.0.2, < 5.0)
42
43
  ast (2.4.1)
43
44
  builder (3.2.4)
44
- concurrent-ruby (1.1.7)
45
+ concurrent-ruby (1.1.8)
45
46
  crack (0.4.4)
46
47
  crass (1.0.6)
47
48
  diff-lcs (1.3)
48
49
  docile (1.3.2)
49
50
  erubi (1.10.0)
50
- faraday (0.17.3)
51
+ faraday (0.17.4)
51
52
  multipart-post (>= 1.2, < 3)
52
53
  faraday_middleware (0.14.0)
53
54
  faraday (>= 0.7.4, < 1.0)
54
55
  globalid (0.4.2)
55
56
  activesupport (>= 4.2.0)
56
57
  hashdiff (1.0.1)
57
- i18n (1.8.5)
58
+ i18n (1.8.10)
58
59
  concurrent-ruby (~> 1.0)
59
- loofah (2.7.0)
60
+ loofah (2.9.1)
60
61
  crass (~> 1.0.2)
61
62
  nokogiri (>= 1.5.9)
62
63
  mail (2.7.1)
63
64
  mini_mime (>= 0.1.1)
64
- mini_mime (1.0.2)
65
- mini_portile2 (2.4.0)
66
- minitest (5.14.2)
65
+ mini_mime (1.1.0)
66
+ minitest (5.14.4)
67
67
  multipart-post (2.1.1)
68
- nokogiri (1.10.10)
69
- mini_portile2 (~> 2.4.0)
68
+ nokogiri (1.11.6-arm64-darwin)
69
+ racc (~> 1.4)
70
70
  parallel (1.20.0)
71
71
  parser (2.7.2.0)
72
72
  ast (~> 2.4.1)
73
73
  public_suffix (4.0.6)
74
+ racc (1.5.2)
74
75
  rack (2.2.3)
75
76
  rack-test (1.1.0)
76
77
  rack (>= 1.0, < 3)
@@ -82,7 +83,7 @@ GEM
82
83
  rainbow (3.0.0)
83
84
  rake (13.0.1)
84
85
  regexp_parser (1.8.2)
85
- rexml (3.2.4)
86
+ rexml (3.2.5)
86
87
  rspec (3.9.0)
87
88
  rspec-core (~> 3.9.0)
88
89
  rspec-expectations (~> 3.9.0)
@@ -119,15 +120,14 @@ GEM
119
120
  standard (0.6.2)
120
121
  rubocop (= 0.91.1)
121
122
  rubocop-performance (= 1.8.1)
122
- thread_safe (0.3.6)
123
- tzinfo (1.2.8)
124
- thread_safe (~> 0.1)
123
+ tzinfo (2.0.4)
124
+ concurrent-ruby (~> 1.0)
125
125
  unicode-display_width (1.7.0)
126
126
  webmock (3.10.0)
127
127
  addressable (>= 2.3.6)
128
128
  crack (>= 0.3.2)
129
129
  hashdiff (>= 0.4.0, < 2.0.0)
130
- zeitwerk (2.4.1)
130
+ zeitwerk (2.4.2)
131
131
 
132
132
  PLATFORMS
133
133
  ruby
@@ -143,4 +143,4 @@ DEPENDENCIES
143
143
  webmock (~> 3.10.0)
144
144
 
145
145
  BUNDLED WITH
146
- 2.0.2
146
+ 2.1.4
data/README.md CHANGED
@@ -1,4 +1,6 @@
1
1
  # FlowmailerRails
2
+ [![Gem Version](https://badge.fury.io/rb/flowmailer_rails.svg)](https://rubygems.org/gems/flowmailer_rails)
3
+ ![Tests](https://github.com/teamtailor/flowmailer_rails/workflows/Ruby/badge.svg)
2
4
 
3
5
  Send ActionMailer emails with Flowmailer
4
6
 
@@ -14,14 +16,36 @@ And then execute:
14
16
 
15
17
  $ bundle
16
18
 
17
- Or install it yourself as:
19
+ ## Usage
18
20
 
19
- $ gem install FlowmailerRails
21
+ ### Configuration
20
22
 
21
- ## Usage
23
+ Add basic configuration by providing it with your account id and client Id and Secret for an API source with submitt access.
24
+ ```ruby
25
+ # config/production.rb
26
+ config.action_mailer.flowmailer_settings = {
27
+ account_id: ENV["FLOWMAILER_ACCOUNT_ID"],
28
+ client_id: ENV["FLOWMAILER_CLIENT_ID"],
29
+ client_secret: ENV["FLOWMAILER_CLIENT_SECRET"],
30
+ }
31
+ ```
22
32
 
23
- TODO: Write usage instructions here
33
+ You can also provide procs that handles the `access_token` retrieval if you already have that logic in your Rails app:
34
+ ```ruby
35
+ # config/production.rb
36
+ config.action_mailer.flowmailer_settings = {
37
+ account_id: ENV["FLOWMAILER_ACCOUNT_ID"],
38
+ access_token: -> { FooBar.access_token },
39
+ fetch_new_access_token: -> { FooBar.fetch_new_access_token },
40
+ }
41
+ ```
42
+
43
+ Tell Rails to use Flowmailer as the delivery method
24
44
 
45
+ ```ruby
46
+ # config/production.rb
47
+ config.action_mailer.delivery_method = :flowmailer
48
+ ```
25
49
  ## Development
26
50
 
27
51
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -5,6 +5,7 @@ module FlowmailerRails
5
5
  class Mailer
6
6
  class NoAccessTokenError < StandardError; end
7
7
  class DeliveryError < StandardError; end
8
+ class TooBigMessageError < DeliveryError; end
8
9
  class ExpiredAccessTokenError < StandardError; end
9
10
 
10
11
  OAUTH_ENDPOINT = "https://login.flowmailer.net".freeze
@@ -38,8 +39,7 @@ module FlowmailerRails
38
39
  begin
39
40
  response = api_client.post(path, json, authorization_header)
40
41
 
41
- raise ExpiredAccessTokenError if response.status == 401
42
- raise DeliveryError, response.body unless response.success?
42
+ handle_failure(response)
43
43
  rescue ExpiredAccessTokenError
44
44
  if (retries += 1) <= 3
45
45
  fetch_new_access_token
@@ -52,6 +52,18 @@ module FlowmailerRails
52
52
  response
53
53
  end
54
54
 
55
+ def handle_failure(response)
56
+ return if response.success?
57
+
58
+ raise ExpiredAccessTokenError if response.status == 401
59
+
60
+ too_big_error = response.body&.[]("allErrors")&.find { |error| error["code"] == "message.toobig" }
61
+
62
+ raise TooBigMessageError, too_big_error["defaultMessage"] if too_big_error.present?
63
+
64
+ raise DeliveryError, response.body
65
+ end
66
+
55
67
  def api_client
56
68
  @api_client ||= Faraday.new(url: API_ENDPOINT) { |conn|
57
69
  conn.request :json
@@ -1,3 +1,3 @@
1
1
  module FlowmailerRails
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flowmailer_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonas Brusman
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-11-19 00:00:00.000000000 Z
11
+ date: 2021-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionmailer
@@ -199,7 +199,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
199
199
  - !ruby/object:Gem::Version
200
200
  version: '0'
201
201
  requirements: []
202
- rubygems_version: 3.0.3
202
+ rubygems_version: 3.1.4
203
203
  signing_key:
204
204
  specification_version: 4
205
205
  summary: ActionMailer adapter for Flowmailer