Module: ActivityNotification::Target
- Extended by:
- ActiveSupport::Concern
- Includes:
- Association, 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 = {}) ⇒ Hash<Target, 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.
-
.subscription_enabled? ⇒ Boolean
(also: notification_subscription_enabled?)
Returns if subscription management is allowed for this target type.
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?(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>
Returns 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>, Mongoid::Criteria<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>
Returns 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.
-
#subscribes_to_notification?(key, subscribe_as_default = ActivityNotification.config.subscribe_as_default) ⇒ Boolean
Returns if the target subscribes to the notification.
-
#subscribes_to_notification_email?(key, subscribe_as_default = ActivityNotification.config.subscribe_as_default) ⇒ Boolean
(also: #subscribes_to_email?)
Returns if the target subscribes to the notification email.
-
#subscribes_to_optional_target?(key, optional_target_name, subscribe_as_default = ActivityNotification.config.subscribe_as_default) ⇒ Boolean
Returns if the target subscribes to the specified optional target.
-
#subscription_allowed?(key) ⇒ Boolean
(also: #notification_subscription_allowed?)
Returns if subscription management is allowed for the target from configured field or overriden method.
-
#unopened_notification_count(options = {}) ⇒ Integer
Returns count of unopened notifications of the target.
-
#unopened_notification_index(options = {}) ⇒ Array<Notificaion>
Returns 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 Association
belongs_to_polymorphic_xdb_record, filtered_by_association, has_many_polymorphic_xdb_records, has_many_records
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.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/activity_notification/models/concerns/target.rb', line 60 def all_notifications( = {}) reverse = [:reverse] || false with_group_members = [:with_group_members] || false as_latest_group_member = [:as_latest_group_member] || false target_notifications = Notification.filtered_by_target_type(self.name) .all_index!(reverse, with_group_members) .() .with_target case [:filtered_by_status] when :opened, 'opened' target_notifications = target_notifications.opened_only! when :unopened, 'unopened' target_notifications = target_notifications.unopened_only end target_notifications = target_notifications.limit([:limit]) if [:limit].present? as_latest_group_member ? target_notifications.map{ |n| n.latest_group_member } : target_notifications.to_a end |
.available_as_target? ⇒ Boolean
Checks if the model includes target and target methods are available.
30 31 32 |
# File 'lib/activity_notification/models/concerns/target.rb', line 30 def available_as_target? true end |
.notification_index_map(options = {}) ⇒ Hash<Target, Notificaion>
Gets all notifications for this target type grouped by targets.
100 101 102 |
# File 'lib/activity_notification/models/concerns/target.rb', line 100 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.
125 126 127 128 129 130 131 |
# File 'lib/activity_notification/models/concerns/target.rb', line 125 def send_batch_unopened_notification_email( = {}) unopened_notification_index_map = notification_index_map(.merge(filtered_by_status: :unopened)) = .select { |k, _| [:send_later, :fallback, :batch_key].include?(k) } 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.
36 37 38 39 40 41 42 43 44 |
# File 'lib/activity_notification/models/concerns/target.rb', line 36 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_subscription_allowed = ActivityNotification.config.subscription_enabled self._notification_devise_resource = ->(model) { model } self._printable_notification_target_name = :printable_name nil end |
.subscription_enabled? ⇒ Boolean Also known as: notification_subscription_enabled?
Returns if subscription management is allowed for this target type.
135 136 137 |
# File 'lib/activity_notification/models/concerns/target.rb', line 135 def subscription_enabled? _notification_subscription_allowed ? true : false 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.
183 184 185 186 187 188 189 190 191 192 |
# File 'lib/activity_notification/models/concerns/target.rb', line 183 def authenticated_with_devise?(current_resource) devise_resource = resolve_value(_notification_devise_resource) unless current_resource.blank? or current_resource.is_a? devise_resource.class raise TypeError, "Different 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? && current_resource == devise_resource end |
#batch_notification_email_allowed?(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.
164 165 166 |
# File 'lib/activity_notification/models/concerns/target.rb', line 164 def batch_notification_email_allowed?(key) resolve_value(_batch_notification_email_allowed, key) end |
#has_unopened_notifications?(options = {}) ⇒ Boolean
Returns if the target has unopened notifications.
228 229 230 |
# File 'lib/activity_notification/models/concerns/target.rb', line 228 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.
145 146 147 |
# File 'lib/activity_notification/models/concerns/target.rb', line 145 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.
155 156 157 |
# File 'lib/activity_notification/models/concerns/target.rb', line 155 def notification_email_allowed?(notifiable, key) resolve_value(_notification_email_allowed, notifiable, key) end |
#notification_index(options = {}) ⇒ Array<Notificaion>
Is this conbimned array the best solution?
Returns automatically arranged notification index of the target. This method is the typical way to get notification index from controller and view. When the target has unopened notifications, it returns unopened notifications first. Additionaly, it returns opened notifications unless unopened index size overs the limit.
253 254 255 256 257 |
# File 'lib/activity_notification/models/concerns/target.rb', line 253 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.
362 363 364 365 366 |
# File 'lib/activity_notification/models/concerns/target.rb', line 362 def notification_index_with_attributes( = {}) arrange_notification_index(method(:unopened_notification_index_with_attributes), method(:opened_notification_index_with_attributes), ) end |
#notifications ⇒ Array<Notificaion>, Mongoid::Criteria<Notificaion>
Has many notification instances of this target.
13 14 15 16 |
# File 'lib/activity_notification/models/concerns/target.rb', line 13 has_many_records :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.
317 318 319 |
# File 'lib/activity_notification/models/concerns/target.rb', line 317 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.
333 334 335 |
# File 'lib/activity_notification/models/concerns/target.rb', line 333 def open_all_notifications( = {}) Notification.open_all_of(self, ) end |
#opened_notification_index(options = {}) ⇒ Array<Notificaion>
Returns opened notification index of the target.
297 298 299 |
# File 'lib/activity_notification/models/concerns/target.rb', line 297 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.
406 407 408 |
# File 'lib/activity_notification/models/concerns/target.rb', line 406 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.
196 197 198 |
# File 'lib/activity_notification/models/concerns/target.rb', line 196 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.
430 431 432 433 434 435 |
# File 'lib/activity_notification/models/concerns/target.rb', line 430 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.
416 417 418 419 420 |
# File 'lib/activity_notification/models/concerns/target.rb', line 416 def send_notification_email(notification, = {}) if notification.target == self notification.send_notification_email() end end |
#subscribes_to_notification?(key, subscribe_as_default = ActivityNotification.config.subscribe_as_default) ⇒ Boolean
Returns if the target subscribes to the notification. It also returns true when the subscription management is not allowed for the target.
443 444 445 |
# File 'lib/activity_notification/models/concerns/target.rb', line 443 def subscribes_to_notification?(key, subscribe_as_default = ActivityNotification.config.subscribe_as_default) !subscription_allowed?(key) || _subscribes_to_notification?(key, subscribe_as_default) end |
#subscribes_to_notification_email?(key, subscribe_as_default = ActivityNotification.config.subscribe_as_default) ⇒ Boolean Also known as: subscribes_to_email?
Returns if the target subscribes to the notification email. It also returns true when the subscription management is not allowed for the target.
453 454 455 |
# File 'lib/activity_notification/models/concerns/target.rb', line 453 def subscribes_to_notification_email?(key, subscribe_as_default = ActivityNotification.config.subscribe_as_default) !subscription_allowed?(key) || _subscribes_to_notification_email?(key, subscribe_as_default) end |
#subscribes_to_optional_target?(key, optional_target_name, subscribe_as_default = ActivityNotification.config.subscribe_as_default) ⇒ Boolean
Returns if the target subscribes to the specified optional target. It also returns true when the subscription management is not allowed for the target.
465 466 467 |
# File 'lib/activity_notification/models/concerns/target.rb', line 465 def subscribes_to_optional_target?(key, optional_target_name, subscribe_as_default = ActivityNotification.config.subscribe_as_default) !subscription_allowed?(key) || _subscribes_to_optional_target?(key, optional_target_name, subscribe_as_default) end |
#subscription_allowed?(key) ⇒ Boolean Also known as: notification_subscription_allowed?
Returns if subscription management is allowed for the target from configured field or overriden method. This method is able to be overriden.
173 174 175 |
# File 'lib/activity_notification/models/concerns/target.rb', line 173 def subscription_allowed?(key) resolve_value(_notification_subscription_allowed, key) end |
#unopened_notification_count(options = {}) ⇒ Integer
Returns count of unopened notifications of the target.
212 213 214 215 |
# File 'lib/activity_notification/models/concerns/target.rb', line 212 def unopened_notification_count( = {}) target_notifications = _unopened_notification_index() target_notifications.present? ? target_notifications.count : 0 end |
#unopened_notification_index(options = {}) ⇒ Array<Notificaion>
Returns unopened notification index of the target.
276 277 278 |
# File 'lib/activity_notification/models/concerns/target.rb', line 276 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.
385 386 387 |
# File 'lib/activity_notification/models/concerns/target.rb', line 385 def unopened_notification_index_with_attributes( = {}) include_attributes _unopened_notification_index() end |