activity_notification 1.0.2 → 1.1.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/.codeclimate.yml +33 -0
- data/.rubocop.yml +1157 -0
- data/.yardopts +3 -0
- data/CHANGELOG.md +25 -0
- data/Gemfile.lock +15 -17
- data/README.md +154 -27
- data/activity_notification.gemspec +1 -1
- data/app/controllers/activity_notification/notifications_controller.rb +30 -104
- data/app/controllers/activity_notification/notifications_with_devise_controller.rb +1 -33
- data/app/controllers/activity_notification/subscriptions_controller.rb +184 -0
- data/app/controllers/activity_notification/subscriptions_with_devise_controller.rb +6 -0
- data/app/mailers/activity_notification/mailer.rb +3 -3
- data/app/views/activity_notification/notifications/default/_index.html.erb +3 -0
- data/app/views/activity_notification/notifications/default/index.html.erb +8 -10
- data/app/views/activity_notification/notifications/default/show.html.erb +24 -2
- data/app/views/activity_notification/subscriptions/default/_form.html.erb +52 -0
- data/app/views/activity_notification/subscriptions/default/_notification_keys.html.erb +89 -0
- data/app/views/activity_notification/subscriptions/default/_subscription.html.erb +73 -0
- data/app/views/activity_notification/subscriptions/default/_subscriptions.html.erb +13 -0
- data/app/views/activity_notification/subscriptions/default/create.js.erb +5 -0
- data/app/views/activity_notification/subscriptions/default/destroy.js.erb +5 -0
- data/app/views/activity_notification/subscriptions/default/index.html.erb +197 -0
- data/app/views/activity_notification/subscriptions/default/show.html.erb +177 -0
- data/app/views/activity_notification/subscriptions/default/subscribe.js.erb +8 -0
- data/app/views/activity_notification/subscriptions/default/subscribe_to_email.js.erb +6 -0
- data/app/views/activity_notification/subscriptions/default/unsubscribe.js.erb +8 -0
- data/app/views/activity_notification/subscriptions/default/unsubscribe_to_email.js.erb +6 -0
- data/gemfiles/Gemfile.rails-4.2.lock +18 -20
- data/gemfiles/Gemfile.rails-5.0.lock +18 -20
- data/lib/activity_notification.rb +7 -3
- data/lib/activity_notification/apis/notification_api.rb +95 -61
- data/lib/activity_notification/apis/subscription_api.rb +51 -0
- data/lib/activity_notification/common.rb +1 -1
- data/lib/activity_notification/config.rb +65 -17
- data/lib/activity_notification/controllers/common_controller.rb +118 -0
- data/lib/activity_notification/controllers/devise_authentication_controller.rb +41 -0
- data/lib/activity_notification/helpers/view_helpers.rb +131 -3
- data/lib/activity_notification/mailers/helpers.rb +6 -8
- data/lib/activity_notification/models/concerns/notifiable.rb +45 -27
- data/lib/activity_notification/models/concerns/subscriber.rb +149 -0
- data/lib/activity_notification/models/concerns/target.rb +100 -66
- data/lib/activity_notification/models/notification.rb +7 -5
- data/lib/activity_notification/models/subscription.rb +93 -0
- data/lib/activity_notification/rails/routes.rb +148 -33
- data/lib/activity_notification/renderable.rb +3 -4
- data/lib/activity_notification/roles/acts_as_notifiable.rb +14 -1
- data/lib/activity_notification/roles/acts_as_target.rb +11 -8
- data/lib/activity_notification/version.rb +1 -1
- data/lib/generators/activity_notification/controllers_generator.rb +2 -2
- data/lib/generators/activity_notification/install_generator.rb +0 -1
- data/lib/generators/activity_notification/migration/migration_generator.rb +8 -2
- data/lib/generators/activity_notification/models_generator.rb +53 -0
- data/lib/generators/activity_notification/views_generator.rb +7 -7
- data/lib/generators/templates/activity_notification.rb +17 -3
- data/lib/generators/templates/controllers/notifications_controller.rb +18 -17
- data/lib/generators/templates/controllers/notifications_with_devise_controller.rb +18 -17
- data/lib/generators/templates/controllers/subscriptions_controller.rb +79 -0
- data/lib/generators/templates/controllers/subscriptions_with_devise_controller.rb +87 -0
- data/lib/generators/templates/migrations/migration.rb +57 -0
- data/lib/generators/templates/models/README +10 -0
- data/lib/generators/templates/{notification → models}/notification.rb +1 -3
- data/lib/generators/templates/models/subscription.rb +4 -0
- data/spec/concerns/apis/notification_api_spec.rb +48 -11
- data/spec/concerns/apis/subscription_api_spec.rb +167 -0
- data/spec/concerns/models/notifiable_spec.rb +60 -0
- data/spec/concerns/models/subscriber_spec.rb +525 -0
- data/spec/concerns/models/target_spec.rb +271 -42
- data/spec/controllers/common_controller_spec.rb +25 -0
- data/spec/controllers/dummy_common_controller.rb +5 -0
- data/spec/controllers/notifications_controller_shared_examples.rb +2 -6
- data/spec/controllers/subscriptions_controller_shared_examples.rb +735 -0
- data/spec/controllers/subscriptions_controller_spec.rb +12 -0
- data/spec/controllers/subscriptions_with_devise_controller_spec.rb +91 -0
- data/spec/factories/dummy/dummy_subscriber.rb +4 -0
- data/spec/factories/subscriptions.rb +8 -0
- data/spec/generators/controllers_generator_spec.rb +25 -2
- data/spec/generators/migration/migration_generator_spec.rb +3 -3
- data/spec/generators/models_generator_spec.rb +96 -0
- data/spec/generators/views_generator_spec.rb +84 -0
- data/spec/helpers/view_helpers_spec.rb +143 -0
- data/spec/mailers/mailer_spec.rb +5 -4
- data/spec/models/dummy/dummy_subscriber_spec.rb +5 -0
- data/spec/models/notification_spec.rb +7 -7
- data/spec/models/subscription_spec.rb +158 -0
- data/spec/rails_app/app/controllers/users/notifications_controller.rb +67 -0
- data/spec/rails_app/app/controllers/users/notifications_with_devise_controller.rb +75 -0
- data/spec/rails_app/app/controllers/users/subscriptions_controller.rb +79 -0
- data/spec/rails_app/app/controllers/users/subscriptions_with_devise_controller.rb +87 -0
- data/spec/rails_app/app/models/admin.rb +1 -0
- data/spec/rails_app/app/models/dummy/dummy_subscriber.rb +4 -0
- data/spec/rails_app/app/models/user.rb +2 -1
- data/spec/rails_app/app/views/activity_notification/mailer/dummy_subscribers/test_key.text.erb +1 -0
- data/spec/rails_app/app/views/articles/index.html.erb +6 -0
- data/spec/rails_app/config/initializers/activity_notification.rb +17 -3
- data/spec/rails_app/config/routes.rb +2 -2
- data/spec/rails_app/db/migrate/20160715050420_create_activity_notification_tables.rb +33 -0
- data/spec/rails_app/db/schema.rb +18 -0
- data/spec/roles/acts_as_notifiable_spec.rb +1 -1
- data/spec/roles/acts_as_target_spec.rb +1 -1
- metadata +70 -11
- data/lib/generators/activity_notification/notification/notification_generator.rb +0 -20
- data/lib/generators/templates/active_record/migration.rb +0 -18
- data/spec/generators/notification/notification_generator_spec.rb +0 -41
- data/spec/rails_app/db/migrate/20160715050420_create_notifications.rb +0 -18
data/.yardopts
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,23 @@
|
|
1
|
+
## 1.1.0 / 2016-12-18
|
2
|
+
[Full Changelog](http://github.com/simukappu/activity_notification/compare/v1.0.2...v1.1.0)
|
3
|
+
|
4
|
+
Enhancements:
|
5
|
+
|
6
|
+
* Add subscription management framework
|
7
|
+
* Subscription management model and API
|
8
|
+
* Default subscription management controllers, routing and views
|
9
|
+
* Add Subscriber role configuration to Target role
|
10
|
+
* Add as_latest_group_member option to batch mailer API
|
11
|
+
* Add group_expiry_delay option to notification API
|
12
|
+
|
13
|
+
Bug Fixes:
|
14
|
+
|
15
|
+
* Fix unserializable error in Target#send_batch_unopened_notification_email since unnecessary options are passed to mailer
|
16
|
+
|
17
|
+
Breaking Changes:
|
18
|
+
|
19
|
+
* Remove notifiable_type from the argument of overriden method or configured lambda function for Target#batch_notification_email_allowed?
|
20
|
+
|
1
21
|
## 1.0.2 / 2016-11-14
|
2
22
|
[Full Changelog](http://github.com/simukappu/activity_notification/compare/v1.0.1...v1.0.2)
|
3
23
|
|
@@ -19,6 +39,10 @@ Enhancements:
|
|
19
39
|
* Add methods to get notifications for specified target type grouped by targets like `notification_index_map`
|
20
40
|
* Arrange default notification email view templates
|
21
41
|
|
42
|
+
Breaking Changes:
|
43
|
+
|
44
|
+
* Use instance variables @notification.target and @notification.notifiable instead of @target and @notifiable in notification email templates
|
45
|
+
|
22
46
|
## 1.0.0 / 2016-10-06
|
23
47
|
[Full Changelog](http://github.com/simukappu/activity_notification/compare/v0.0.10...v1.0.0)
|
24
48
|
|
@@ -38,6 +62,7 @@ Enhancements:
|
|
38
62
|
* Make default rails version 5.0 and update gem dependency
|
39
63
|
|
40
64
|
Breaking Changes:
|
65
|
+
|
41
66
|
* Rename `opened_limit` configuration parameter to `opened_index_limit`
|
42
67
|
* http://github.com/simukappu/activity_notification/commit/591e53cd8977220f819c11cd702503fc72dd1fd1
|
43
68
|
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
activity_notification (1.0
|
4
|
+
activity_notification (1.1.0)
|
5
5
|
activerecord (>= 4.2.0)
|
6
6
|
i18n (>= 0.5.0)
|
7
7
|
jquery-rails (>= 3.1.1)
|
@@ -51,19 +51,19 @@ GEM
|
|
51
51
|
activesupport (>= 3.0)
|
52
52
|
railties (>= 3.0)
|
53
53
|
rspec-rails (>= 2.2)
|
54
|
-
arel (7.1.
|
54
|
+
arel (7.1.4)
|
55
55
|
bcrypt (3.1.11)
|
56
56
|
builder (3.2.2)
|
57
|
-
bullet (5.4.
|
57
|
+
bullet (5.4.3)
|
58
58
|
activesupport (>= 3.0.0)
|
59
59
|
uniform_notifier (~> 1.10.0)
|
60
|
-
concurrent-ruby (1.0.
|
61
|
-
coveralls (0.8.
|
60
|
+
concurrent-ruby (1.0.3)
|
61
|
+
coveralls (0.8.17)
|
62
62
|
json (>= 1.8, < 3)
|
63
63
|
simplecov (~> 0.12.0)
|
64
64
|
term-ansicolor (~> 1.3)
|
65
65
|
thor (~> 0.19.1)
|
66
|
-
tins (
|
66
|
+
tins (~> 1.6)
|
67
67
|
devise (4.2.0)
|
68
68
|
bcrypt (~> 3.0)
|
69
69
|
orm_adapter (~> 0.1)
|
@@ -73,10 +73,10 @@ GEM
|
|
73
73
|
diff-lcs (1.2.5)
|
74
74
|
docile (1.1.5)
|
75
75
|
erubis (2.7.0)
|
76
|
-
factory_girl (4.
|
76
|
+
factory_girl (4.8.0)
|
77
77
|
activesupport (>= 3.0.0)
|
78
|
-
factory_girl_rails (4.
|
79
|
-
factory_girl (~> 4.
|
78
|
+
factory_girl_rails (4.8.0)
|
79
|
+
factory_girl (~> 4.8.0)
|
80
80
|
railties (>= 3.0.0)
|
81
81
|
globalid (0.3.7)
|
82
82
|
activesupport (>= 4.1.0)
|
@@ -95,13 +95,11 @@ GEM
|
|
95
95
|
mime-types-data (~> 3.2015)
|
96
96
|
mime-types-data (3.2016.0521)
|
97
97
|
mini_portile2 (2.1.0)
|
98
|
-
minitest (5.
|
98
|
+
minitest (5.10.1)
|
99
99
|
nio4r (1.2.1)
|
100
|
-
nokogiri (1.6.8)
|
100
|
+
nokogiri (1.6.8.1)
|
101
101
|
mini_portile2 (~> 2.1.0)
|
102
|
-
pkg-config (~> 1.1.7)
|
103
102
|
orm_adapter (0.5.0)
|
104
|
-
pkg-config (1.1.7)
|
105
103
|
rack (2.0.1)
|
106
104
|
rack-test (0.6.3)
|
107
105
|
rack (>= 1.0)
|
@@ -132,7 +130,7 @@ GEM
|
|
132
130
|
method_source
|
133
131
|
rake (>= 0.8.7)
|
134
132
|
thor (>= 0.18.1, < 2.0)
|
135
|
-
rake (
|
133
|
+
rake (12.0.0)
|
136
134
|
responders (2.3.0)
|
137
135
|
railties (>= 4.2.0, < 5.1)
|
138
136
|
rspec-core (3.5.4)
|
@@ -167,10 +165,10 @@ GEM
|
|
167
165
|
sqlite3 (1.3.12)
|
168
166
|
term-ansicolor (1.4.0)
|
169
167
|
tins (~> 1.0)
|
170
|
-
thor (0.19.
|
168
|
+
thor (0.19.4)
|
171
169
|
thread_safe (0.3.5)
|
172
170
|
timecop (0.8.1)
|
173
|
-
tins (1.
|
171
|
+
tins (1.13.0)
|
174
172
|
tzinfo (1.2.2)
|
175
173
|
thread_safe (~> 0.1)
|
176
174
|
uniform_notifier (1.10.0)
|
@@ -192,7 +190,7 @@ DEPENDENCIES
|
|
192
190
|
bullet
|
193
191
|
coveralls
|
194
192
|
devise (~> 4.2.0)
|
195
|
-
factory_girl_rails (~> 4.
|
193
|
+
factory_girl_rails (~> 4.8.0)
|
196
194
|
rails (~> 5.0.0)
|
197
195
|
rails-controller-testing
|
198
196
|
rspec-rails (~> 3.5.1)
|
data/README.md
CHANGED
@@ -22,13 +22,17 @@
|
|
22
22
|
* Grouping notifications (grouping like `"Kevin and 7 other users posted comments to this article"`)
|
23
23
|
* Email notification
|
24
24
|
* Batch email notification
|
25
|
+
* Subscription management
|
25
26
|
* Integration with [Devise](https://github.com/plataformatec/devise) authentication
|
26
27
|
|
27
28
|
### Notification index
|
28
29
|
<kbd></kbd>
|
29
30
|
|
30
31
|
### Plugin notifications
|
31
|
-
<kbd></kbd>
|
33
|
+
|
34
|
+
### Subscription management
|
35
|
+
<kbd></kbd>
|
32
36
|
|
33
37
|
`activity_notification` deeply uses [PublicActivity](https://github.com/pokonski/public_activity) as reference in presentation layer.
|
34
38
|
|
@@ -57,11 +61,15 @@
|
|
57
61
|
2. [Email templates](#email-templates)
|
58
62
|
3. [i18n for email](#i18n-for-email)
|
59
63
|
2. [Batch email notification](#batch-email-notification)
|
60
|
-
1. [Setup mailer](#setup-mailer)
|
64
|
+
1. [Setup batch mailer](#setup-batch-mailer)
|
61
65
|
2. [Batch email templates](#batch-email-templates)
|
62
66
|
3. [i18n for batch email](#i18n-for-batch-email)
|
63
67
|
3. [Grouping notifications](#grouping-notifications)
|
64
|
-
4. [
|
68
|
+
4. [Subscription management](#subscription-management)
|
69
|
+
1. [Setup subscriptions](#setup-subscriptions)
|
70
|
+
2. [Manage subscriptions](#manage-subscriptions)
|
71
|
+
3. [Customize Subscriptions](#customize-subscriptions)
|
72
|
+
5. [Integration with Devise](#integration-with-devise)
|
65
73
|
4. [Testing](#testing)
|
66
74
|
5. [Documentation](#documentation)
|
67
75
|
6. **[Common examples](#common-examples)**
|
@@ -85,7 +93,7 @@ gem 'activity_notification'
|
|
85
93
|
After you install `activity_notification` and add it to your Gemfile, you need to run the generator:
|
86
94
|
|
87
95
|
```console
|
88
|
-
$ rails generate activity_notification:install
|
96
|
+
$ bin/rails generate activity_notification:install
|
89
97
|
```
|
90
98
|
|
91
99
|
The generator will install an initializer which describes all configuration options of `activity_notification`.
|
@@ -97,8 +105,8 @@ Currently `activity_notification` is only supported with ActiveRecord.
|
|
97
105
|
Create migration for notifications and migrate the database in your Rails project:
|
98
106
|
|
99
107
|
```console
|
100
|
-
$ rails generate activity_notification:migration
|
101
|
-
$ rake db:migrate
|
108
|
+
$ bin/rails generate activity_notification:migration
|
109
|
+
$ bin/rake db:migrate
|
102
110
|
```
|
103
111
|
|
104
112
|
### Configuring models
|
@@ -124,7 +132,7 @@ end
|
|
124
132
|
|
125
133
|
Configure your notifiable model (e.g. app/models/comment.rb).
|
126
134
|
Add `acts_as_notifiable` configuration to your notifiable model representing activity to notify.
|
127
|
-
You have to define notification targets for all notifications from this notifiable model by `:targets` option. Other configurations are options. `:notifiable_path` option is a path to move when the notification
|
135
|
+
You have to define notification targets for all notifications from this notifiable model by `:targets` option. Other configurations are options. `:notifiable_path` option is a path to move when the notification is opened by the target user.
|
128
136
|
|
129
137
|
```ruby
|
130
138
|
class Article < ActiveRecord::Base
|
@@ -145,8 +153,8 @@ class Comment < ActiveRecord::Base
|
|
145
153
|
targets: ->(comment, key) {
|
146
154
|
([comment.article.user] + comment.article.commented_users.to_a - [comment.user]).uniq
|
147
155
|
},
|
148
|
-
# Path to move when the notification
|
149
|
-
# This is
|
156
|
+
# Path to move when the notification is opened by the target user
|
157
|
+
# This is an optional configuration since activity_notification uses polymorphic_path as default
|
150
158
|
notifiable_path: :article_notifiable_path
|
151
159
|
|
152
160
|
def article_notifiable_path
|
@@ -160,20 +168,20 @@ end
|
|
160
168
|
`activity_notification` provides view templates to customize your notification views. The view generator can generate default views for all targets.
|
161
169
|
|
162
170
|
```console
|
163
|
-
$ rails generate activity_notification:views
|
171
|
+
$ bin/rails generate activity_notification:views
|
164
172
|
```
|
165
173
|
|
166
174
|
If you have multiple target models in your application, such as `User` and `Admin`, you will be able to have views based on the target like `notifications/users/index` and `notifications/admins/index`. If no view is found for the target, `activity_notification` will use the default view at `notifications/default/index`. You can also use the generator to generate views for the specified target:
|
167
175
|
|
168
176
|
```console
|
169
|
-
$ rails generate activity_notification:views users
|
177
|
+
$ bin/rails generate activity_notification:views users
|
170
178
|
```
|
171
179
|
|
172
180
|
If you would like to generate only a few sets of views, like the ones for the `notifications` (for notification views) and `mailer` (for notification email views),
|
173
181
|
you can pass a list of modules to the generator with the `-v` flag.
|
174
182
|
|
175
183
|
```console
|
176
|
-
$ rails generate activity_notification:views -v notifications
|
184
|
+
$ bin/rails generate activity_notification:views -v notifications
|
177
185
|
```
|
178
186
|
|
179
187
|
### Configuring controllers
|
@@ -183,7 +191,7 @@ If the customization at the views level is not enough, you can customize each co
|
|
183
191
|
1. Create your custom controllers using the generator with a target:
|
184
192
|
|
185
193
|
```console
|
186
|
-
$ rails generate activity_notification:controllers users
|
194
|
+
$ bin/rails generate activity_notification:controllers users
|
187
195
|
```
|
188
196
|
|
189
197
|
If you specify `users` as the target, controllers will be created in `app/controllers/users/`.
|
@@ -191,14 +199,14 @@ If the customization at the views level is not enough, you can customize each co
|
|
191
199
|
|
192
200
|
```ruby
|
193
201
|
class Users::NotificationsController < ActivityNotification::NotificationsController
|
194
|
-
# GET /:target_type/:target_id/
|
202
|
+
# GET /:target_type/:target_id/notifications
|
195
203
|
# def index
|
196
204
|
# super
|
197
205
|
# end
|
198
206
|
|
199
207
|
# ...
|
200
208
|
|
201
|
-
# POST /:target_type/:target_id/
|
209
|
+
# POST /:target_type/:target_id/notifications/:id/open
|
202
210
|
# def open
|
203
211
|
# super
|
204
212
|
# end
|
@@ -210,19 +218,17 @@ If the customization at the views level is not enough, you can customize each co
|
|
210
218
|
2. Tell the router to use this controller:
|
211
219
|
|
212
220
|
```ruby
|
213
|
-
notify_to :users,
|
221
|
+
notify_to :users, controller: 'users/notifications'
|
214
222
|
```
|
215
223
|
|
216
|
-
3.
|
217
|
-
|
218
|
-
4. Finally, change or extend the desired controller actions.
|
224
|
+
3. Finally, change or extend the desired controller actions.
|
219
225
|
|
220
226
|
You can completely override a controller action
|
221
227
|
```ruby
|
222
228
|
class Users::NotificationsController < ActivityNotification::NotificationsController
|
223
229
|
# ...
|
224
230
|
|
225
|
-
# POST /:target_type/:target_id/
|
231
|
+
# POST /:target_type/:target_id/notifications/:id/open
|
226
232
|
def open
|
227
233
|
# Custom code to open notification here
|
228
234
|
|
@@ -341,7 +347,7 @@ If you would like to fallback to a partial, you can utilize the `:fallback` para
|
|
341
347
|
<%= render_notification(@notification, target: :users, fallback: :default) %>
|
342
348
|
```
|
343
349
|
|
344
|
-
When used in this manner, if a partial with the specified `:key` cannot be located it will use the partial defined in the `:fallback` instead. In the example above this would resolve to `activity_notification/notifications/users/_default.html.(|erb|haml|slim|something_else)`.
|
350
|
+
When used in this manner, if a partial with the specified `:key` cannot be located, it will use the partial defined in the `:fallback` instead. In the example above this would resolve to `activity_notification/notifications/users/_default.html.(|erb|haml|slim|something_else)`.
|
345
351
|
|
346
352
|
If you do not specify `:target` option like this,
|
347
353
|
|
@@ -419,7 +425,7 @@ You can also configure them for each model by acts_as roles like these.
|
|
419
425
|
class User < ActiveRecord::Base
|
420
426
|
# Example using confirmed_at of devise field
|
421
427
|
# to decide whether activity_notification sends notification email to this user
|
422
|
-
|
428
|
+
acts_as_target email: :email, email_allowed: :confirmed_at
|
423
429
|
end
|
424
430
|
```
|
425
431
|
|
@@ -465,7 +471,7 @@ notification:
|
|
465
471
|
|
466
472
|
`activity_notification` provides batch email notification to the notification targets. You can send notification email daily, hourly or weekly and so on with a scheduler like `whenever`.
|
467
473
|
|
468
|
-
#### Setup mailer
|
474
|
+
#### Setup batch mailer
|
469
475
|
|
470
476
|
First, you need to set up the default URL options for the `activity_notification` mailer in each environment.
|
471
477
|
|
@@ -476,17 +482,17 @@ config.email_enabled = true
|
|
476
482
|
config.mailer_sender = 'your_notification_sender@example.com'
|
477
483
|
```
|
478
484
|
|
479
|
-
You can also configure them for each target model by `
|
485
|
+
You can also configure them for each target model by `acts_as_target` role like this.
|
480
486
|
|
481
487
|
```ruby
|
482
488
|
class User < ActiveRecord::Base
|
483
489
|
# Example using confirmed_at of devise field
|
484
490
|
# to decide whether activity_notification sends batch notification email to this user
|
485
|
-
|
491
|
+
acts_as_target email: :email, batch_email_allowed: :confirmed_at
|
486
492
|
end
|
487
493
|
```
|
488
494
|
|
489
|
-
Then, you can
|
495
|
+
Then, you can send batch notification email for unopened notifications only to the all specified targets with `batch_key`.
|
490
496
|
|
491
497
|
```ruby
|
492
498
|
# Send batch notification email to the users with unopened notifications
|
@@ -503,7 +509,7 @@ User.send_batch_unopened_notification_email(batch_key: 'batch.comment.post', fil
|
|
503
509
|
#### Batch email templates
|
504
510
|
|
505
511
|
`activity_notification` will look for batch email template in the same way as email notification using `batch_key`.
|
506
|
-
`batch_key` is specified by `:batch_key` option. If
|
512
|
+
`batch_key` is specified by `:batch_key` option. If this option is not specified, the key of the first notification will be used as `batch_key`.
|
507
513
|
|
508
514
|
#### i18n for batch email
|
509
515
|
|
@@ -570,6 +576,127 @@ notification:
|
|
570
576
|
|
571
577
|
Then, you will see `Kevin and 7 other users replied 10 comments to your article"`.
|
572
578
|
|
579
|
+
|
580
|
+
### Subscription management
|
581
|
+
|
582
|
+
`activity_notification` provides the function for subscription management of notifications and notification email.
|
583
|
+
|
584
|
+
#### Setup subscriptions
|
585
|
+
|
586
|
+
Subscription management is disabled as default. You can configure to enable subscription management in initializer `activity_notification.rb`.
|
587
|
+
|
588
|
+
```ruby
|
589
|
+
config.subscription_enabled = true
|
590
|
+
```
|
591
|
+
|
592
|
+
This makes all target model subscribers. You can also configure them for each target model by acts_as_target role like this.
|
593
|
+
|
594
|
+
```ruby
|
595
|
+
class User < ActiveRecord::Base
|
596
|
+
# Example using confirmed_at of devise field
|
597
|
+
# to decide whether activity_notification manages subscriptions of this user
|
598
|
+
acts_as_target email: :email, email_allowed: :confirmed_at, subscription_allowed: confirmed_at
|
599
|
+
end
|
600
|
+
```
|
601
|
+
|
602
|
+
If you do not have subscriptions table in you database, create migration for subscriptions and migrate the database in your Rails project:
|
603
|
+
|
604
|
+
```console
|
605
|
+
$ bin/rails generate activity_notification:migration CreateSubscriptions -t subscriptions
|
606
|
+
$ bin/rake db:migrate
|
607
|
+
```
|
608
|
+
|
609
|
+
|
610
|
+
#### Manage subscriptions
|
611
|
+
|
612
|
+
Subscriptions are managed by `Subscription` model record which belongs to target and key of the notification.
|
613
|
+
`Subscription#subscribing` manages subscription of notifications.
|
614
|
+
`true` means the target will receive the notifications with this key.
|
615
|
+
`false` means the target will not receive these notifications.
|
616
|
+
`Subscription#subscribing_to_email` manages subscription of notification email.
|
617
|
+
`true` means the target will receive the notification email with this key including batch notification email with this `batch_key`.
|
618
|
+
`false` means the target will not receive these notification email.
|
619
|
+
|
620
|
+
As default, all target subscribes to notification and notification email when subscription record does not exist in your database.
|
621
|
+
You can change this `subscribe_as_default` parameter in initializer `activity_notification.rb`.
|
622
|
+
|
623
|
+
```ruby
|
624
|
+
config.subscribe_as_default = false
|
625
|
+
```
|
626
|
+
|
627
|
+
Then, all target does not subscribe to notification and notification email and will not receive any notifications as default.
|
628
|
+
|
629
|
+
You can create subscription record from subscription API in your target model like this:
|
630
|
+
|
631
|
+
```ruby
|
632
|
+
# Subscribe 'comment.reply' notifications and notification email
|
633
|
+
user.create_subscription(key: 'comment.reply')
|
634
|
+
|
635
|
+
# Subscribe 'comment.reply' notifications but does not subscribe notification email
|
636
|
+
user.create_subscription(key: 'comment.reply', subscribing_to_email: false)
|
637
|
+
|
638
|
+
# Unsubscribe 'comment.reply' notifications and notification email
|
639
|
+
user.create_subscription(key: 'comment.reply', subscribing: false)
|
640
|
+
```
|
641
|
+
|
642
|
+
You can also update subscriptions like this:
|
643
|
+
|
644
|
+
```ruby
|
645
|
+
# Subscribe 'comment.reply' notifications and notification email
|
646
|
+
user.find_or_create_subscription('comment.reply').subscribe
|
647
|
+
|
648
|
+
# Unsubscribe 'comment.reply' notifications and notification email
|
649
|
+
user.find_or_create_subscription('comment.reply').unsubscribe
|
650
|
+
|
651
|
+
# Unsubscribe 'comment.reply' notification email
|
652
|
+
user.find_or_create_subscription('comment.reply').unsubscribe_to_email
|
653
|
+
```
|
654
|
+
|
655
|
+
#### Customize subscriptions
|
656
|
+
|
657
|
+
`activity_notification` provides basic controllers and views to manage the subscriptions.
|
658
|
+
|
659
|
+
Add subscription routing to `config/routes.rb` for the target (e.g. `:users`):
|
660
|
+
|
661
|
+
```ruby
|
662
|
+
Rails.application.routes.draw do
|
663
|
+
subscribed_by :users
|
664
|
+
end
|
665
|
+
```
|
666
|
+
|
667
|
+
or, you can also configure it with notifications like this:
|
668
|
+
|
669
|
+
```ruby
|
670
|
+
Rails.application.routes.draw do
|
671
|
+
notify_to :users, with_subscription: true
|
672
|
+
end
|
673
|
+
```
|
674
|
+
|
675
|
+
Then, you can access `users/1/subscriptions` and use `subscriptions_controller` or `subscriptions_with_devise_controller` to manage the subscriptions.
|
676
|
+
|
677
|
+
If you would like to customize subscription controllers or views, you can use generators like notifications:
|
678
|
+
|
679
|
+
* Customize subscription controllers
|
680
|
+
|
681
|
+
1. Create your custom controllers using controller generator with a target:
|
682
|
+
|
683
|
+
```console
|
684
|
+
$ bin/rails generate activity_notification:controllers users -c subscriptions subscriptions_with_devise
|
685
|
+
```
|
686
|
+
|
687
|
+
2. Tell the router to use this controller:
|
688
|
+
|
689
|
+
```ruby
|
690
|
+
notify_to :users, with_subscription: { controller: 'users/subscriptions' }
|
691
|
+
```
|
692
|
+
|
693
|
+
* Customize subscription views
|
694
|
+
|
695
|
+
```console
|
696
|
+
$ bin/rails generate activity_notification:views users -v subscriptions
|
697
|
+
```
|
698
|
+
|
699
|
+
|
573
700
|
### Integration with Devise
|
574
701
|
|
575
702
|
`activity_notification` supports to integrate with devise authentication.
|