Module: ActivityNotification::NotificationApi
- Extended by:
- ActiveSupport::Concern
- Includes:
- CascadingNotificationApi
- 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.
Instance Method Summary collapse
-
#after_store ⇒ Object
Call after store action with stored notification.
-
#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 ⇒ Notification
Returns the latest group member notification instance of this notification.
-
#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
:nocov: Returns prepared notification object to store.
-
#printable_notifiable_name ⇒ String
Returns printable notifiable model name to show in view or email.
-
#publish_to_optional_targets(options = {}) ⇒ Hash
Publishes notification to the optional targets.
-
#remove_from_group ⇒ Notification
Remove from notification group and make a new group owner.
-
#send_notification_email(options = {}) ⇒ Mail::Message, ...
Sends notification email to the target.
-
#subscribed? ⇒ Boolean
Returns if the target subscribes this notification.
-
#unopened? ⇒ Boolean
Returns if the notification is unopened.
Methods included from CascadingNotificationApi
#cascade_in_progress?, #cascade_notify, #validate_cascade_config
Instance Method Details
#after_store ⇒ Object
Call after store action with stored notification
647 648 |
# File 'lib/activity_notification/apis/notification_api.rb', line 647 def after_store end |
#email_subscribed? ⇒ Boolean
Returns if the target subscribes this notification email.
841 842 843 |
# File 'lib/activity_notification/apis/notification_api.rb', line 841 def email_subscribed? target.subscribes_to_notification_email?(key) end |
#group_member? ⇒ Boolean
Returns if the notification is group member belonging to owner.
734 735 736 |
# File 'lib/activity_notification/apis/notification_api.rb', line 734 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.
763 764 765 |
# File 'lib/activity_notification/apis/notification_api.rb', line 763 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.
743 744 745 |
# File 'lib/activity_notification/apis/notification_api.rb', line 743 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.
783 784 785 |
# File 'lib/activity_notification/apis/notification_api.rb', line 783 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.
754 755 756 |
# File 'lib/activity_notification/apis/notification_api.rb', line 754 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.
772 773 774 |
# File 'lib/activity_notification/apis/notification_api.rb', line 772 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.
793 794 795 796 |
# File 'lib/activity_notification/apis/notification_api.rb', line 793 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.
727 728 729 |
# File 'lib/activity_notification/apis/notification_api.rb', line 727 def group_owner? !group_member? end |
#latest_group_member ⇒ Notification
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.
802 803 804 805 |
# File 'lib/activity_notification/apis/notification_api.rb', line 802 def latest_group_member notification = group_member? && group_owner.present? ? group_owner : self notification.group_member_exists? ? notification.group_members.latest : self end |
#notifiable_path ⇒ String
Returns notifiable_path to move after opening notification with notifiable.notifiable_path.
822 823 824 825 |
# File 'lib/activity_notification/apis/notification_api.rb', line 822 def notifiable_path notifiable.blank? and raise ActivityNotification::NotifiableNotFoundError.new("Couldn't find associated notifiable (#{notifiable_type}) of #{self.class.name} with 'id'=#{id}") notifiable.notifiable_path(target_type, key) end |
#open!(options = {}) ⇒ Integer
Opens the notification.
700 701 702 703 704 705 706 707 708 |
# File 'lib/activity_notification/apis/notification_api.rb', line 700 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 [:skip_validation] ? update_attribute(:opened_at, opened_at) : update(opened_at: opened_at) unopened_member_count + 1 end |
#opened? ⇒ Boolean
Returns if the notification is opened.
720 721 722 |
# File 'lib/activity_notification/apis/notification_api.rb', line 720 def opened? opened_at.present? end |
#optional_target_names ⇒ Array<Symbol>
Returns optional_target names of the notification from configured field or overridden method.
860 861 862 |
# File 'lib/activity_notification/apis/notification_api.rb', line 860 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.
848 849 850 |
# File 'lib/activity_notification/apis/notification_api.rb', line 848 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.
854 855 856 |
# File 'lib/activity_notification/apis/notification_api.rb', line 854 def optional_targets notifiable.optional_targets(target.to_resources_name, key) end |
#prepare_to_store ⇒ Object
:nocov: Returns prepared notification object to store
642 643 644 |
# File 'lib/activity_notification/apis/notification_api.rb', line 642 def prepare_to_store self end |
#printable_notifiable_name ⇒ String
Returns printable notifiable model name to show in view or email.
829 830 831 |
# File 'lib/activity_notification/apis/notification_api.rb', line 829 def printable_notifiable_name notifiable.printable_notifiable_name(target, key) end |
#publish_to_optional_targets(options = {}) ⇒ Hash
Publishes notification to the optional targets.
672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 |
# File 'lib/activity_notification/apis/notification_api.rb', line 672 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) begin optional_target.notify(self, [optional_target_name] || {}) [optional_target_name, true] rescue => e Rails.logger.error(e) if ActivityNotification.config.rescue_optional_target_errors [optional_target_name, e] else raise e end end else [optional_target_name, false] end }.to_h end |
#remove_from_group ⇒ Notification
Remove from notification group and make a new group owner.
810 811 812 813 814 815 816 817 |
# File 'lib/activity_notification/apis/notification_api.rb', line 810 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, ...
Sends notification email to the target.
657 658 659 660 661 662 663 664 665 666 |
# File 'lib/activity_notification/apis/notification_api.rb', line 657 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.
835 836 837 |
# File 'lib/activity_notification/apis/notification_api.rb', line 835 def subscribed? target.subscribes_to_notification?(key) end |
#unopened? ⇒ Boolean
Returns if the notification is unopened.
713 714 715 |
# File 'lib/activity_notification/apis/notification_api.rb', line 713 def unopened? !opened? end |