resend 0.15.0 → 0.17.0
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 +4 -4
- data/README.md +16 -1
- data/lib/resend/broadcasts.rb +41 -0
- data/lib/resend/client.rb +4 -3
- data/lib/resend/mailer.rb +66 -2
- data/lib/resend/request.rb +4 -2
- data/lib/resend/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e3bd3c129bc391019cd0d3f1c30b40da0354cdc38ab1f2eb8b09830f2276afad
|
4
|
+
data.tar.gz: e7d83291e24db93d771f1a7588b5fc57353f62c86b97b5f9df1d09151f403284
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c27434e2d97b55af4a0b8bde50e5cf3c398498c460451e3ee5c367d6a78a47c8f65d3ecf7c5b7455de2a40040c4e6533b587fa7a0ee2af57d7ec262f2c2e7bf0
|
7
|
+
data.tar.gz: 671f1d0e1fb99bcfbd254ac0fa70b15c52da9406d0800188e77585be420ed7ec6ef61d8a9a4778ec03414c5275f30fb28633a17825ce7a8e110fcbb180f80c15
|
data/README.md
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
[](https://opensource.org/licenses/MIT)
|
4
4
|

|
5
5
|
[](https://badge.fury.io/rb/resend)
|
6
|
+
|
6
7
|
---
|
7
8
|
|
8
9
|
## Installation
|
@@ -10,11 +11,13 @@
|
|
10
11
|
To install Resend Ruby and Rails SDK, simply execute the following command in a terminal:
|
11
12
|
|
12
13
|
Via RubyGems:
|
14
|
+
|
13
15
|
```
|
14
16
|
gem install resend
|
15
17
|
```
|
16
18
|
|
17
19
|
Via Gemfile:
|
20
|
+
|
18
21
|
```
|
19
22
|
gem 'resend'
|
20
23
|
```
|
@@ -37,6 +40,19 @@ Resend.configure do |config|
|
|
37
40
|
end
|
38
41
|
```
|
39
42
|
|
43
|
+
The `#api_key` method also accepts a block without arguments, which can be useful for lazy or dynamic loading of API keys.
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
require "resend"
|
47
|
+
Resend.api_key = -> { ENV["RESEND_API_KEY"] }
|
48
|
+
```
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
Resend.configure do |config|
|
52
|
+
config.api_key = -> { Current.user.resend_api_key } # Assumes the user has a `resend_api_key` attribute.
|
53
|
+
end
|
54
|
+
```
|
55
|
+
|
40
56
|
## Example
|
41
57
|
|
42
58
|
```rb
|
@@ -56,7 +72,6 @@ puts r
|
|
56
72
|
|
57
73
|
You can view all the examples in the [examples folder](https://github.com/drish/resend-ruby/tree/main/examples)
|
58
74
|
|
59
|
-
|
60
75
|
# Rails and ActiveMailer support
|
61
76
|
|
62
77
|
This gem can be used as an ActionMailer delivery method, add this to your `config/environments/environment.rb` file.
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "resend/request"
|
4
|
+
require "resend/errors"
|
5
|
+
|
6
|
+
module Resend
|
7
|
+
# broadcasts api wrapper
|
8
|
+
module Broadcasts
|
9
|
+
class << self
|
10
|
+
# https://resend.com/docs/api-reference/broadcasts/create-broadcast
|
11
|
+
def create(params = {})
|
12
|
+
path = "broadcasts"
|
13
|
+
Resend::Request.new(path, params, "post").perform
|
14
|
+
end
|
15
|
+
|
16
|
+
# https://resend.com/docs/api-reference/broadcasts/send-broadcast
|
17
|
+
def send(params = {})
|
18
|
+
path = "broadcasts/#{params[:broadcast_id]}/send"
|
19
|
+
Resend::Request.new(path, params, "post").perform
|
20
|
+
end
|
21
|
+
|
22
|
+
# https://resend.com/docs/api-reference/broadcasts/list-broadcasts
|
23
|
+
def list
|
24
|
+
path = "broadcasts"
|
25
|
+
Resend::Request.new(path, {}, "get").perform
|
26
|
+
end
|
27
|
+
|
28
|
+
# https://resend.com/docs/api-reference/broadcasts/delete-broadcast
|
29
|
+
def remove(broadcast_id = "")
|
30
|
+
path = "broadcasts/#{broadcast_id}"
|
31
|
+
Resend::Request.new(path, {}, "delete").perform
|
32
|
+
end
|
33
|
+
|
34
|
+
# https://resend.com/docs/api-reference/broadcasts/get-broadcast
|
35
|
+
def get(broadcast_id = "")
|
36
|
+
path = "broadcasts/#{broadcast_id}"
|
37
|
+
Resend::Request.new(path, {}, "get").perform
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/resend/client.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "resend/audiences"
|
3
4
|
require "resend/api_keys"
|
4
|
-
require "resend/
|
5
|
-
require "resend/emails"
|
5
|
+
require "resend/broadcasts"
|
6
6
|
require "resend/batch"
|
7
|
-
require "resend/audiences"
|
8
7
|
require "resend/contacts"
|
8
|
+
require "resend/domains"
|
9
|
+
require "resend/emails"
|
9
10
|
require "httparty"
|
10
11
|
|
11
12
|
module Resend
|
data/lib/resend/mailer.rb
CHANGED
@@ -7,6 +7,17 @@ module Resend
|
|
7
7
|
class Mailer
|
8
8
|
attr_accessor :config, :settings
|
9
9
|
|
10
|
+
# These are set as `headers` by the Rails API, but these will be filtered out
|
11
|
+
# when constructing the Resend API payload, since they're are sent as post params.
|
12
|
+
# https://resend.com/docs/api-reference/emails/send-email
|
13
|
+
IGNORED_HEADERS = %w[
|
14
|
+
cc bcc
|
15
|
+
from reply-to to subject mime-version
|
16
|
+
html text
|
17
|
+
content-type tags scheduled_at
|
18
|
+
headers
|
19
|
+
].freeze
|
20
|
+
|
10
21
|
def initialize(config)
|
11
22
|
@config = config
|
12
23
|
raise Resend::Error.new("Make sure your API Key is set", @config) unless Resend.api_key
|
@@ -51,7 +62,19 @@ module Resend
|
|
51
62
|
end
|
52
63
|
|
53
64
|
#
|
54
|
-
# Add custom headers fields
|
65
|
+
# Add custom headers fields.
|
66
|
+
#
|
67
|
+
# Both ways are supported:
|
68
|
+
#
|
69
|
+
# 1. Through the `#mail()` method ie:
|
70
|
+
# mail(headers: { "X-Custom-Header" => "value" })
|
71
|
+
#
|
72
|
+
# 2. Through the Rails `#headers` method ie:
|
73
|
+
# headers["X-Custom-Header"] = "value"
|
74
|
+
#
|
75
|
+
#
|
76
|
+
# setting the header values through the `#mail` method will overwrite values set
|
77
|
+
# through the `#headers` method using the same key.
|
55
78
|
#
|
56
79
|
# @param Mail mail Rails Mail object
|
57
80
|
#
|
@@ -59,7 +82,37 @@ module Resend
|
|
59
82
|
#
|
60
83
|
def get_headers(mail)
|
61
84
|
params = {}
|
62
|
-
|
85
|
+
|
86
|
+
if mail[:headers].present? || unignored_headers(mail).present?
|
87
|
+
params[:headers] = {}
|
88
|
+
params[:headers].merge!(headers_values(mail)) if unignored_headers(mail).present?
|
89
|
+
params[:headers].merge!(mail_headers_values(mail)) if mail[:headers].present?
|
90
|
+
end
|
91
|
+
|
92
|
+
params
|
93
|
+
end
|
94
|
+
|
95
|
+
# Gets the values of the headers that are set through the `#mail` method
|
96
|
+
#
|
97
|
+
# @param Mail mail Rails Mail object
|
98
|
+
# @return Hash hash with mail headers values
|
99
|
+
def mail_headers_values(mail)
|
100
|
+
params = {}
|
101
|
+
mail[:headers].unparsed_value.each do |k, v|
|
102
|
+
params[k.to_s] = v
|
103
|
+
end
|
104
|
+
params
|
105
|
+
end
|
106
|
+
|
107
|
+
# Gets the values of the headers that are set through the `#headers` method
|
108
|
+
#
|
109
|
+
# @param Mail mail Rails Mail object
|
110
|
+
# @return Hash hash with headers values
|
111
|
+
def headers_values(mail)
|
112
|
+
params = {}
|
113
|
+
unignored_headers(mail).each do |h|
|
114
|
+
params[h.name.to_s] = h.unparsed_value
|
115
|
+
end
|
63
116
|
params
|
64
117
|
end
|
65
118
|
|
@@ -144,5 +197,16 @@ module Resend
|
|
144
197
|
end
|
145
198
|
attachments
|
146
199
|
end
|
200
|
+
|
201
|
+
#
|
202
|
+
# Get all headers that are not ignored
|
203
|
+
#
|
204
|
+
# @param Mail mail
|
205
|
+
#
|
206
|
+
# @return Array headers
|
207
|
+
#
|
208
|
+
def unignored_headers(mail)
|
209
|
+
@unignored_headers ||= mail.header_fields.reject { |h| IGNORED_HEADERS.include?(h.name.downcase) }
|
210
|
+
end
|
147
211
|
end
|
148
212
|
end
|
data/lib/resend/request.rb
CHANGED
@@ -13,7 +13,9 @@ module Resend
|
|
13
13
|
attr_accessor :body, :verb
|
14
14
|
|
15
15
|
def initialize(path = "", body = {}, verb = "POST")
|
16
|
-
raise if Resend.api_key.nil?
|
16
|
+
raise if (api_key = Resend.api_key).nil?
|
17
|
+
|
18
|
+
api_key = api_key.call if api_key.is_a?(Proc)
|
17
19
|
|
18
20
|
@path = path
|
19
21
|
@body = body
|
@@ -22,7 +24,7 @@ module Resend
|
|
22
24
|
"Content-Type" => "application/json",
|
23
25
|
"Accept" => "application/json",
|
24
26
|
"User-Agent" => "resend-ruby:#{Resend::VERSION}",
|
25
|
-
"Authorization" => "Bearer #{
|
27
|
+
"Authorization" => "Bearer #{api_key}"
|
26
28
|
}
|
27
29
|
end
|
28
30
|
|
data/lib/resend/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: resend
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Derich Pacheco
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-12-
|
11
|
+
date: 2024-12-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -49,6 +49,7 @@ files:
|
|
49
49
|
- lib/resend/api_keys.rb
|
50
50
|
- lib/resend/audiences.rb
|
51
51
|
- lib/resend/batch.rb
|
52
|
+
- lib/resend/broadcasts.rb
|
52
53
|
- lib/resend/client.rb
|
53
54
|
- lib/resend/contacts.rb
|
54
55
|
- lib/resend/domains.rb
|