heya 0.5.2 → 0.7.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: 586da260567f71076b1e9820815e2508a74ac42104a1b099296f05c2a07cdb1a
4
- data.tar.gz: 354d3c9c0e7254063088b32edc0b5b4f877457121bf8f681b3e8c0fb1fbf91ee
3
+ metadata.gz: 897c67c77ab4b26f47d21ddde192e5957239cdb319c662fd72dd806de3c552d2
4
+ data.tar.gz: e34438a886e4c1598b0bca34bab406b84b83561310857f2c8730c669961e5a9a
5
5
  SHA512:
6
- metadata.gz: 386d12c2aca08df55c2ca1e65f9691e120e3fa187ce3d5ba2e1168ddad3f2442b74e96763a430750a0f9c06270dac8a19bcf0413de5d2ae5833b7dd722632251
7
- data.tar.gz: e5286d6b20aab8f58a74eb6592ca4f99efbd0f8bdf8c17bd957f7f3fd33bc02d2023eeae4b37847614794ac91a29a8bbe972d7a38452da5834a474955cafc5d2
6
+ metadata.gz: 6efc0529915073f5e3e2abb9a878e1f2e290cf66b66913989555325ac29f508988378e48637efaa36a345f3bc6ebd6978c110879c52d1999cea7bb3ec35e67a4
7
+ data.tar.gz: 02e88ebd7dea87ba644b380be61ffc41788c24045f8e103df302e44b1a8f82a37850ed56beb12b763b183061abf2526a5cd2affb6a175e155f7096d22a8dde7d
data/CHANGELOG.md CHANGED
@@ -5,6 +5,27 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
7
  ## [Unreleased]
8
+
9
+ ## [0.7.0] - 2022-02-03
10
+ ### Fixed
11
+ - Automatically include Rails url helpers from application in campaign mailer templates (#158, @feliperaul)
12
+
13
+ ### Added
14
+ - Allow the customization of the to field (#155, @feliperaul)
15
+
16
+ ## [0.6.1] - 2022-01-05
17
+ ### Fixed
18
+ - Support Rails 7 (#151, @800a7b32)
19
+
20
+ ## [0.6.0] - 2021-11-02
21
+ ### Added
22
+ - Optional `layout` parameter for steps; allowing override from default `heya/campaign_mailer`
23
+
24
+ ## [0.5.3] - 2021-08-18
25
+ ### Added
26
+ - Create `bcc:` optional parameter for steps; use case is quality control
27
+
28
+ ## [0.5.2] - 2021-08-11
8
29
  ### Fixed
9
30
  - Fix typo in initializer (#139, @800a7b32)
10
31
 
data/README.md CHANGED
@@ -247,12 +247,54 @@ The `wait` option tells Heya how long to wait before sending each message (the d
247
247
  Heya uses the following additional options to build the message itself:
248
248
 
249
249
  | Option Name | Default | Description |
250
- | :---------- | :----------- | :------------------------- |
250
+ |-------------|--------------|----------------------------|
251
251
  | `subject` | **required** | The email's subject |
252
252
  | `from` | Heya default | The sender's email address |
253
+ | `layout` | Heya default | The email's layout file |
254
+ | `to` | See below | See below |
253
255
 
254
256
  You can change the default options using the `default` method at the top of the campaign. Heya applies default options to each step which doesn't supply its own:
255
257
 
258
+ ```ruby
259
+ class OnboardingCampaign < ApplicationCampaign
260
+ default wait: 1.day,
261
+ queue: "onboarding",
262
+ from: "support@example.com",
263
+ layout: "onboarding"
264
+
265
+ # Will still be sent after one day from the
266
+ # email address support@example.com
267
+ step :welcome,
268
+ subject: "Welcome to my app!"
269
+ end
270
+ ```
271
+
272
+ #### Customizing the `to` field
273
+
274
+ You can customize the `to` field by passing a callable object, which Heya will invoke with the user. For instance:
275
+
276
+ ```ruby
277
+ class OnboardingCampaign < ApplicationCampaign
278
+ step :welcome,
279
+ subject: "Welcome to my app!",
280
+ to: -> (user) { ActionMailer::Base.email_address_with_name(user.email, user.nickname) }
281
+ end
282
+ ```
283
+
284
+ It is recommended to rely on `ActionMailer::Base.email_address_with_name` so that sanitization is correctly applied.
285
+
286
+ If the `to` param is not provided, Heya will default to:
287
+
288
+ 1. `user#first_name`
289
+ 1. `user#name`
290
+
291
+ If the `user` object doesn't respond to these methods, it will fallback to a simple `user.email` in the `to` field.
292
+
293
+ #### Quality control option
294
+
295
+ You may wish to apply quality control to individual steps of a campaign. For example, when adding a new step to an existing campaign it is
296
+ a good idea to inspect real-time results in production. You can do this by using the `bcc:` step option, which would look like this:
297
+
256
298
  ```ruby
257
299
  class OnboardingCampaign < ApplicationCampaign
258
300
  default wait: 1.day,
@@ -263,6 +305,10 @@ class OnboardingCampaign < ApplicationCampaign
263
305
  # email address support@example.com
264
306
  step :welcome,
265
307
  subject: "Welcome to my app!"
308
+
309
+ step :added_two_months_later,
310
+ subject: "We now have something new to say!",
311
+ bcc: 'quality_control@example.com'
266
312
  end
267
313
  ```
268
314
 
@@ -1,6 +1,8 @@
1
1
  module Heya
2
2
  class CampaignMailer < ApplicationMailer
3
- layout "heya/campaign_mailer"
3
+ DEFAULT_LAYOUT = "heya/campaign_mailer"
4
+ layout -> { params.fetch(:step).params.fetch("layout", DEFAULT_LAYOUT) }
5
+ include Rails.application.routes.url_helpers
4
6
 
5
7
  def build
6
8
  user = params.fetch(:user)
@@ -10,6 +12,7 @@ module Heya
10
12
  step_name = step.name.underscore
11
13
 
12
14
  from = step.params.fetch("from")
15
+ bcc = step.params.fetch("bcc", nil)
13
16
  reply_to = step.params.fetch("reply_to", nil)
14
17
 
15
18
  subject = step.params.fetch("subject") {
@@ -22,8 +25,9 @@ module Heya
22
25
 
23
26
  mail(
24
27
  from: from,
28
+ bcc: bcc,
25
29
  reply_to: reply_to,
26
- to: user.email,
30
+ to: to_address(user, step),
27
31
  subject: subject,
28
32
  template_path: "heya/campaign_mailer/#{campaign_name}",
29
33
  template_name: step_name
@@ -49,5 +53,27 @@ module Heya
49
53
  end
50
54
  end
51
55
  end
56
+
57
+ def to_address(user, step)
58
+ return step.params["to"].call(user) if step.params["to"].respond_to?(:call)
59
+
60
+ if user.respond_to?(:first_name)
61
+ self.class.email_address_with_name(user.email, user.first_name)
62
+ elsif user.respond_to?(:name)
63
+ self.class.email_address_with_name(user.email, user.name)
64
+ else
65
+ user.email
66
+ end
67
+ end
68
+
69
+ # This method is a backport and can be removed when we drop support of
70
+ # Rails 6.0; As of Rails 6.1, ActionMailer::Base, which we inherit from,
71
+ # already includes it.
72
+ def self.email_address_with_name(address, name)
73
+ Mail::Address.new.tap do |builder|
74
+ builder.address = address
75
+ builder.display_name = name
76
+ end.to_s
77
+ end
52
78
  end
53
79
  end
@@ -4,7 +4,7 @@ module Heya
4
4
  module Campaigns
5
5
  module Actions
6
6
  class Email < Action
7
- VALID_PARAMS = %w[subject from reply_to]
7
+ VALID_PARAMS = %w[subject from reply_to bcc layout to]
8
8
 
9
9
  def self.validate_step(step)
10
10
  step.params.assert_valid_keys(VALID_PARAMS)
data/lib/heya/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Heya
4
- VERSION = "0.5.2"
4
+ VERSION = "0.7.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: heya
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Wood
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-11 00:00:00.000000000 Z
11
+ date: 2022-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: 5.2.3
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: 6.2.0
22
+ version: 7.1.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: 5.2.3
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: 6.2.0
32
+ version: 7.1.0
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: pg
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -131,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
131
131
  - !ruby/object:Gem::Version
132
132
  version: '0'
133
133
  requirements: []
134
- rubygems_version: 3.2.3
134
+ rubygems_version: 3.3.3
135
135
  signing_key:
136
136
  specification_version: 4
137
137
  summary: "Heya \U0001F44B"