Module: ActivityNotification::Target
- Extended by:
- ActiveSupport::Concern
- Includes:
- Common
- Defined in:
- lib/activity_notification/models/concerns/target.rb
Overview
Target implementation included in target model to notify, like users or administrators.
Class Method Summary collapse
-
.all_notifications(options = {}) ⇒ Array<Notificaion>
Gets all notifications for this target type.
-
.available_as_target? ⇒ Boolean
Checks if the model includes target and target methods are available.
-
.notification_index_map(options = {}) ⇒ Array<Notificaion>
Gets all notifications for this target type grouped by targets.
-
.send_batch_unopened_notification_email(options = {}) ⇒ Hash<Object, Mail::Message|ActionMailer::DeliveryJob>
Send batch notification email to this type targets with unopened notifications.
-
.set_target_class_defaults ⇒ NilClass
Sets default values to target class fields.
-
.unopened_notification_index_map(options = {}) ⇒ Array<Notificaion>
Gets all unopened notifications for this target type grouped by targets.
Instance Method Summary collapse
-
#authenticated_with_devise?(current_resource) ⇒ Boolean
Returns if current resource signed in with Devise is authenticated for the notification.
-
#batch_notification_email_allowed?(notifiable_type, key) ⇒ Boolean
Returns if sending batch notification email is allowed for the target from configured field or overriden method.
-
#has_unopened_notifications?(options = {}) ⇒ Boolean
Returns if the target has unopened notifications.
-
#mailer_to ⇒ String
Returns target email address for email notification.
-
#notification_email_allowed?(notifiable, key) ⇒ Boolean
Returns if sending notification email is allowed for the target from configured field or overriden method.
-
#notification_index(options = {}) ⇒ Array<Notificaion>
Gets automatically arranged notification index of the target.
-
#notification_index_with_attributes(options = {}) ⇒ Array<Notificaion>
Gets automatically arranged notification index of the target with included attributes like target, notifiable, group and notifier.
-
#notifications ⇒ Array<Notificaion>
Has many notification instances of this target.
-
#notify_to(notifiable, options = {}) ⇒ Notification
Generates notifications to this target.
-
#open_all_notifications(options = {}) ⇒ Integer
Opens all notifications of this target.
-
#opened_notification_index(options = {}) ⇒ Array<Notificaion>
Gets opened notification index of the target.
-
#opened_notification_index_with_attributes(options = {}) ⇒ Array<Notificaion>
Gets opened notification index of the target with including attributes like target, notifiable, group and notifier.
-
#printable_target_name ⇒ String
Returns printable target model name to show in view or email.
-
#send_batch_notification_email(notifications, options = {}) ⇒ Mail::Message|ActionMailer::DeliveryJob|NilClass
Sends batch notification email to the target.
-
#send_notification_email(notification, options = {}) ⇒ Mail::Message|ActionMailer::DeliveryJob
Sends notification email to the target.
-
#unopened_notification_count(options = {}) ⇒ Integer
Returns count of unopened notifications of the target.
-
#unopened_notification_index(options = {}) ⇒ Array<Notificaion>
Gets unopened notification index of the target.
-
#unopened_notification_index_with_attributes(options = {}) ⇒ Array<Notificaion>
Gets unopened notification index of the target with included attributes like target, notifiable, group and notifier.
Methods included from Common
#printable_name, #printable_type, #resolve_value, #to_class_name, #to_resource_name, #to_resources_name
Class Method Details
.all_notifications(options = {}) ⇒ Array<Notificaion>
Gets all notifications for this target type.
55 56 57 58 59 60 61 62 |
# File 'lib/activity_notification/models/concerns/target.rb', line 55 def all_notifications( = {}) reverse = [:reverse] || false with_group_members = [:with_group_members] || false target_notifications = Notification.filtered_by_target_type(self.name) .all_index!(reverse, with_group_members) .() [:limit].present? ? target_notifications.limit([:limit]) : target_notifications end |
.available_as_target? ⇒ Boolean
Checks if the model includes target and target methods are available.
27 28 29 |
# File 'lib/activity_notification/models/concerns/target.rb', line 27 def available_as_target? true end |
.notification_index_map(options = {}) ⇒ Array<Notificaion>
Gets all notifications for this target type grouped by targets.
83 84 85 |
# File 'lib/activity_notification/models/concerns/target.rb', line 83 def notification_index_map( = {}) all_notifications().group_by(&:target) end |
.send_batch_unopened_notification_email(options = {}) ⇒ Hash<Object, Mail::Message|ActionMailer::DeliveryJob>
Send batch notification email to this type targets with unopened notifications.
128 129 130 131 132 133 |
# File 'lib/activity_notification/models/concerns/target.rb', line 128 def send_batch_unopened_notification_email( = {}) unopened_notification_index_map = unopened_notification_index_map() unopened_notification_index_map.map { |target, notifications| [target, Notification.send_batch_notification_email(target, notifications, )] }.to_h end |
.set_target_class_defaults ⇒ NilClass
Sets default values to target class fields.
33 34 35 36 37 38 39 40 |
# File 'lib/activity_notification/models/concerns/target.rb', line 33 def set_target_class_defaults self._notification_email = nil self._notification_email_allowed = ActivityNotification.config.email_enabled self._batch_notification_email_allowed = ActivityNotification.config.email_enabled self._notification_devise_resource = ->(model) { model } self._printable_notification_target_name = :printable_name nil end |
.unopened_notification_index_map(options = {}) ⇒ Array<Notificaion>
Gets all unopened notifications for this target type grouped by targets.
106 107 108 |
# File 'lib/activity_notification/models/concerns/target.rb', line 106 def unopened_notification_index_map( = {}) all_notifications().unopened_only.group_by(&:target) end |
Instance Method Details
#authenticated_with_devise?(current_resource) ⇒ Boolean
Returns if current resource signed in with Devise is authenticated for the notification. This method is able to be overriden.
169 170 171 172 173 174 175 176 177 178 |
# File 'lib/activity_notification/models/concerns/target.rb', line 169 def authenticated_with_devise?(current_resource) devise_resource = resolve_value(_notification_devise_resource) unless current_resource.blank? or current_resource.instance_of? devise_resource.class raise TypeError, "Defferent type of current resource #{current_resource.class} "\ "with devise resource #{devise_resource.class} has been passed to #{self.class}##{__method__}. "\ "You have to override #{self.class}##{__method__} method or set devise_resource in acts_as_target." end current_resource.present? and current_resource == devise_resource end |
#batch_notification_email_allowed?(notifiable_type, key) ⇒ Boolean
Returns if sending batch notification email is allowed for the target from configured field or overriden method. This method is able to be overriden.
160 161 162 |
# File 'lib/activity_notification/models/concerns/target.rb', line 160 def batch_notification_email_allowed?(notifiable_type, key) resolve_value(_batch_notification_email_allowed, notifiable_type, key) end |
#has_unopened_notifications?(options = {}) ⇒ Boolean
Returns if the target has unopened notifications.
214 215 216 |
# File 'lib/activity_notification/models/concerns/target.rb', line 214 def has_unopened_notifications?( = {}) _unopened_notification_index().present? end |
#mailer_to ⇒ String
Returns target email address for email notification. This method is able to be overriden.
140 141 142 |
# File 'lib/activity_notification/models/concerns/target.rb', line 140 def mailer_to resolve_value(_notification_email) end |
#notification_email_allowed?(notifiable, key) ⇒ Boolean
Returns if sending notification email is allowed for the target from configured field or overriden method. This method is able to be overriden.
150 151 152 |
# File 'lib/activity_notification/models/concerns/target.rb', line 150 def notification_email_allowed?(notifiable, key) resolve_value(_notification_email_allowed, notifiable, key) end |
#notification_index(options = {}) ⇒ Array<Notificaion>
Is this switching the best solution?
Gets automatically arranged notification index of the target. This method is the typical way to get notifications index from controller of view. When the target have unopened notifications, it returns unopened notifications first. Additionaly, it returns opened notifications unless unopened index size overs the limit.
239 240 241 242 243 |
# File 'lib/activity_notification/models/concerns/target.rb', line 239 def notification_index( = {}) arrange_notification_index(method(:unopened_notification_index), method(:opened_notification_index), ) end |
#notification_index_with_attributes(options = {}) ⇒ Array<Notificaion>
Is this switching the best solution?
Gets automatically arranged notification index of the target with included attributes like target, notifiable, group and notifier. This method is the typical way to get notifications index from controller of view. When the target have unopened notifications, it returns unopened notifications first. Additionaly, it returns opened notifications unless unopened index size overs the limit.
345 346 347 348 349 |
# File 'lib/activity_notification/models/concerns/target.rb', line 345 def notification_index_with_attributes( = {}) arrange_notification_index(method(:unopened_notification_index_with_attributes), method(:opened_notification_index_with_attributes), ) end |
#notifications ⇒ Array<Notificaion>
Has many notification instances of this target.
11 12 13 14 |
# File 'lib/activity_notification/models/concerns/target.rb', line 11 has_many :notifications, class_name: "::ActivityNotification::Notification", as: :target, dependent: :delete_all |
#notify_to(notifiable, options = {}) ⇒ Notification
Generates notifications to this target. This method calls NotificationApi#notify_to internally with self target instance.
300 301 302 |
# File 'lib/activity_notification/models/concerns/target.rb', line 300 def notify_to(notifiable, = {}) Notification.notify_to(self, notifiable, ) end |
#open_all_notifications(options = {}) ⇒ Integer
Opens all notifications of this target. This method calls NotificationApi#open_all_of internally with self target instance.
316 317 318 |
# File 'lib/activity_notification/models/concerns/target.rb', line 316 def open_all_notifications( = {}) Notification.open_all_of(self, ) end |
#opened_notification_index(options = {}) ⇒ Array<Notificaion>
Gets opened notification index of the target.
283 284 285 |
# File 'lib/activity_notification/models/concerns/target.rb', line 283 def opened_notification_index( = {}) arrange_single_notification_index(method(:_opened_notification_index), ) end |
#opened_notification_index_with_attributes(options = {}) ⇒ Array<Notificaion>
Gets opened notification index of the target with including attributes like target, notifiable, group and notifier.
389 390 391 |
# File 'lib/activity_notification/models/concerns/target.rb', line 389 def opened_notification_index_with_attributes( = {}) include_attributes _opened_notification_index() end |
#printable_target_name ⇒ String
Returns printable target model name to show in view or email.
182 183 184 |
# File 'lib/activity_notification/models/concerns/target.rb', line 182 def printable_target_name resolve_value(_printable_notification_target_name) end |
#send_batch_notification_email(notifications, options = {}) ⇒ Mail::Message|ActionMailer::DeliveryJob|NilClass
Sends batch notification email to the target.
413 414 415 416 417 418 |
# File 'lib/activity_notification/models/concerns/target.rb', line 413 def send_batch_notification_email(notifications, = {}) return if notifications.blank? if notifications.map{ |n| n.target }.uniq == [self] Notification.send_batch_notification_email(self, notifications, ) end end |
#send_notification_email(notification, options = {}) ⇒ Mail::Message|ActionMailer::DeliveryJob
Sends notification email to the target.
399 400 401 402 403 |
# File 'lib/activity_notification/models/concerns/target.rb', line 399 def send_notification_email(notification, = {}) if notification.target == self notification.send_notification_email() end end |
#unopened_notification_count(options = {}) ⇒ Integer
Returns count of unopened notifications of the target.
198 199 200 201 |
# File 'lib/activity_notification/models/concerns/target.rb', line 198 def unopened_notification_count( = {}) target_notifications = _unopened_notification_index() target_notifications.present? ? target_notifications.count : 0 end |
#unopened_notification_index(options = {}) ⇒ Array<Notificaion>
Gets unopened notification index of the target.
262 263 264 |
# File 'lib/activity_notification/models/concerns/target.rb', line 262 def unopened_notification_index( = {}) arrange_single_notification_index(method(:_unopened_notification_index), ) end |
#unopened_notification_index_with_attributes(options = {}) ⇒ Array<Notificaion>
Gets unopened notification index of the target with included attributes like target, notifiable, group and notifier.
368 369 370 |
# File 'lib/activity_notification/models/concerns/target.rb', line 368 def unopened_notification_index_with_attributes( = {}) include_attributes _unopened_notification_index() end |