Module: ActivityNotification::NotificationApi
- Extended by:
- ActiveSupport::Concern
- Included in:
- ORM::ActiveRecord::Notification, ORM::Dynamoid::Notification, ORM::Mongoid::Notification
- Defined in:
- lib/activity_notification/apis/notification_api.rb
Overview
Defines API for notification included in Notification model.
Class Method Summary collapse
-
.all_index! ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Selects all notification index.
-
.available_options ⇒ Array<Notificaion>
Returns available options for kinds of notify methods.
-
.earliest ⇒ Notification
Returns earliest notification instance.
-
.earliest! ⇒ Notification
Returns earliest notification instance.
-
.filtered_by_key ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Selects filtered notifications by key.
-
.filtered_by_options ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Selects filtered notifications by notifiable_type, group or key with filter options.
-
.filtered_by_target_type ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Selects filtered notifications by target_type.
-
.filtered_by_type ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Selects filtered notifications by notifiable_type.
-
.generate_notification(target, notifiable, options = {}) ⇒ Object
Generates a notification.
-
.group_member_exists?(notifications) ⇒ Boolean
Returns if group member of the notifications exists.
-
.latest ⇒ Notification
Returns latest notification instance.
-
.latest! ⇒ Notification
Returns latest notification instance.
-
.notify(target_type, notifiable, options = {}) ⇒ Array<Notificaion>
(also: notify_now)
Generates notifications to configured targets with notifiable model.
-
.notify_all(targets, notifiable, options = {}) ⇒ Array<Notificaion>
(also: notify_all_now)
Generates notifications to specified targets.
-
.notify_all_later(targets, notifiable, options = {}) ⇒ Array<Notificaion>
Generates notifications to specified targets later by ActiveJob queue.
-
.notify_later(target_type, notifiable, options = {}) ⇒ Array<Notificaion>
Generates notifications to configured targets with notifiable model later by ActiveJob queue.
-
.notify_later_to(target, notifiable, options = {}) ⇒ Notification
Generates notifications to one target later by ActiveJob queue.
-
.notify_to(target, notifiable, options = {}) ⇒ Notification
(also: notify_now_to)
Generates notifications to one target.
-
.open_all_of(target, options = {}) ⇒ Integer
Opens all notifications of the target.
-
.opened_index ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Selects unopened notification index.
-
.send_batch_notification_email(target, notifications, options = {}) ⇒ Mail::Message, ActionMailer::DeliveryJob|NilClass
Sends batch notification email to the target.
-
.set_notification_mailer ⇒ Object
Defines mailer class to send notification.
-
.uniq_keys ⇒ Array<String>
Selects unique keys from query for notifications.
-
.unopened_index ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Selects unopened notification index.
-
.valid_group_owner(target, notifiable, key, group, group_expiry_delay) ⇒ Notificaion
Returns valid group owner within the expiration period.
Instance Method Summary collapse
-
#broadcast_to_action_cable_channel(params = {}) ⇒ Object
Broadcast to ActionCable subscribers Do nothing with Rails < 5.0.
-
#earliest_order ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Orders by earliest (older) first as created_at: :asc.
-
#earliest_order! ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Orders by earliest (older) first as created_at: :asc.
-
#email_subscribed? ⇒ Boolean
Returns if the target subscribes this notification email.
-
#group_member? ⇒ Boolean
Returns if the notification is group member belonging to owner.
-
#group_member_count(limit = ActivityNotification.config.opened_index_limit) ⇒ Integer
Returns count of group members of the notification.
-
#group_member_exists?(limit = ActivityNotification.config.opened_index_limit) ⇒ Boolean
Returns if group member of the notification exists.
-
#group_member_notifier_count(limit = ActivityNotification.config.opened_index_limit) ⇒ Integer
Returns count of group member notifiers of the notification not including group owner notifier.
-
#group_member_notifier_exists?(limit = ActivityNotification.config.opened_index_limit) ⇒ Boolean
Returns if group member notifier except group owner notifier exists.
-
#group_notification_count(limit = ActivityNotification.config.opened_index_limit) ⇒ Integer
Returns count of group notifications including owner and members.
-
#group_notifier_count(limit = ActivityNotification.config.opened_index_limit) ⇒ Integer
Returns count of group member notifiers including group owner notifier.
-
#group_owner? ⇒ Boolean
Returns if the notification is group owner.
-
#latest_group_member ⇒ Notificaion
Returns the latest group member notification instance of this notification.
-
#latest_order ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Orders by latest (newest) first as created_at: :desc.
-
#latest_order! ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Orders by latest (newest) first as created_at: :desc.
-
#notifiable_path ⇒ String
Returns notifiable_path to move after opening notification with notifiable.notifiable_path.
-
#open!(options = {}) ⇒ Integer
Opens the notification.
-
#opened? ⇒ Boolean
Returns if the notification is opened.
-
#optional_target_names ⇒ Array<Symbol>
Returns optional_target names of the notification from configured field or overridden method.
-
#optional_target_subscribed?(optional_target_name) ⇒ Boolean
Returns if the target subscribes this notification email.
-
#optional_targets ⇒ Array<ActivityNotification::OptionalTarget::Base>
Returns optional_targets of the notification from configured field or overridden method.
-
#prepare_to_store ⇒ Object
Returns prepared notification object to store.
-
#publish_to_optional_targets(options = {}) ⇒ Hash
Publishes notification to the optional targets.
-
#remove_from_group ⇒ Notificaion
Remove from notification group and make a new group owner.
-
#send_notification_email(options = {}) ⇒ Mail::Message, ActionMailer::DeliveryJob
Sends notification email to the target.
-
#subscribed? ⇒ Boolean
Returns if the target subscribes this notification.
-
#unopened? ⇒ Boolean
Returns if the notification is unopened.
Class Method Details
.all_index! ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Selects all notification index. ActivityNotification::Notification.all_index! is defined same as ActivityNotification::Notification.group_owners_only.latest_order
29 30 31 32 |
# File 'lib/activity_notification/apis/notification_api.rb', line 29 scope :all_index!, ->(reverse = false, with_group_members = false) { target_index = with_group_members ? self : group_owners_only reverse ? target_index.earliest_order : target_index.latest_order } |
.available_options ⇒ Array<Notificaion>
Returns available options for kinds of notify methods.
472 473 474 |
# File 'lib/activity_notification/apis/notification_api.rb', line 472 def [:key, :group, :group_expiry_delay, :notifier, :parameters, :send_email, :send_later].freeze end |
.earliest ⇒ Notification
Returns earliest notification instance.
162 163 164 |
# File 'lib/activity_notification/apis/notification_api.rb', line 162 def self.earliest earliest_order.first end |
.earliest! ⇒ Notification
Returns earliest notification instance. This method is to be overridden in implementation for each ORM.
176 177 178 |
# File 'lib/activity_notification/apis/notification_api.rb', line 176 def self.earliest! earliest end |
.filtered_by_key ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Selects filtered notifications by key.
89 |
# File 'lib/activity_notification/apis/notification_api.rb', line 89 scope :filtered_by_key, ->(key) { where(key: key) } |
.filtered_by_options ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Selects filtered notifications by notifiable_type, group or key with filter options.
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/activity_notification/apis/notification_api.rb', line 113 scope :filtered_by_options, ->( = {}) { = ActivityNotification.cast_to_indifferent_hash() filtered_notifications = all if .has_key?(:filtered_by_type) filtered_notifications = filtered_notifications.filtered_by_type([:filtered_by_type]) end if .has_key?(:filtered_by_group) filtered_notifications = filtered_notifications.filtered_by_group([:filtered_by_group]) end if .has_key?(:filtered_by_group_type) && .has_key?(:filtered_by_group_id) filtered_notifications = filtered_notifications .where(group_type: [:filtered_by_group_type], group_id: [:filtered_by_group_id]) end if .has_key?(:filtered_by_key) filtered_notifications = filtered_notifications.filtered_by_key([:filtered_by_key]) end if .has_key?(:custom_filter) filtered_notifications = filtered_notifications.where([:custom_filter]) end filtered_notifications } |
.filtered_by_target_type ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Selects filtered notifications by target_type.
73 |
# File 'lib/activity_notification/apis/notification_api.rb', line 73 scope :filtered_by_target_type, ->(target_type) { where(target_type: target_type) } |
.filtered_by_type ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Selects filtered notifications by notifiable_type.
81 |
# File 'lib/activity_notification/apis/notification_api.rb', line 81 scope :filtered_by_type, ->(notifiable_type) { where(notifiable_type: notifiable_type) } |
.generate_notification(target, notifiable, options = {}) ⇒ Object
Generates a notification
411 412 413 414 415 416 417 |
# File 'lib/activity_notification/apis/notification_api.rb', line 411 def generate_notification(target, notifiable, = {}) key = [:key] || notifiable.default_notification_key if target.subscribes_to_notification?(key) # Store notification notification = store_notification(target, notifiable, key, ) end end |
.group_member_exists?(notifications) ⇒ Boolean
Returns if group member of the notifications exists. This method is designed to be called from controllers or views to avoid N+1.
444 445 446 |
# File 'lib/activity_notification/apis/notification_api.rb', line 444 def group_member_exists?(notifications) notifications.present? and group_members_of_owner_ids_only(notifications.map(&:id)).exists? end |
.latest ⇒ Notification
Returns latest notification instance.
156 157 158 |
# File 'lib/activity_notification/apis/notification_api.rb', line 156 def self.latest latest_order.first end |
.latest! ⇒ Notification
Returns latest notification instance. This method is to be overridden in implementation for each ORM.
169 170 171 |
# File 'lib/activity_notification/apis/notification_api.rb', line 169 def self.latest! latest end |
.notify(target_type, notifiable, options = {}) ⇒ Array<Notificaion> Also known as: notify_now
Generates notifications to configured targets with notifiable model.
226 227 228 229 230 231 232 233 234 235 |
# File 'lib/activity_notification/apis/notification_api.rb', line 226 def notify(target_type, notifiable, = {}) if [:notify_later] notify_later(target_type, notifiable, ) else targets = notifiable.notification_targets(target_type, [:pass_full_options] ? : [:key]) unless targets.blank? notify_all(targets, notifiable, ) end end end |
.notify_all(targets, notifiable, options = {}) ⇒ Array<Notificaion> Also known as: notify_all_now
Generates notifications to specified targets.
293 294 295 296 297 298 299 |
# File 'lib/activity_notification/apis/notification_api.rb', line 293 def notify_all(targets, notifiable, = {}) if [:notify_later] notify_all_later(targets, notifiable, ) else targets.map { |target| notify_to(target, notifiable, ) } end end |
.notify_all_later(targets, notifiable, options = {}) ⇒ Array<Notificaion>
Generates notifications to specified targets later by ActiveJob queue.
322 323 324 325 |
# File 'lib/activity_notification/apis/notification_api.rb', line 322 def notify_all_later(targets, notifiable, = {}) .delete(:notify_later) ActivityNotification::NotifyAllJob.perform_later(targets, notifiable, ) end |
.notify_later(target_type, notifiable, options = {}) ⇒ Array<Notificaion>
Generates notifications to configured targets with notifiable model later by ActiveJob queue.
266 267 268 269 270 |
# File 'lib/activity_notification/apis/notification_api.rb', line 266 def notify_later(target_type, notifiable, = {}) target_type = target_type.to_s if target_type.is_a? Symbol .delete(:notify_later) ActivityNotification::NotifyJob.perform_later(target_type, notifiable, ) end |
.notify_later_to(target, notifiable, options = {}) ⇒ Notification
Generates notifications to one target later by ActiveJob queue.
398 399 400 401 |
# File 'lib/activity_notification/apis/notification_api.rb', line 398 def notify_later_to(target, notifiable, = {}) .delete(:notify_later) ActivityNotification::NotifyToJob.perform_later(target, notifiable, ) end |
.notify_to(target, notifiable, options = {}) ⇒ Notification Also known as: notify_now_to
Generates notifications to one target.
348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 |
# File 'lib/activity_notification/apis/notification_api.rb', line 348 def notify_to(target, notifiable, = {}) if [:notify_later] notify_later_to(target, notifiable, ) else send_email = .has_key?(:send_email) ? [:send_email] : true send_later = .has_key?(:send_later) ? [:send_later] : true broadcast_action_cable = .has_key?(:broadcast_action_cable) ? [:broadcast_action_cable] : true publish_optional_targets = .has_key?(:publish_optional_targets) ? [:publish_optional_targets] : true # Generate notification notification = generate_notification(target, notifiable, ) # Send notification email if notification.present? && send_email notification.send_notification_email({ send_later: send_later }) end # Broadcast to ActionCable subscribers if notification.present? && broadcast_action_cable = [:action_cable_rendering] || {} [:fallback] = [:fallback] || :default notification.broadcast_to_action_cable_channel() end # Publish to optional targets if notification.present? && publish_optional_targets notification.publish_to_optional_targets([:optional_targets] || {}) end # Return generated notification notification end end |
.open_all_of(target, options = {}) ⇒ Integer
Add filter option
Opens all notifications of the target.
431 432 433 434 435 436 437 |
# File 'lib/activity_notification/apis/notification_api.rb', line 431 def open_all_of(target, = {}) opened_at = [:opened_at] || Time.current target_unopened_notifications = target.notifications.unopened_only.() unopened_notification_count = target_unopened_notifications.count target_unopened_notifications.update_all(opened_at: opened_at) unopened_notification_count end |
.opened_index ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Selects unopened notification index. ActivityNotification::Notification.opened_index(limit) is defined same as ActivityNotification::Notification.opened_only(limit).group_owners_only.latest_order
62 63 64 65 |
# File 'lib/activity_notification/apis/notification_api.rb', line 62 scope :opened_index, ->(limit, reverse = false, with_group_members = false) { target_index = with_group_members ? opened_only(limit) : opened_only(limit).group_owners_only reverse ? target_index.earliest_order : target_index.latest_order } |
.send_batch_notification_email(target, notifications, options = {}) ⇒ Mail::Message, ActionMailer::DeliveryJob|NilClass
Sends batch notification email to the target.
457 458 459 460 461 462 463 464 465 466 467 |
# File 'lib/activity_notification/apis/notification_api.rb', line 457 def send_batch_notification_email(target, notifications, = {}) notifications.blank? and return batch_key = [:batch_key] || notifications.first.key if target.batch_notification_email_allowed?(batch_key) && target.subscribes_to_notification_email?(batch_key) send_later = .has_key?(:send_later) ? [:send_later] : true send_later ? @@notification_mailer.send_batch_notification_email(target, notifications, batch_key, ).deliver_later : @@notification_mailer.send_batch_notification_email(target, notifications, batch_key, ).deliver_now end end |
.set_notification_mailer ⇒ Object
Defines mailer class to send notification
477 478 479 |
# File 'lib/activity_notification/apis/notification_api.rb', line 477 def set_notification_mailer @@notification_mailer = ActivityNotification.config.mailer.constantize end |
.uniq_keys ⇒ Array<String>
Selects unique keys from query for notifications.
182 183 184 185 186 187 188 |
# File 'lib/activity_notification/apis/notification_api.rb', line 182 def self.uniq_keys ## select method cannot be chained with order by other columns like created_at # select(:key).distinct.pluck(:key) ## distinct method cannot keep original sort # distinct(:key) pluck(:key).uniq end |
.unopened_index ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Selects unopened notification index. ActivityNotification::Notification.unopened_index is defined same as ActivityNotification::Notification.unopened_only.group_owners_only.latest_order
45 46 47 48 |
# File 'lib/activity_notification/apis/notification_api.rb', line 45 scope :unopened_index, ->(reverse = false, with_group_members = false) { target_index = with_group_members ? unopened_only : unopened_only.group_owners_only reverse ? target_index.earliest_order : target_index.latest_order } |
.valid_group_owner(target, notifiable, key, group, group_expiry_delay) ⇒ Notificaion
Returns valid group owner within the expiration period
489 490 491 492 493 494 495 496 497 498 |
# File 'lib/activity_notification/apis/notification_api.rb', line 489 def valid_group_owner(target, notifiable, key, group, group_expiry_delay) return nil if group.blank? # Bundle notification group by target, notifiable_type, group and key # Different notifiable.id can be made in a same group group_owner_notifications = filtered_by_target(target).filtered_by_type(notifiable.to_class_name).filtered_by_key(key) .filtered_by_group(group).group_owners_only.unopened_only group_expiry_delay.present? ? group_owner_notifications.within_expiration_only(group_expiry_delay).earliest : group_owner_notifications.earliest end |
Instance Method Details
#broadcast_to_action_cable_channel(params = {}) ⇒ Object
Broadcast to ActionCable subscribers Do nothing with Rails < 5.0
563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 |
# File 'lib/activity_notification/apis/notification_api.rb', line 563 def broadcast_to_action_cable_channel(params = {}) if target.notification_action_cable_allowed?(notifiable, key) && notifiable.notification_action_cable_allowed?(target, key) target_channel_name = "#{ActivityNotification.config.notification_channel_prefix}_#{target_type}#{ActivityNotification.config.composite_key_delimiter}#{target_id}" = params.slice(:filter, :limit, :without_grouping, :with_group_members, :filtered_by_type, :filtered_by_group_type, :filtered_by_group_id, :filtered_by_key) ActionCable.server.broadcast(target_channel_name, id: id, view: render(ActivityNotification::NotificationsController.renderer, params), text: text(params), notifiable_path: notifiable_path, group_owner_id: group_owner_id, group_owner_view: group_owner? ? nil : group_owner.render(ActivityNotification::NotificationsController.renderer, params), unopened_notification_count: target.unopened_notification_count() ) end end |
#earliest_order ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Orders by earliest (older) first as created_at: :asc.
141 |
# File 'lib/activity_notification/apis/notification_api.rb', line 141 scope :earliest_order, -> { order(created_at: :asc) } |
#earliest_order! ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Orders by earliest (older) first as created_at: :asc. This method is to be overridden in implementation for each ORM.
152 |
# File 'lib/activity_notification/apis/notification_api.rb', line 152 scope :earliest_order!, -> { earliest_order } |
#email_subscribed? ⇒ Boolean
Returns if the target subscribes this notification email.
756 757 758 |
# File 'lib/activity_notification/apis/notification_api.rb', line 756 def email_subscribed? target.subscribes_to_notification_email?(key) end |
#group_member? ⇒ Boolean
Returns if the notification is group member belonging to owner.
655 656 657 |
# File 'lib/activity_notification/apis/notification_api.rb', line 655 def group_member? group_owner_id.present? end |
#group_member_count(limit = ActivityNotification.config.opened_index_limit) ⇒ Integer
Returns count of group members of the notification. This method is designed to cache group by query result to avoid N+1 call.
684 685 686 |
# File 'lib/activity_notification/apis/notification_api.rb', line 684 def group_member_count(limit = ActivityNotification.config.opened_index_limit) (:opened_group_member_count, :unopened_group_member_count, limit) end |
#group_member_exists?(limit = ActivityNotification.config.opened_index_limit) ⇒ Boolean
Returns if group member of the notification exists. This method is designed to cache group by query result to avoid N+1 call.
664 665 666 |
# File 'lib/activity_notification/apis/notification_api.rb', line 664 def group_member_exists?(limit = ActivityNotification.config.opened_index_limit) group_member_count(limit) > 0 end |
#group_member_notifier_count(limit = ActivityNotification.config.opened_index_limit) ⇒ Integer
Returns count of group member notifiers of the notification not including group owner notifier. It always returns 0 if group owner notifier is blank. It counts only the member notifier of the same type with group owner notifier. This method is designed to cache group by query result to avoid N+1 call.
704 705 706 |
# File 'lib/activity_notification/apis/notification_api.rb', line 704 def group_member_notifier_count(limit = ActivityNotification.config.opened_index_limit) (:opened_group_member_notifier_count, :unopened_group_member_notifier_count, limit) end |
#group_member_notifier_exists?(limit = ActivityNotification.config.opened_index_limit) ⇒ Boolean
Returns if group member notifier except group owner notifier exists. It always returns false if group owner notifier is blank. It counts only the member notifier of the same type with group owner notifier. This method is designed to cache group by query result to avoid N+1 call.
675 676 677 |
# File 'lib/activity_notification/apis/notification_api.rb', line 675 def group_member_notifier_exists?(limit = ActivityNotification.config.opened_index_limit) group_member_notifier_count(limit) > 0 end |
#group_notification_count(limit = ActivityNotification.config.opened_index_limit) ⇒ Integer
Returns count of group notifications including owner and members. This method is designed to cache group by query result to avoid N+1 call.
693 694 695 |
# File 'lib/activity_notification/apis/notification_api.rb', line 693 def group_notification_count(limit = ActivityNotification.config.opened_index_limit) group_member_count(limit) + 1 end |
#group_notifier_count(limit = ActivityNotification.config.opened_index_limit) ⇒ Integer
Returns count of group member notifiers including group owner notifier. It always returns 0 if group owner notifier is blank. This method is designed to cache group by query result to avoid N+1 call.
714 715 716 717 |
# File 'lib/activity_notification/apis/notification_api.rb', line 714 def group_notifier_count(limit = ActivityNotification.config.opened_index_limit) notification = group_member? && group_owner.present? ? group_owner : self notification.notifier.present? ? group_member_notifier_count(limit) + 1 : 0 end |
#group_owner? ⇒ Boolean
Returns if the notification is group owner.
648 649 650 |
# File 'lib/activity_notification/apis/notification_api.rb', line 648 def group_owner? !group_member? end |
#latest_group_member ⇒ Notificaion
Returns the latest group member notification instance of this notification. If this group owner has no group members, group owner instance self will be returned.
723 724 725 726 |
# File 'lib/activity_notification/apis/notification_api.rb', line 723 def latest_group_member notification = group_member? && group_owner.present? ? group_owner : self notification.group_member_exists? ? notification.group_members.latest : self end |
#latest_order ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Orders by latest (newest) first as created_at: :desc.
137 |
# File 'lib/activity_notification/apis/notification_api.rb', line 137 scope :latest_order, -> { order(created_at: :desc) } |
#latest_order! ⇒ ActiveRecord_AssociationRelation<Notificaion>, Mongoid::Criteria<Notificaion>
Orders by latest (newest) first as created_at: :desc. This method is to be overridden in implementation for each ORM.
147 |
# File 'lib/activity_notification/apis/notification_api.rb', line 147 scope :latest_order!, ->(reverse = false) { reverse ? earliest_order : latest_order } |
#notifiable_path ⇒ String
Returns notifiable_path to move after opening notification with notifiable.notifiable_path.
743 744 745 746 |
# File 'lib/activity_notification/apis/notification_api.rb', line 743 def notifiable_path notifiable.present? or raise ActiveRecord::RecordNotFound.new("Couldn't find notifiable #{notifiable_type}") notifiable.notifiable_path(target_type, key) end |
#open!(options = {}) ⇒ Integer
Opens the notification.
621 622 623 624 625 626 627 628 629 |
# File 'lib/activity_notification/apis/notification_api.rb', line 621 def open!( = {}) opened? and return 0 opened_at = [:opened_at] || Time.current with_members = .has_key?(:with_members) ? [:with_members] : true unopened_member_count = with_members ? group_members.unopened_only.count : 0 group_members.update_all(opened_at: opened_at) if with_members update(opened_at: opened_at) unopened_member_count + 1 end |
#opened? ⇒ Boolean
Returns if the notification is opened.
641 642 643 |
# File 'lib/activity_notification/apis/notification_api.rb', line 641 def opened? opened_at.present? end |
#optional_target_names ⇒ Array<Symbol>
Returns optional_target names of the notification from configured field or overridden method.
775 776 777 |
# File 'lib/activity_notification/apis/notification_api.rb', line 775 def optional_target_names notifiable.optional_target_names(target.to_resources_name, key) end |
#optional_target_subscribed?(optional_target_name) ⇒ Boolean
Returns if the target subscribes this notification email.
763 764 765 |
# File 'lib/activity_notification/apis/notification_api.rb', line 763 def optional_target_subscribed?(optional_target_name) target.subscribes_to_optional_target?(key, optional_target_name) end |
#optional_targets ⇒ Array<ActivityNotification::OptionalTarget::Base>
Returns optional_targets of the notification from configured field or overridden method.
769 770 771 |
# File 'lib/activity_notification/apis/notification_api.rb', line 769 def optional_targets notifiable.optional_targets(target.to_resources_name, key) end |
#prepare_to_store ⇒ Object
Returns prepared notification object to store
520 521 522 |
# File 'lib/activity_notification/apis/notification_api.rb', line 520 def prepare_to_store self end |
#publish_to_optional_targets(options = {}) ⇒ Hash
Publishes notification to the optional targets.
603 604 605 606 607 608 609 610 611 612 613 |
# File 'lib/activity_notification/apis/notification_api.rb', line 603 def publish_to_optional_targets( = {}) notifiable.optional_targets(target.to_resources_name, key).map { |optional_target| optional_target_name = optional_target.to_optional_target_name if optional_target_subscribed?(optional_target_name) optional_target.notify(self, [optional_target_name] || {}) [optional_target_name, true] else [optional_target_name, false] end }.to_h end |
#remove_from_group ⇒ Notificaion
Remove from notification group and make a new group owner.
731 732 733 734 735 736 737 738 |
# File 'lib/activity_notification/apis/notification_api.rb', line 731 def remove_from_group new_group_owner = group_members.earliest if new_group_owner.present? new_group_owner.update(group_owner_id: nil) group_members.update_all(group_owner_id: new_group_owner.id) end new_group_owner end |
#send_notification_email(options = {}) ⇒ Mail::Message, ActionMailer::DeliveryJob
Sends notification email to the target.
530 531 532 533 534 535 536 537 538 539 |
# File 'lib/activity_notification/apis/notification_api.rb', line 530 def send_notification_email( = {}) if target.notification_email_allowed?(notifiable, key) && notifiable.notification_email_allowed?(target, key) && email_subscribed? send_later = .has_key?(:send_later) ? [:send_later] : true send_later ? @@notification_mailer.send_notification_email(self, ).deliver_later : @@notification_mailer.send_notification_email(self, ).deliver_now end end |
#subscribed? ⇒ Boolean
Returns if the target subscribes this notification.
750 751 752 |
# File 'lib/activity_notification/apis/notification_api.rb', line 750 def subscribed? target.subscribes_to_notification?(key) end |
#unopened? ⇒ Boolean
Returns if the notification is unopened.
634 635 636 |
# File 'lib/activity_notification/apis/notification_api.rb', line 634 def unopened? !opened? end |