heya 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +117 -9
- data/lib/generators/heya/campaign/USAGE +1 -1
- data/lib/generators/heya/campaign/campaign_generator.rb +17 -1
- data/lib/generators/heya/campaign/templates/campaign.rb.tt +4 -7
- data/lib/generators/heya/campaign/templates/preview.rb.tt +12 -0
- data/lib/generators/heya/install/install_generator.rb +4 -0
- data/lib/generators/heya/{campaign → install}/templates/application_campaign.rb.tt +0 -0
- data/lib/heya/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 91788b17940c18fd1196e0cc20f2892fb91233c714a5dc7c876833459ae867d3
|
4
|
+
data.tar.gz: 6f8694d2562802ff9102fd62e04349beaf464dee5043fd928e0403fd4deb6bab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7315798099a708fa8bc0477e229672377634a29a97097139c2055ef09edd748edaf4a40a8685cfa015b87e766463ade73c3e10ea71ee41893184bea0ab7867ec
|
7
|
+
data.tar.gz: 3a437c995a6aaed616b75cce220c80bf28baf7d64364ac1956d11ce1e38c8bbf40d9a71bed97258e84d19d410970ae7ed48d07a6aaed92b92ebc3610ef9b654f
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -27,11 +27,12 @@ Getting started with Heya is easy:
|
|
27
27
|
rails db:migrate
|
28
28
|
```
|
29
29
|
|
30
|
-
This will
|
30
|
+
This will:
|
31
31
|
|
32
32
|
1. Copy Heya's migration files to *db/migrate*
|
33
|
-
|
34
|
-
|
33
|
+
1. Copy Heya's default initializer to *config/initializers/heya.rb*
|
34
|
+
1. Create the file *app/campaigns/application_campaign.rb*
|
35
|
+
1. Run local migrations
|
35
36
|
|
36
37
|
<details><summary>Note: Heya doesn't store a copy of your user data; instead, it reads from your existing <code>User</code> model (it never writes). If you have a different user model, change the <code>user_type</code> configuration option in <em>config/initializers/heya.rb</em>.</summary>
|
37
38
|
|
@@ -47,7 +48,7 @@ end
|
|
47
48
|
1. Create a campaign:
|
48
49
|
|
49
50
|
```bash
|
50
|
-
rails generate heya:campaign Onboarding welcome
|
51
|
+
rails generate heya:campaign Onboarding welcome:0
|
51
52
|
```
|
52
53
|
|
53
54
|
2. Add a user to your campaign:
|
@@ -55,14 +56,99 @@ end
|
|
55
56
|
```ruby
|
56
57
|
OnboardingCampaign.add(user)
|
57
58
|
```
|
59
|
+
|
60
|
+
Add the following to your `User` model to send them the campaign
|
61
|
+
when they first signup:
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
after_create_commit do
|
65
|
+
OnboardingCampaign.add(self)
|
66
|
+
end
|
67
|
+
```
|
58
68
|
|
59
69
|
### Running the scheduler
|
60
|
-
To start
|
70
|
+
To start queuing emails, run the scheduler task periodically:
|
61
71
|
|
62
72
|
```bash
|
63
73
|
rails heya:scheduler
|
64
74
|
```
|
65
75
|
|
76
|
+
Heya uses ActiveJob to send emails in the background. Make sure your
|
77
|
+
ActiveJob backend is configured to process the `heya` queue. For example,
|
78
|
+
here's how you might start Sidekiq:
|
79
|
+
|
80
|
+
```sh
|
81
|
+
bundle exec sidekiq -q default -q heya
|
82
|
+
```
|
83
|
+
|
84
|
+
You can change Heya's default queue using the `queue` option:
|
85
|
+
|
86
|
+
```ruby
|
87
|
+
# app/campaigns/application_campaign.rb
|
88
|
+
class ApplicationCampaign < Heya::Campaigns::Base
|
89
|
+
default queue: "custom"
|
90
|
+
end
|
91
|
+
```
|
92
|
+
|
93
|
+
### Bonus: tips for working with email in Rails
|
94
|
+
|
95
|
+
<details><summary>Use <a href="http://mailcatcher.me">MailCatcher</a> to see emails sent from your dev environment</summary>
|
96
|
+
|
97
|
+
```ruby
|
98
|
+
# config/environments/development.rb
|
99
|
+
Rails.application.configure do
|
100
|
+
# ..
|
101
|
+
|
102
|
+
# Use MailCatcher to inspect emails
|
103
|
+
# http://mailcatcher.me
|
104
|
+
# Usage:
|
105
|
+
# gem install mailcatcher
|
106
|
+
# mailcatcher
|
107
|
+
# # => Starting MailCatcher
|
108
|
+
# # => ==> smtp://127.0.0.1:1025
|
109
|
+
# # => ==> http://127.0.0.1:1080
|
110
|
+
config.action_mailer.delivery_method = :smtp
|
111
|
+
config.action_mailer.smtp_settings = {host: "localhost", port: 1025}
|
112
|
+
end
|
113
|
+
```
|
114
|
+
</details>
|
115
|
+
<details><summary>Use <a href="https://github.com/codetriage/maildown">Maildown</a> to write your emails in Markdown</summary>
|
116
|
+
|
117
|
+
```sh
|
118
|
+
$ bundle add maildown
|
119
|
+
$ rails generate heya:campaign Onboarding welcome
|
120
|
+
create app/campaigns/application_campaign.rb
|
121
|
+
create app/campaigns/onboarding_campaign.rb
|
122
|
+
create app/views/heya/campaign_mailer/onboarding_campaign/welcome.md.erb
|
123
|
+
```
|
124
|
+
|
125
|
+
☝️ Notice how only one template was generated; Maildown automatically builds
|
126
|
+
the HTML and text variants from the markdown file.
|
127
|
+
</details>
|
128
|
+
<details><summary>Use <a href="https://guides.rubyonrails.org/action_mailer_basics.html#previewing-emails">ActionMailer::Preview</a> to preview emails as you write them</summary>
|
129
|
+
|
130
|
+
Heya's campaign generator generates previews for campaigns at
|
131
|
+
`(test|spec)/mailers/previews/*_campaign_preview.rb`. To see them, open
|
132
|
+
http://localhost:3000/rails/mailers/. If you didn't use the generator, you
|
133
|
+
can still build your own preview:
|
134
|
+
|
135
|
+
```ruby
|
136
|
+
# test/mailers/previews/onboarding_campaign_preview.rb
|
137
|
+
class OnboardingCampaignPreview < ActionMailer::Preview
|
138
|
+
def welcome
|
139
|
+
OnboardingCampaign.welcome(user)
|
140
|
+
end
|
141
|
+
|
142
|
+
private
|
143
|
+
|
144
|
+
def user
|
145
|
+
User.where(id: params[:user_id]).first || User.first
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
```
|
150
|
+
</details>
|
151
|
+
|
66
152
|
## Configuration
|
67
153
|
|
68
154
|
You can use the following options to configure Heya (find this file in
|
@@ -96,11 +182,12 @@ Heya stores campaigns in *app/campaigns/*, similar to how Rails stores mailers i
|
|
96
182
|
rails generate heya:campaign Onboarding first second third
|
97
183
|
```
|
98
184
|
|
99
|
-
This will
|
185
|
+
This will:
|
100
186
|
|
101
|
-
|
102
|
-
|
103
|
-
|
187
|
+
1. Create the file *app/campaigns/onboarding_campaign.rb*
|
188
|
+
1. Create the directory *app/views/heya/campaign_mailer/onboarding_campaign/*
|
189
|
+
1. Create email templates inside of *app/views/heya/campaign_mailer/onboarding_campaign/*
|
190
|
+
1. Create an ActionMailer preview at *(test|spec)/mailers/previews/onboarding_campaign_preview.rb*
|
104
191
|
|
105
192
|
Here's the campaign that the above command generates:
|
106
193
|
|
@@ -316,6 +403,27 @@ class ApplicationCampaign < Heya::Campaigns::Base
|
|
316
403
|
end
|
317
404
|
```
|
318
405
|
|
406
|
+
### Handling exceptions
|
407
|
+
|
408
|
+
Heya campaigns are [rescuable](https://api.rubyonrails.org/classes/ActiveSupport/Rescuable/ClassMethods.html).
|
409
|
+
Use the `rescue_from` method to handle exceptions in campaigns:
|
410
|
+
|
411
|
+
```ruby
|
412
|
+
class OnboardingCampaign < ApplicationCampaign
|
413
|
+
rescue_from Postmark::InactiveRecipientError, with: :log_error
|
414
|
+
|
415
|
+
private
|
416
|
+
|
417
|
+
def log_error(error)
|
418
|
+
Rails.logger.error("Got Heya error: #{error}")
|
419
|
+
end
|
420
|
+
end
|
421
|
+
```
|
422
|
+
|
423
|
+
See the
|
424
|
+
[Rails documentation](https://api.rubyonrails.org/classes/ActiveSupport/Rescuable/ClassMethods.html#method-i-rescue_from)
|
425
|
+
for additional details.
|
426
|
+
|
319
427
|
### Campaigns FAQ
|
320
428
|
**What happens when:**
|
321
429
|
<details><summary>I reorder messages in an active campaign?</summary>
|
@@ -6,7 +6,10 @@ class Heya::CampaignGenerator < Rails::Generators::NamedBase
|
|
6
6
|
argument :steps, type: :array, default: []
|
7
7
|
|
8
8
|
def copy_campaign_template
|
9
|
-
|
9
|
+
application_campaign = "app/campaigns/application_campaign.rb"
|
10
|
+
unless File.exist?(application_campaign)
|
11
|
+
template File.expand_path("../install/templates/application_campaign.rb", __dir__), application_campaign
|
12
|
+
end
|
10
13
|
template "campaign.rb", "app/campaigns/#{file_name.underscore}_campaign.rb"
|
11
14
|
end
|
12
15
|
|
@@ -35,11 +38,18 @@ class Heya::CampaignGenerator < Rails::Generators::NamedBase
|
|
35
38
|
end
|
36
39
|
|
37
40
|
steps.each do |step|
|
41
|
+
step, _wait = step.split(":")
|
38
42
|
@step = step
|
39
43
|
template_method.call(step)
|
40
44
|
end
|
41
45
|
end
|
42
46
|
|
47
|
+
def copy_test_templates
|
48
|
+
if preview_path
|
49
|
+
template "preview.rb", preview_path.join("#{file_name.underscore}_campaign_preview.rb")
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
43
53
|
private
|
44
54
|
|
45
55
|
def action_mailer_template(step)
|
@@ -50,4 +60,10 @@ class Heya::CampaignGenerator < Rails::Generators::NamedBase
|
|
50
60
|
def maildown_template(step)
|
51
61
|
template "message.md.erb", "app/views/heya/campaign_mailer/#{file_name.underscore}_campaign/#{step.underscore.to_sym}.md.erb"
|
52
62
|
end
|
63
|
+
|
64
|
+
def preview_path
|
65
|
+
@preview_path ||= if ActionMailer::Base.preview_path.present?
|
66
|
+
Pathname(ActionMailer::Base.preview_path).sub(Rails.root.to_s, ".")
|
67
|
+
end
|
68
|
+
end
|
53
69
|
end
|
@@ -1,7 +1,4 @@
|
|
1
|
-
class <%= file_name.camelcase %>Campaign < ApplicationCampaign
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
<% end -%>
|
7
|
-
end
|
1
|
+
class <%= file_name.camelcase %>Campaign < ApplicationCampaign<% steps.each do |step| %><% step, wait = step.split(":") %>
|
2
|
+
step :<%= step.underscore.to_sym %>,<%= wait.presence ? "\n wait: #{wait}," : "" %>
|
3
|
+
subject: "<%= step.humanize %>"
|
4
|
+
<% end %>end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# Preview all emails at http://localhost:3000/rails/mailers/
|
2
|
+
class <%= file_name.camelcase %>CampaignPreview < ActionMailer::Preview<% steps.each do |step| %><% step, wait = step.split(":") %>
|
3
|
+
def <%= step %>
|
4
|
+
<%= file_name.camelcase %>Campaign.<%= step %>(user)
|
5
|
+
end
|
6
|
+
<% end %>
|
7
|
+
private
|
8
|
+
|
9
|
+
def user
|
10
|
+
<%= Heya.config.user_type %>.where(id: params[:user_id]).first || <%= Heya.config.user_type %>.first || <%= Heya.config.user_type %>.new(email: "user@example.com").freeze
|
11
|
+
end
|
12
|
+
end
|
@@ -13,6 +13,10 @@ class Heya::InstallGenerator < Rails::Generators::Base
|
|
13
13
|
copy_file "initializer.rb", "config/initializers/heya.rb"
|
14
14
|
end
|
15
15
|
|
16
|
+
def copy_application_campaign_template
|
17
|
+
template "application_campaign.rb", "app/campaigns/application_campaign.rb"
|
18
|
+
end
|
19
|
+
|
16
20
|
def self.next_migration_number(dirname)
|
17
21
|
next_migration_number = current_migration_number(dirname) + 1
|
18
22
|
ActiveRecord::Migration.next_migration_number(next_migration_number)
|
File without changes
|
data/lib/heya/version.rb
CHANGED
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.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joshua Wood
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-04-
|
11
|
+
date: 2020-04-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -88,13 +88,14 @@ files:
|
|
88
88
|
- config/routes.rb
|
89
89
|
- lib/generators/heya/campaign/USAGE
|
90
90
|
- lib/generators/heya/campaign/campaign_generator.rb
|
91
|
-
- lib/generators/heya/campaign/templates/application_campaign.rb.tt
|
92
91
|
- lib/generators/heya/campaign/templates/campaign.rb.tt
|
93
92
|
- lib/generators/heya/campaign/templates/message.html.erb.tt
|
94
93
|
- lib/generators/heya/campaign/templates/message.md.erb.tt
|
95
94
|
- lib/generators/heya/campaign/templates/message.text.erb.tt
|
95
|
+
- lib/generators/heya/campaign/templates/preview.rb.tt
|
96
96
|
- lib/generators/heya/install/USAGE
|
97
97
|
- lib/generators/heya/install/install_generator.rb
|
98
|
+
- lib/generators/heya/install/templates/application_campaign.rb.tt
|
98
99
|
- lib/generators/heya/install/templates/initializer.rb.tt
|
99
100
|
- lib/generators/heya/install/templates/migration.rb.tt
|
100
101
|
- lib/heya.rb
|