ahoy_email 0.5.0 → 0.5.1
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 +5 -5
- data/.travis.yml +2 -1
- data/CHANGELOG.md +7 -0
- data/Gemfile +1 -1
- data/README.md +31 -25
- data/ahoy_email.gemspec +6 -4
- data/lib/ahoy_email.rb +9 -6
- data/lib/ahoy_email/engine.rb +8 -2
- data/lib/ahoy_email/processor.rb +1 -1
- data/lib/ahoy_email/version.rb +1 -1
- data/lib/generators/ahoy_email/templates/install.rb +1 -3
- data/test/gemfiles/actionmailer51.gemfile +6 -0
- data/test/test_helper.rb +5 -1
- metadata +54 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: bc1f584255e88dbcda182347224e0e30cbd43684cf5e9bf1ba71007cd8470d25
|
4
|
+
data.tar.gz: 7143c167fa888441510b1eaa67edd74c0285efa50a1a4e6fa5b0b4770b7afcb7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 648078aac8c79119c4caa1ecd42ff624d58e5b898cf6eb2231d14fc0aaece937a2a76020931fbc8c22f730dcdfa27068fc1fc62f9b80ea30ef766c69ea8ddffc
|
7
|
+
data.tar.gz: f529c4de18d3ffbd5b2ef4d4b2122409d521fca920d200eaad337c0bc984de31ef3b6d7c6c0642a7120446cf759055a9f84b0f9bdda44bdafb654708994cef4a
|
data/.travis.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 2.
|
3
|
+
- 2.4.2
|
4
4
|
sudo: false
|
5
5
|
script: bundle exec rake test
|
6
6
|
before_script:
|
@@ -11,5 +11,6 @@ notifications:
|
|
11
11
|
on_failure: change
|
12
12
|
gemfile:
|
13
13
|
- Gemfile
|
14
|
+
- test/gemfiles/actionmailer51.gemfile
|
14
15
|
- test/gemfiles/actionmailer50.gemfile
|
15
16
|
- test/gemfiles/actionmailer42.gemfile
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -5,8 +5,8 @@
|
|
5
5
|
You get:
|
6
6
|
|
7
7
|
- A history of emails sent to each user
|
8
|
-
- Open and click tracking
|
9
8
|
- Easy UTM tagging
|
9
|
+
- Open and click tracking
|
10
10
|
|
11
11
|
Works with any email service.
|
12
12
|
|
@@ -28,7 +28,7 @@ And run the generator. This creates a model to store messages.
|
|
28
28
|
|
29
29
|
```sh
|
30
30
|
rails generate ahoy_email:install
|
31
|
-
|
31
|
+
rails db:migrate
|
32
32
|
```
|
33
33
|
|
34
34
|
## How It Works
|
@@ -44,7 +44,7 @@ By default, Ahoy tries `User.where(email: message.to.first).first` to find the u
|
|
44
44
|
You can pass a specific user with:
|
45
45
|
|
46
46
|
```ruby
|
47
|
-
class UserMailer <
|
47
|
+
class UserMailer < ApplicationMailer
|
48
48
|
def welcome_email(user)
|
49
49
|
# ...
|
50
50
|
track user: user
|
@@ -58,8 +58,8 @@ The user association is [polymorphic](http://railscasts.com/episodes/154-polymor
|
|
58
58
|
To get all messages sent to a user, add an association:
|
59
59
|
|
60
60
|
```ruby
|
61
|
-
class User <
|
62
|
-
has_many :messages, class_name: "Ahoy::Message"
|
61
|
+
class User < ApplicationRecord
|
62
|
+
has_many :messages, class_name: "Ahoy::Message", as: :user
|
63
63
|
end
|
64
64
|
```
|
65
65
|
|
@@ -69,6 +69,23 @@ And run:
|
|
69
69
|
user.messages
|
70
70
|
```
|
71
71
|
|
72
|
+
### UTM Parameters
|
73
|
+
|
74
|
+
UTM parameters are added to links if they don’t already exist.
|
75
|
+
|
76
|
+
The defaults are:
|
77
|
+
|
78
|
+
- utm_medium - `email`
|
79
|
+
- utm_source - the mailer name like `user_mailer`
|
80
|
+
- utm_campaign - the mailer action like `welcome_email`
|
81
|
+
|
82
|
+
Use `track utm_params: false` to skip tagging, or skip specific links with:
|
83
|
+
|
84
|
+
|
85
|
+
```html
|
86
|
+
<a data-skip-utm-params="true" href="...">Break it down</a>
|
87
|
+
```
|
88
|
+
|
72
89
|
### Opens
|
73
90
|
|
74
91
|
An invisible pixel is added right before the `</body>` tag in HTML emails.
|
@@ -99,23 +116,6 @@ Use `track click: false` to skip tracking, or skip specific links with:
|
|
99
116
|
<a data-skip-click="true" href="...">Can't touch this</a>
|
100
117
|
```
|
101
118
|
|
102
|
-
### UTM Parameters
|
103
|
-
|
104
|
-
UTM parameters are added to links if they don’t already exist.
|
105
|
-
|
106
|
-
The defaults are:
|
107
|
-
|
108
|
-
- utm_medium - `email`
|
109
|
-
- utm_source - the mailer name like `user_mailer`
|
110
|
-
- utm_campaign - the mailer action like `welcome_email`
|
111
|
-
|
112
|
-
Use `track utm_params: false` to skip tagging, or skip specific links with:
|
113
|
-
|
114
|
-
|
115
|
-
```html
|
116
|
-
<a data-skip-utm-params="true" href="...">Break it down</a>
|
117
|
-
```
|
118
|
-
|
119
119
|
### Extra Attributes
|
120
120
|
|
121
121
|
Create a migration to add extra attributes to the `ahoy_messages` table, for example:
|
@@ -152,7 +152,7 @@ There are 3 places to set options. Here’s the order of precedence.
|
|
152
152
|
#### Action
|
153
153
|
|
154
154
|
``` ruby
|
155
|
-
class UserMailer <
|
155
|
+
class UserMailer < ApplicationMailer
|
156
156
|
def welcome_email(user)
|
157
157
|
# ...
|
158
158
|
track user: user
|
@@ -164,7 +164,7 @@ end
|
|
164
164
|
#### Mailer
|
165
165
|
|
166
166
|
```ruby
|
167
|
-
class UserMailer <
|
167
|
+
class UserMailer < ApplicationMailer
|
168
168
|
track utm_campaign: "boom"
|
169
169
|
end
|
170
170
|
```
|
@@ -214,7 +214,7 @@ AhoyEmail.subscribers << EmailSubscriber.new
|
|
214
214
|
You can use a `Proc` for any option.
|
215
215
|
|
216
216
|
```ruby
|
217
|
-
track utm_campaign:
|
217
|
+
track utm_campaign: ->(message, mailer) { mailer.action_name + Time.now.year }
|
218
218
|
```
|
219
219
|
|
220
220
|
Disable tracking for an email
|
@@ -242,6 +242,12 @@ Customize domain
|
|
242
242
|
track url_options: {host: "mydomain.com"}
|
243
243
|
```
|
244
244
|
|
245
|
+
By default, unsubscribe links are excluded from tracking. To change this, use:
|
246
|
+
|
247
|
+
```ruby
|
248
|
+
track unsubscribe_links: true
|
249
|
+
```
|
250
|
+
|
245
251
|
Use a different model
|
246
252
|
|
247
253
|
```ruby
|
data/ahoy_email.gemspec
CHANGED
@@ -9,7 +9,6 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Andrew Kane"]
|
10
10
|
spec.email = ["andrew@chartkick.com"]
|
11
11
|
spec.summary = "Simple, powerful email tracking for Rails"
|
12
|
-
spec.description = "Simple, powerful email tracking for Rails"
|
13
12
|
spec.homepage = "https://github.com/ankane/ahoy_email"
|
14
13
|
spec.license = "MIT"
|
15
14
|
|
@@ -20,14 +19,17 @@ Gem::Specification.new do |spec|
|
|
20
19
|
|
21
20
|
spec.required_ruby_version = ">= 2.0.0"
|
22
21
|
|
23
|
-
spec.add_runtime_dependency "
|
24
|
-
spec.add_runtime_dependency "
|
22
|
+
spec.add_runtime_dependency "railties"
|
23
|
+
spec.add_runtime_dependency "actionmailer"
|
24
|
+
spec.add_runtime_dependency "activerecord"
|
25
|
+
spec.add_runtime_dependency "addressable", ">= 2.3.2"
|
25
26
|
spec.add_runtime_dependency "nokogiri"
|
26
27
|
spec.add_runtime_dependency "safely_block", ">= 0.1.1"
|
27
28
|
|
28
|
-
spec.add_development_dependency "bundler"
|
29
|
+
spec.add_development_dependency "bundler"
|
29
30
|
spec.add_development_dependency "rake"
|
30
31
|
spec.add_development_dependency "minitest"
|
31
32
|
spec.add_development_dependency "combustion"
|
33
|
+
spec.add_development_dependency "rails"
|
32
34
|
spec.add_development_dependency "sqlite3"
|
33
35
|
end
|
data/lib/ahoy_email.rb
CHANGED
@@ -1,6 +1,4 @@
|
|
1
|
-
require "
|
2
|
-
require "action_mailer"
|
3
|
-
require "rails"
|
1
|
+
require "active_support"
|
4
2
|
require "nokogiri"
|
5
3
|
require "addressable/uri"
|
6
4
|
require "openssl"
|
@@ -9,6 +7,7 @@ require "ahoy_email/processor"
|
|
9
7
|
require "ahoy_email/interceptor"
|
10
8
|
require "ahoy_email/mailer"
|
11
9
|
require "ahoy_email/engine"
|
10
|
+
require "ahoy_email/version"
|
12
11
|
|
13
12
|
module AhoyEmail
|
14
13
|
mattr_accessor :secret_token, :options, :subscribers, :belongs_to, :invalid_redirect_url
|
@@ -41,9 +40,13 @@ module AhoyEmail
|
|
41
40
|
end
|
42
41
|
|
43
42
|
def self.message_model
|
44
|
-
(defined?(@message_model) && @message_model) || ::Ahoy::Message
|
43
|
+
model = (defined?(@message_model) && @message_model) || ::Ahoy::Message
|
44
|
+
model = model.call if model.respond_to?(:call)
|
45
|
+
model
|
45
46
|
end
|
46
47
|
end
|
47
48
|
|
48
|
-
|
49
|
-
|
49
|
+
ActiveSupport.on_load(:action_mailer) do
|
50
|
+
include AhoyEmail::Mailer
|
51
|
+
register_interceptor AhoyEmail::Interceptor
|
52
|
+
end
|
data/lib/ahoy_email/engine.rb
CHANGED
@@ -1,8 +1,14 @@
|
|
1
|
+
require "rails/engine"
|
2
|
+
|
1
3
|
module AhoyEmail
|
2
4
|
class Engine < ::Rails::Engine
|
3
5
|
initializer "ahoy_email" do |app|
|
4
|
-
|
5
|
-
|
6
|
+
# default to secrets to keep backward compatible
|
7
|
+
ActiveSupport::Deprecation.silence do
|
8
|
+
secrets = app.respond_to?(:secrets) ? app.secrets : app.config
|
9
|
+
AhoyEmail.secret_token ||= secrets.respond_to?(:secret_key_base) ? secrets.secret_key_base : secrets.secret_token
|
10
|
+
end
|
11
|
+
|
6
12
|
AhoyEmail.belongs_to = {optional: true} if Rails::VERSION::MAJOR >= 5
|
7
13
|
end
|
8
14
|
end
|
data/lib/ahoy_email/processor.rb
CHANGED
@@ -140,7 +140,7 @@ module AhoyEmail
|
|
140
140
|
# remove it
|
141
141
|
link.remove_attribute(attribute)
|
142
142
|
true
|
143
|
-
elsif link["href"].to_s =~ /unsubscribe/i
|
143
|
+
elsif link["href"].to_s =~ /unsubscribe/i && !options[:unsubscribe_links]
|
144
144
|
# try to avoid unsubscribe links
|
145
145
|
true
|
146
146
|
else
|
data/lib/ahoy_email/version.rb
CHANGED
@@ -5,8 +5,7 @@ class <%= migration_class_name %> < ActiveRecord::Migration<%= migration_version
|
|
5
5
|
|
6
6
|
# user
|
7
7
|
t.text :to
|
8
|
-
t.
|
9
|
-
t.string :user_type
|
8
|
+
t.references :user, polymorphic: true
|
10
9
|
|
11
10
|
# optional - feel free to remove
|
12
11
|
t.string :mailer
|
@@ -27,6 +26,5 @@ class <%= migration_class_name %> < ActiveRecord::Migration<%= migration_version
|
|
27
26
|
end
|
28
27
|
|
29
28
|
add_index :ahoy_messages, [:token]
|
30
|
-
add_index :ahoy_messages, [:user_id, :user_type]
|
31
29
|
end
|
32
30
|
end
|
data/test/test_helper.rb
CHANGED
@@ -7,7 +7,11 @@ require "combustion"
|
|
7
7
|
Minitest::Test = Minitest::Unit::TestCase unless defined?(Minitest::Test)
|
8
8
|
|
9
9
|
Combustion.path = "test/internal"
|
10
|
-
Combustion.initialize! :all
|
10
|
+
Combustion.initialize! :all do
|
11
|
+
if config.active_record.sqlite3.respond_to?(:represent_boolean_as_integer)
|
12
|
+
config.active_record.sqlite3.represent_boolean_as_integer = true
|
13
|
+
end
|
14
|
+
end
|
11
15
|
|
12
16
|
ActionMailer::Base.delivery_method = :test
|
13
17
|
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ahoy_email
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Kane
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: railties
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: actionmailer
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
@@ -38,6 +38,34 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: activerecord
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: addressable
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 2.3.2
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 2.3.2
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
70
|
name: nokogiri
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,16 +98,16 @@ dependencies:
|
|
70
98
|
name: bundler
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
72
100
|
requirements:
|
73
|
-
- - "
|
101
|
+
- - ">="
|
74
102
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
103
|
+
version: '0'
|
76
104
|
type: :development
|
77
105
|
prerelease: false
|
78
106
|
version_requirements: !ruby/object:Gem::Requirement
|
79
107
|
requirements:
|
80
|
-
- - "
|
108
|
+
- - ">="
|
81
109
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
110
|
+
version: '0'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: rake
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,6 +150,20 @@ dependencies:
|
|
122
150
|
- - ">="
|
123
151
|
- !ruby/object:Gem::Version
|
124
152
|
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: rails
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
125
167
|
- !ruby/object:Gem::Dependency
|
126
168
|
name: sqlite3
|
127
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,7 +178,7 @@ dependencies:
|
|
136
178
|
- - ">="
|
137
179
|
- !ruby/object:Gem::Version
|
138
180
|
version: '0'
|
139
|
-
description:
|
181
|
+
description:
|
140
182
|
email:
|
141
183
|
- andrew@chartkick.com
|
142
184
|
executables: []
|
@@ -164,6 +206,7 @@ files:
|
|
164
206
|
- lib/generators/ahoy_email/templates/install.rb
|
165
207
|
- test/gemfiles/actionmailer42.gemfile
|
166
208
|
- test/gemfiles/actionmailer50.gemfile
|
209
|
+
- test/gemfiles/actionmailer51.gemfile
|
167
210
|
- test/internal/config/database.yml
|
168
211
|
- test/internal/config/routes.rb
|
169
212
|
- test/internal/db/schema.rb
|
@@ -189,13 +232,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
189
232
|
version: '0'
|
190
233
|
requirements: []
|
191
234
|
rubyforge_project:
|
192
|
-
rubygems_version: 2.
|
235
|
+
rubygems_version: 2.7.6
|
193
236
|
signing_key:
|
194
237
|
specification_version: 4
|
195
238
|
summary: Simple, powerful email tracking for Rails
|
196
239
|
test_files:
|
197
240
|
- test/gemfiles/actionmailer42.gemfile
|
198
241
|
- test/gemfiles/actionmailer50.gemfile
|
242
|
+
- test/gemfiles/actionmailer51.gemfile
|
199
243
|
- test/internal/config/database.yml
|
200
244
|
- test/internal/config/routes.rb
|
201
245
|
- test/internal/db/schema.rb
|