activity_notification 1.6.1 → 1.7.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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/README.md +41 -3
  4. data/app/jobs/activity_notification/notify_all_job.rb +9 -0
  5. data/app/jobs/activity_notification/notify_job.rb +9 -0
  6. data/app/jobs/activity_notification/notify_to_job.rb +9 -0
  7. data/lib/activity_notification/apis/notification_api.rb +114 -18
  8. data/lib/activity_notification/config.rb +20 -0
  9. data/lib/activity_notification/models/concerns/notifiable.rb +63 -0
  10. data/lib/activity_notification/models/concerns/target.rb +23 -2
  11. data/lib/activity_notification/roles/acts_as_notifiable.rb +8 -0
  12. data/lib/activity_notification/version.rb +1 -1
  13. data/lib/generators/templates/activity_notification.rb +6 -0
  14. data/lib/generators/templates/migrations/migration.rb +5 -5
  15. data/spec/concerns/apis/notification_api_spec.rb +107 -0
  16. data/spec/concerns/models/notifiable_spec.rb +25 -4
  17. data/spec/concerns/models/subscriber_spec.rb +11 -11
  18. data/spec/concerns/models/target_spec.rb +9 -2
  19. data/spec/generators/migration/migration_generator_spec.rb +37 -4
  20. data/spec/jobs/notify_all_job_spec.rb +23 -0
  21. data/spec/jobs/notify_job_spec.rb +23 -0
  22. data/spec/jobs/notify_to_job_spec.rb +23 -0
  23. data/spec/rails_app/app/controllers/comments_controller.rb +4 -1
  24. data/spec/rails_app/app/models/dummy/dummy_base.rb +1 -0
  25. data/spec/rails_app/app/models/dummy/dummy_group.rb +1 -0
  26. data/spec/rails_app/app/models/dummy/dummy_notifiable.rb +1 -0
  27. data/spec/rails_app/app/models/dummy/dummy_notifiable_target.rb +1 -0
  28. data/spec/rails_app/app/models/dummy/dummy_notifier.rb +1 -0
  29. data/spec/rails_app/app/models/dummy/dummy_subscriber.rb +1 -0
  30. data/spec/rails_app/app/models/dummy/dummy_target.rb +1 -0
  31. data/spec/rails_app/config/initializers/activity_notification.rb +6 -0
  32. data/spec/rails_app/db/migrate/{20160715050433_create_test_tables.rb → 20160716000000_create_test_tables.rb} +1 -1
  33. data/spec/rails_app/db/migrate/{20160715050420_create_activity_notification_tables.rb → 20181209000000_create_activity_notification_tables.rb} +3 -3
  34. data/spec/rails_app/db/schema.rb +43 -43
  35. data/spec/roles/acts_as_notifiable_spec.rb +45 -0
  36. metadata +15 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c4bddcd228924d6a594bb826a9e815a5bc31baed
4
- data.tar.gz: 0d2e2517c32fab5cf3310d1f6261ee1a40323c52
3
+ metadata.gz: 6640bcffc0f4acb3afd7021387feb76db52dea7a
4
+ data.tar.gz: 2ecda41bc9b8e3a76e89a10263cdb805eee2cd63
5
5
  SHA512:
6
- metadata.gz: 3015810028cce0174fb091f46ded488310307e527b16b27f36bd72942112356373dbac8c9ed5e4ff2e2ebfb55fb4d33878003bf7f46165c2a0cfe0e822e355a2
7
- data.tar.gz: 13bf2aa5ec658cbbc95236e3fd83a2c48ce513a12bc2daa07ee788757cdf5d6516d75fa7f7e5f2fd0a0b9c0dffdbaac02746cb214407a066496dfdd9079645b5
6
+ metadata.gz: 961d0f2f0e201522b7e8e2899087dca1f868c0c9950b69d22aa2a69f64a46ddf6d3b0ec3f5f0e5cd22f33afdc27c7670226a3a493ac90848d5496430c6cbfd45
7
+ data.tar.gz: 2fe01f57e0f14964b77af8d9e9eac995cdb4e8c7a412c8491fe94fe6dd4731a28384dc4c5be4d902591803bcf88b212a88a99002492beda80663f690eeb88eb4
data/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ ## 1.7.0 / 2018-12-09
2
+ [Full Changelog](http://github.com/simukappu/activity_notification/compare/v1.6.1...v1.7.0)
3
+
4
+ Enhancements:
5
+
6
+ * Support asynchronous notification API - [#29](https://github.com/simukappu/activity_notification/issues/29)
7
+
8
+ Bug Fixes:
9
+
10
+ * Fix migration generator to specify the Rails release in generated migration files for Rails 5.x - [#96](https://github.com/simukappu/activity_notification/issues/96)
11
+
12
+ Breaking Changes:
13
+
14
+ * Change method name of *Target#notify_to* into *Target#receive_notification_of* to avoid ambiguous method name with *Notifiable#notify_to* - [#88](https://github.com/simukappu/activity_notification/issues/88)
15
+
1
16
  ## 1.6.1 / 2018-11-19
2
17
  [Full Changelog](http://github.com/simukappu/activity_notification/compare/v1.6.0...v1.6.1)
3
18
 
data/README.md CHANGED
@@ -60,6 +60,7 @@
60
60
  - [Routes with scope](#routes-with-scope)
61
61
  - [Creating notifications](#creating-notifications)
62
62
  - [Notification API](#notification-api)
63
+ - [Asynchronous notification API with ActiveJob](#asynchronous-notification-api-with-activejob)
63
64
  - [Automatic tracked notifications](#automatic-tracked-notifications)
64
65
  - [Displaying notifications](#displaying-notifications)
65
66
  - [Preparing target notifications](#preparing-target-notifications)
@@ -345,8 +346,7 @@ Then, pages are shown as */myscope/users/1/notifications*.
345
346
 
346
347
  #### Notification API
347
348
 
348
- You can trigger notifications by setting all your required parameters and triggering **notify**
349
- on the notifiable model, like this:
349
+ You can trigger notifications by setting all your required parameters and triggering **notify** on the notifiable model, like this:
350
350
 
351
351
  ```ruby
352
352
  @comment.notify :users, key: "comment.reply"
@@ -364,6 +364,31 @@ The new instances of **ActivityNotification::Notification** model will be genera
364
364
  *Hint*: *:key* is a option. Default key `#{notifiable_type}.default` which means *comment.default* will be used without specified key.
365
365
  You can override it by *Notifiable#default_notification_key*.
366
366
 
367
+ #### Asynchronous notification API with ActiveJob
368
+
369
+ Using Notification API with default configurations, the notifications will be generated synchronously. *activity_notification* also supports **asynchronous notification API** with ActiveJob to improve application performance. You can use **notify_later** method on the notifiable model, like this:
370
+
371
+ ```ruby
372
+ @comment.notify_later :users, key: "comment.reply"
373
+ ```
374
+
375
+ You can also use *:notify_later* option in *notify* method. This is the same operation as calling *notify_later* method.
376
+
377
+ ```ruby
378
+ @comment.notify :users, key: "comment.reply", notify_later: true
379
+ ```
380
+
381
+ *Note*: *notify_now* is an alias for *notify* and does the same.
382
+
383
+ When you use asynchronous notification API, you should setup ActiveJob with background queuing service such as Sidekiq.
384
+ You can set *config.active_job_queue* in your initializer to specify a queue name *activity_notification* will use.
385
+ The default queue name is *:activity_notification*.
386
+
387
+ ```ruby
388
+ # Configure ActiveJob queue name for delayed notifications.
389
+ config.active_job_queue = :my_notification_queue
390
+ ```
391
+
367
392
  #### Automatic tracked notifications
368
393
 
369
394
  You can also generate automatic tracked notifications by **:tracked** option in *acts_as_notifiable*.
@@ -404,7 +429,7 @@ class Comment < ActiveRecord::Base
404
429
  },
405
430
  # Set { except: [:update] } to :tracked option to generate tracked notifications except update (creation only).
406
431
  # It adds required callbacks to generate notifications for creation of the notifiable model.
407
- tracked: { except: [:update], key: 'comment.edit', send_later: false }
432
+ tracked: { except: [:update], key: 'comment.create.now', send_later: false }
408
433
  end
409
434
  ```
410
435
 
@@ -412,6 +437,19 @@ end
412
437
  You can override them by *Notifiable#notification_key_for_tracked_creation* and *Notifiable#notification_key_for_tracked_update*.
413
438
  You can also specify key option in the *:tracked* statement.
414
439
 
440
+ As a default, the notifications will be generated synchronously along with model creation or update. If you want to generate notifications asynchronously, use *:notify_later* option with the *:tracked* option, like this:
441
+
442
+ ```ruby
443
+ class Comment < ActiveRecord::Base
444
+ acts_as_notifiable :users,
445
+ targets: ->(comment, key) {
446
+ ([comment.article.user] + comment.article.commented_users.to_a - [comment.user]).uniq
447
+ },
448
+ # It adds required callbacks to generate notifications asynchronously for creation of the notifiable model.
449
+ tracked: { only: [:create], key: 'comment.create.later', notify_later: true }
450
+ end
451
+ ```
452
+
415
453
  ### Displaying notifications
416
454
 
417
455
  #### Preparing target notifications
@@ -0,0 +1,9 @@
1
+ if defined?(ActiveJob)
2
+ class ActivityNotification::NotifyAllJob < ActivityNotification.config.parent_job.constantize
3
+ queue_as ActivityNotification.config.active_job_queue
4
+
5
+ def perform(targets, notifiable, options = {})
6
+ ActivityNotification::Notification.notify_all(targets, notifiable, options)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ if defined?(ActiveJob)
2
+ class ActivityNotification::NotifyJob < ActivityNotification.config.parent_job.constantize
3
+ queue_as ActivityNotification.config.active_job_queue
4
+
5
+ def perform(target_type, notifiable, options = {})
6
+ ActivityNotification::Notification.notify(target_type, notifiable, options)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ if defined?(ActiveJob)
2
+ class ActivityNotification::NotifyToJob < ActivityNotification.config.parent_job.constantize
3
+ queue_as ActivityNotification.config.active_job_queue
4
+
5
+ def perform(target, notifiable, options = {})
6
+ ActivityNotification::Notification.notify_to(target, notifiable, options)
7
+ end
8
+ end
9
+ end
@@ -157,6 +157,7 @@ module ActivityNotification
157
157
  # @option options [ActiveSupport::Duration] :group_expiry_delay (nil) Expiry period of a notification group
158
158
  # @option options [Object] :notifier (nil) Notifier of the notifications
159
159
  # @option options [Hash] :parameters ({}) Additional parameters of the notifications
160
+ # @option options [Boolean] :notify_later (false) Whether it generates notifications asynchronously
160
161
  # @option options [Boolean] :send_email (true) Whether it sends notification email
161
162
  # @option options [Boolean] :send_later (true) Whether it sends notification email asynchronously
162
163
  # @option options [Boolean] :publish_optional_targets (true) Whether it publishes notification to optional targets
@@ -164,11 +165,48 @@ module ActivityNotification
164
165
  # @option options [Hash<String, Hash>] :optional_targets ({}) Options for optional targets, keys are optional target name (:amazon_sns or :slack etc) and values are options
165
166
  # @return [Array<Notificaion>] Array of generated notifications
166
167
  def notify(target_type, notifiable, options = {})
167
- targets = notifiable.notification_targets(target_type, options[:pass_full_options] ? options : options[:key])
168
- unless targets.blank?
169
- notify_all(targets, notifiable, options)
168
+ if options[:notify_later]
169
+ notify_later(target_type, notifiable, options)
170
+ else
171
+ targets = notifiable.notification_targets(target_type, options[:pass_full_options] ? options : options[:key])
172
+ unless targets.blank?
173
+ notify_all(targets, notifiable, options)
174
+ end
170
175
  end
171
176
  end
177
+ alias_method :notify_now, :notify
178
+
179
+ # Generates notifications to configured targets with notifiable model later by ActiveJob queue.
180
+ #
181
+ # @example Use with target_type as Symbol
182
+ # ActivityNotification::Notification.notify_later :users, @comment
183
+ # @example Use with target_type as String
184
+ # ActivityNotification::Notification.notify_later 'User', @comment
185
+ # @example Use with target_type as Class
186
+ # ActivityNotification::Notification.notify_later User, @comment
187
+ # @example Use with options
188
+ # ActivityNotification::Notification.notify_later :users, @comment, key: 'custom.comment', group: @comment.article
189
+ # ActivityNotification::Notification.notify_later :users, @comment, parameters: { reply_to: @comment.reply_to }, send_later: false
190
+ #
191
+ # @param [Symbol, String, Class] target_type Type of target
192
+ # @param [Object] notifiable Notifiable instance
193
+ # @param [Hash] options Options for notifications
194
+ # @option options [String] :key (notifiable.default_notification_key) Key of the notification
195
+ # @option options [Object] :group (nil) Group unit of the notifications
196
+ # @option options [ActiveSupport::Duration] :group_expiry_delay (nil) Expiry period of a notification group
197
+ # @option options [Object] :notifier (nil) Notifier of the notifications
198
+ # @option options [Hash] :parameters ({}) Additional parameters of the notifications
199
+ # @option options [Boolean] :send_email (true) Whether it sends notification email
200
+ # @option options [Boolean] :send_later (true) Whether it sends notification email asynchronously
201
+ # @option options [Boolean] :publish_optional_targets (true) Whether it publishes notification to optional targets
202
+ # @option options [Boolean] :pass_full_options (false) Whether it passes full options to notifiable.notification_targets, not a key only
203
+ # @option options [Hash<String, Hash>] :optional_targets ({}) Options for optional targets, keys are optional target name (:amazon_sns or :slack etc) and values are options
204
+ # @return [Array<Notificaion>] Array of generated notifications
205
+ def notify_later(target_type, notifiable, options = {})
206
+ target_type = target_type.to_s if target_type.is_a? Symbol
207
+ options.delete(:notify_later)
208
+ ActivityNotification::NotifyJob.perform_later(target_type, notifiable, options)
209
+ end
172
210
 
173
211
  # Generates notifications to specified targets.
174
212
  #
@@ -183,13 +221,42 @@ module ActivityNotification
183
221
  # @option options [ActiveSupport::Duration] :group_expiry_delay (nil) Expiry period of a notification group
184
222
  # @option options [Object] :notifier (nil) Notifier of the notifications
185
223
  # @option options [Hash] :parameters ({}) Additional parameters of the notifications
224
+ # @option options [Boolean] :notify_later (false) Whether it generates notifications asynchronously
186
225
  # @option options [Boolean] :send_email (true) Whether it sends notification email
187
226
  # @option options [Boolean] :send_later (true) Whether it sends notification email asynchronously
188
227
  # @option options [Boolean] :publish_optional_targets (true) Whether it publishes notification to optional targets
189
228
  # @option options [Hash<String, Hash>] :optional_targets ({}) Options for optional targets, keys are optional target name (:amazon_sns or :slack etc) and values are options
190
229
  # @return [Array<Notificaion>] Array of generated notifications
191
230
  def notify_all(targets, notifiable, options = {})
192
- targets.map { |target| notify_to(target, notifiable, options) }
231
+ if options[:notify_later]
232
+ notify_all_later(targets, notifiable, options)
233
+ else
234
+ targets.map { |target| notify_to(target, notifiable, options) }
235
+ end
236
+ end
237
+ alias_method :notify_all_now, :notify_all
238
+
239
+ # Generates notifications to specified targets later by ActiveJob queue.
240
+ #
241
+ # @example Notify to all users later
242
+ # ActivityNotification::Notification.notify_all_later User.all, @comment
243
+ #
244
+ # @param [Array<Object>] targets Targets to send notifications
245
+ # @param [Object] notifiable Notifiable instance
246
+ # @param [Hash] options Options for notifications
247
+ # @option options [String] :key (notifiable.default_notification_key) Key of the notification
248
+ # @option options [Object] :group (nil) Group unit of the notifications
249
+ # @option options [ActiveSupport::Duration] :group_expiry_delay (nil) Expiry period of a notification group
250
+ # @option options [Object] :notifier (nil) Notifier of the notifications
251
+ # @option options [Hash] :parameters ({}) Additional parameters of the notifications
252
+ # @option options [Boolean] :send_email (true) Whether it sends notification email
253
+ # @option options [Boolean] :send_later (true) Whether it sends notification email asynchronously
254
+ # @option options [Boolean] :publish_optional_targets (true) Whether it publishes notification to optional targets
255
+ # @option options [Hash<String, Hash>] :optional_targets ({}) Options for optional targets, keys are optional target name (:amazon_sns or :slack etc) and values are options
256
+ # @return [Array<Notificaion>] Array of generated notifications
257
+ def notify_all_later(targets, notifiable, options = {})
258
+ options.delete(:notify_later)
259
+ ActivityNotification::NotifyAllJob.perform_later(targets, notifiable, options)
193
260
  end
194
261
 
195
262
  # Generates notifications to one target.
@@ -205,27 +272,56 @@ module ActivityNotification
205
272
  # @option options [ActiveSupport::Duration] :group_expiry_delay (nil) Expiry period of a notification group
206
273
  # @option options [Object] :notifier (nil) Notifier of the notifications
207
274
  # @option options [Hash] :parameters ({}) Additional parameters of the notifications
275
+ # @option options [Boolean] :notify_later (false) Whether it generates notifications asynchronously
208
276
  # @option options [Boolean] :send_email (true) Whether it sends notification email
209
277
  # @option options [Boolean] :send_later (true) Whether it sends notification email asynchronously
210
278
  # @option options [Boolean] :publish_optional_targets (true) Whether it publishes notification to optional targets
211
279
  # @option options [Hash<String, Hash>] :optional_targets ({}) Options for optional targets, keys are optional target name (:amazon_sns or :slack etc) and values are options
212
280
  # @return [Notification] Generated notification instance
213
281
  def notify_to(target, notifiable, options = {})
214
- send_email = options.has_key?(:send_email) ? options[:send_email] : true
215
- send_later = options.has_key?(:send_later) ? options[:send_later] : true
216
- publish_optional_targets = options.has_key?(:publish_optional_targets) ? options[:publish_optional_targets] : true
217
- # Generate notification
218
- notification = generate_notification(target, notifiable, options)
219
- # Send notification email
220
- if notification.present? && send_email
221
- notification.send_notification_email({ send_later: send_later })
222
- end
223
- # Publish to optional targets
224
- if notification.present? && publish_optional_targets
225
- notification.publish_to_optional_targets(options[:optional_targets] || {})
282
+ if options[:notify_later]
283
+ notify_later_to(target, notifiable, options)
284
+ else
285
+ send_email = options.has_key?(:send_email) ? options[:send_email] : true
286
+ send_later = options.has_key?(:send_later) ? options[:send_later] : true
287
+ publish_optional_targets = options.has_key?(:publish_optional_targets) ? options[:publish_optional_targets] : true
288
+ # Generate notification
289
+ notification = generate_notification(target, notifiable, options)
290
+ # Send notification email
291
+ if notification.present? && send_email
292
+ notification.send_notification_email({ send_later: send_later })
293
+ end
294
+ # Publish to optional targets
295
+ if notification.present? && publish_optional_targets
296
+ notification.publish_to_optional_targets(options[:optional_targets] || {})
297
+ end
298
+ # Return generated notification
299
+ notification
226
300
  end
227
- # Return generated notification
228
- notification
301
+ end
302
+ alias_method :notify_now_to, :notify_to
303
+
304
+ # Generates notifications to one target later by ActiveJob queue.
305
+ #
306
+ # @example Notify to one user later
307
+ # ActivityNotification::Notification.notify_later_to @comment.auther, @comment
308
+ #
309
+ # @param [Object] target Target to send notifications
310
+ # @param [Object] notifiable Notifiable instance
311
+ # @param [Hash] options Options for notifications
312
+ # @option options [String] :key (notifiable.default_notification_key) Key of the notification
313
+ # @option options [Object] :group (nil) Group unit of the notifications
314
+ # @option options [ActiveSupport::Duration] :group_expiry_delay (nil) Expiry period of a notification group
315
+ # @option options [Object] :notifier (nil) Notifier of the notifications
316
+ # @option options [Hash] :parameters ({}) Additional parameters of the notifications
317
+ # @option options [Boolean] :send_email (true) Whether it sends notification email
318
+ # @option options [Boolean] :send_later (true) Whether it sends notification email asynchronously
319
+ # @option options [Boolean] :publish_optional_targets (true) Whether it publishes notification to optional targets
320
+ # @option options [Hash<String, Hash>] :optional_targets ({}) Options for optional targets, keys are optional target name (:amazon_sns or :slack etc) and values are options
321
+ # @return [Notification] Generated notification instance
322
+ def notify_later_to(target, notifiable, options = {})
323
+ options.delete(:notify_later)
324
+ ActivityNotification::NotifyToJob.perform_later(target, notifiable, options)
229
325
  end
230
326
 
231
327
  # Generates a notification
@@ -92,6 +92,15 @@ module ActivityNotification
92
92
  # @return [String] Base mailer class for email notification.
93
93
  attr_accessor :parent_mailer
94
94
 
95
+ # @overload parent_job
96
+ # Returns base job class for delayed notifications
97
+ # @return [String] Base job class for delayed notifications.
98
+ # @overload parent_job=(value)
99
+ # Sets base job class for delayed notifications
100
+ # @param [String] parent_job The new parent_job
101
+ # @return [String] Base job class for delayed notifications.
102
+ attr_accessor :parent_job
103
+
95
104
  # @overload parent_controller
96
105
  # Returns base controller class for notifications_controller
97
106
  # @return [String] Base controller class for notifications_controller.
@@ -119,6 +128,15 @@ module ActivityNotification
119
128
  # @return [Integer] Default limit to query for opened notifications.
120
129
  attr_accessor :opened_index_limit
121
130
 
131
+ # @overload active_job_queue
132
+ # Returns ActiveJob queue name for delayed notifications
133
+ # @return [Symbol] ActiveJob queue name for delayed notifications.
134
+ # @overload active_job_queue=(value)
135
+ # Sets ActiveJob queue name for delayed notifications
136
+ # @param [Symbol] active_job_queue The new active_job_queue
137
+ # @return [Symbol] ActiveJob queue name for delayed notifications.
138
+ attr_accessor :active_job_queue
139
+
122
140
  # @overload :orm
123
141
  # Returns ORM name for ActivityNotification (:active_record or :mongoid)
124
142
  # @return [Boolean] ORM name for ActivityNotification (:active_record or :mongoid).
@@ -137,9 +155,11 @@ module ActivityNotification
137
155
  @mailer_sender = nil
138
156
  @mailer = 'ActivityNotification::Mailer'
139
157
  @parent_mailer = 'ActionMailer::Base'
158
+ @parent_job = 'ActiveJob::Base'
140
159
  @parent_controller = 'ApplicationController'
141
160
  @mailer_templates_dir = 'activity_notification/mailer'
142
161
  @opened_index_limit = 10
162
+ @active_job_queue = :activity_notification
143
163
  @orm = :active_record
144
164
  end
145
165
 
@@ -249,6 +249,27 @@ module ActivityNotification
249
249
  Notification.notify(target_type, self, options)
250
250
  end
251
251
 
252
+ # Generates notifications to configured targets with notifiable model later by ActiveJob queue.
253
+ # This method calls NotificationApi#notify_later internally with self notifiable instance.
254
+ # @see NotificationApi#notify_later
255
+ #
256
+ # @param [Symbol, String, Class] target_type Type of target
257
+ # @param [Hash] options Options for notifications
258
+ # @option options [String] :key (notifiable.default_notification_key) Key of the notification
259
+ # @option options [Object] :group (nil) Group unit of the notifications
260
+ # @option options [ActiveSupport::Duration] :group_expiry_delay (nil) Expiry period of a notification group
261
+ # @option options [Object] :notifier (nil) Notifier of the notifications
262
+ # @option options [Hash] :parameters ({}) Additional parameters of the notifications
263
+ # @option options [Boolean] :send_email (true) Whether it sends notification email
264
+ # @option options [Boolean] :send_later (true) Whether it sends notification email asynchronously
265
+ # @option options [Boolean] :publish_optional_targets (true) Whether it publishes notification to optional targets
266
+ # @option options [Hash<String, Hash>] :optional_targets ({}) Options for optional targets, keys are optional target name (:amazon_sns or :slack etc) and values are options
267
+ # @return [Array<Notificaion>] Array of generated notifications
268
+ def notify_later(target_type, options = {})
269
+ Notification.notify_later(target_type, self, options)
270
+ end
271
+ alias_method :notify_now, :notify
272
+
252
273
  # Generates notifications to one target.
253
274
  # This method calls NotificationApi#notify_all internally with self notifiable instance.
254
275
  # @see NotificationApi#notify_all
@@ -268,6 +289,27 @@ module ActivityNotification
268
289
  def notify_all(targets, options = {})
269
290
  Notification.notify_all(targets, self, options)
270
291
  end
292
+ alias_method :notify_all_now, :notify_all
293
+
294
+ # Generates notifications to one target later by ActiveJob queue.
295
+ # This method calls NotificationApi#notify_all_later internally with self notifiable instance.
296
+ # @see NotificationApi#notify_all_later
297
+ #
298
+ # @param [Array<Object>] targets Targets to send notifications
299
+ # @param [Hash] options Options for notifications
300
+ # @option options [String] :key (notifiable.default_notification_key) Key of the notification
301
+ # @option options [Object] :group (nil) Group unit of the notifications
302
+ # @option options [ActiveSupport::Duration] :group_expiry_delay (nil) Expiry period of a notification group
303
+ # @option options [Object] :notifier (nil) Notifier of the notifications
304
+ # @option options [Hash] :parameters ({}) Additional parameters of the notifications
305
+ # @option options [Boolean] :send_email (true) Whether it sends notification email
306
+ # @option options [Boolean] :send_later (true) Whether it sends notification email asynchronously
307
+ # @option options [Boolean] :publish_optional_targets (true) Whether it publishes notification to optional targets
308
+ # @option options [Hash<String, Hash>] :optional_targets ({}) Options for optional targets, keys are optional target name (:amazon_sns or :slack etc) and values are options
309
+ # @return [Array<Notificaion>] Array of generated notifications
310
+ def notify_all_later(targets, options = {})
311
+ Notification.notify_all_later(targets, self, options)
312
+ end
271
313
 
272
314
  # Generates notifications to one target.
273
315
  # This method calls NotificationApi#notify_to internally with self notifiable instance.
@@ -288,6 +330,27 @@ module ActivityNotification
288
330
  def notify_to(target, options = {})
289
331
  Notification.notify_to(target, self, options)
290
332
  end
333
+ alias_method :notify_now_to, :notify_to
334
+
335
+ # Generates notifications to one target later by ActiveJob queue.
336
+ # This method calls NotificationApi#notify_later_to internally with self notifiable instance.
337
+ # @see NotificationApi#notify_later_to
338
+ #
339
+ # @param [Object] target Target to send notifications
340
+ # @param [Hash] options Options for notifications
341
+ # @option options [String] :key (notifiable.default_notification_key) Key of the notification
342
+ # @option options [Object] :group (nil) Group unit of the notifications
343
+ # @option options [ActiveSupport::Duration] :group_expiry_delay (nil) Expiry period of a notification group
344
+ # @option options [Object] :notifier (nil) Notifier of the notifications
345
+ # @option options [Hash] :parameters ({}) Additional parameters of the notifications
346
+ # @option options [Boolean] :send_email (true) Whether it sends notification email
347
+ # @option options [Boolean] :send_later (true) Whether it sends notification email asynchronously
348
+ # @option options [Boolean] :publish_optional_targets (true) Whether it publishes notification to optional targets
349
+ # @option options [Hash<String, Hash>] :optional_targets ({}) Options for optional targets, keys are optional target name (:amazon_sns or :slack etc) and values are options
350
+ # @return [Notification] Generated notification instance
351
+ def notify_later_to(target, options = {})
352
+ Notification.notify_later_to(target, self, options)
353
+ end
291
354
 
292
355
  # Returns default key of the notification.
293
356
  # This method is able to be overriden.
@@ -325,10 +325,31 @@ module ActivityNotification
325
325
  # @option options [Boolean] :publish_optional_targets (true) Whether it publishes notification to optional targets
326
326
  # @option options [Hash<String, Hash>] :optional_targets ({}) Options for optional targets, keys are optional target name (:amazon_sns or :slack etc) and values are options
327
327
  # @return [Notification] Generated notification instance
328
- def notify_to(notifiable, options = {})
328
+ def receive_notification_of(notifiable, options = {})
329
329
  Notification.notify_to(self, notifiable, options)
330
330
  end
331
-
331
+ alias_method :receive_notification_now_of, :receive_notification_of
332
+
333
+ # Generates notifications to this target later by ActiveJob queue.
334
+ # This method calls NotificationApi#notify_later_to internally with self target instance.
335
+ # @see NotificationApi#notify_later_to
336
+ #
337
+ # @param [Object] notifiable Notifiable instance to notify
338
+ # @param [Hash] options Options for notifications
339
+ # @option options [String] :key (notifiable.default_notification_key) Key of the notification
340
+ # @option options [Object] :group (nil) Group unit of the notifications
341
+ # @option options [ActiveSupport::Duration] :group_expiry_delay (nil) Expiry period of a notification group
342
+ # @option options [Object] :notifier (nil) Notifier of the notifications
343
+ # @option options [Hash] :parameters ({}) Additional parameters of the notifications
344
+ # @option options [Boolean] :send_email (true) Whether it sends notification email
345
+ # @option options [Boolean] :send_later (true) Whether it sends notification email asynchronously
346
+ # @option options [Boolean] :publish_optional_targets (true) Whether it publishes notification to optional targets
347
+ # @option options [Hash<String, Hash>] :optional_targets ({}) Options for optional targets, keys are optional target name (:amazon_sns or :slack etc) and values are options
348
+ # @return [Notification] Generated notification instance
349
+ def receive_notification_later_of(notifiable, options = {})
350
+ Notification.notify_later_to(self, notifiable, options)
351
+ end
352
+
332
353
  # Opens all notifications of this target.
333
354
  # This method calls NotificationApi#open_all_of internally with self target instance.
334
355
  # @see NotificationApi#open_all_of