Module: ActivityNotification::Subscriber
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/activity_notification/models/concerns/subscriber.rb
Overview
Subscriber implementation included in target model to manage subscriptions, like users or administrators.
Class Method Summary collapse
-
.available_as_subscriber? ⇒ Boolean
Checks if the model includes subscriber and subscriber methods are available.
Instance Method Summary collapse
-
#create_subscription(subscription_params = {}) ⇒ Subscription
Creates new subscription of the target.
-
#find_or_create_subscription(key, subscription_params = {}) ⇒ Subscription
Gets subscription of the target and notification key.
-
#find_subscription(key) ⇒ Subscription
Gets subscription of the target and notification key.
-
#notification_keys(options = {}) ⇒ Array<Notificaion>
Gets received notification keys of the target.
-
#subscription_index(options = {}) ⇒ Array<Notificaion>
Gets configured subscription index of the target.
-
#subscriptions ⇒ Array<Notificaion>
Has many subscription instances of this target.
Class Method Details
.available_as_subscriber? ⇒ Boolean
Checks if the model includes subscriber and subscriber methods are available. Also checks if the model includes target and target methods are available, then return true.
19 20 21 |
# File 'lib/activity_notification/models/concerns/subscriber.rb', line 19 def available_as_subscriber? available_as_target? end |
Instance Method Details
#create_subscription(subscription_params = {}) ⇒ Subscription
Creates new subscription of the target.
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/activity_notification/models/concerns/subscriber.rb', line 47 def create_subscription(subscription_params = {}) created_at = Time.current if subscription_params[:subscribing] == false && subscription_params[:subscribing_to_email].nil? subscription_params[:subscribing_to_email] = subscription_params[:subscribing] end subscription = subscriptions.new(subscription_params) subscription.subscribing? ? subscription.assign_attributes(subscribing: true, subscribed_at: created_at) : subscription.assign_attributes(subscribing: false, unsubscribed_at: created_at) subscription.subscribing_to_email? ? subscription.assign_attributes(subscribing_to_email: true, subscribed_to_email_at: created_at) : subscription.assign_attributes(subscribing_to_email: false, unsubscribed_to_email_at: created_at) optional_targets = subscription.optional_targets subscription.optional_target_names.each do |optional_target_name| optional_targets = subscription.subscribing_to_optional_target?(optional_target_name) ? optional_targets.merge( Subscription.to_optional_target_key(optional_target_name) => true, Subscription.to_optional_target_subscribed_at_key(optional_target_name) => created_at ) : optional_targets.merge( Subscription.to_optional_target_key(optional_target_name) => false, Subscription.to_optional_target_unsubscribed_at_key(optional_target_name) => created_at ) end subscription.assign_attributes(optional_targets: optional_targets) subscription.save ? subscription : nil end |
#find_or_create_subscription(key, subscription_params = {}) ⇒ Subscription
Gets subscription of the target and notification key.
38 39 40 41 |
# File 'lib/activity_notification/models/concerns/subscriber.rb', line 38 def find_or_create_subscription(key, subscription_params = {}) subscription = find_subscription(key) subscription || create_subscription(subscription_params.merge(key: key)) end |
#find_subscription(key) ⇒ Subscription
Gets subscription of the target and notification key.
29 30 31 |
# File 'lib/activity_notification/models/concerns/subscriber.rb', line 29 def find_subscription(key) subscriptions.find_by_key(key) end |
#notification_keys(options = {}) ⇒ Array<Notificaion>
Gets received notification keys of the target.
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/activity_notification/models/concerns/subscriber.rb', line 106 def notification_keys( = {}) subscription_keys = subscriptions.select(:key).distinct.pluck(:key) target_notifications = notifications.(.select { |k, _| [:filtered_by_key, :custom_filter].include?(k) }) target_notifications = [:reverse] ? target_notifications.earliest_order : target_notifications.latest_order target_notifications = [:limit].present? ? target_notifications.limit([:limit] + subscription_keys.size) : target_notifications notification_keys = target_notifications.select(:key).distinct.pluck(:key) notification_keys = case [:filter] when :configured, 'configured' notification_keys & subscription_keys when :unconfigured, 'unconfigured' notification_keys - subscription_keys else notification_keys end [:limit].present? ? notification_keys.take([:limit]) : notification_keys end |
#subscription_index(options = {}) ⇒ Array<Notificaion>
Gets configured subscription index of the target.
87 88 89 90 91 92 |
# File 'lib/activity_notification/models/concerns/subscriber.rb', line 87 def subscription_index( = {}) target_index = subscriptions.() target_index = [:reverse] ? target_index.earliest_order : target_index.latest_order target_index = target_index.includes(:target) if [:with_target] [:limit].present? ? target_index.limit([:limit]) : target_index end |
#subscriptions ⇒ Array<Notificaion>
Has many subscription instances of this target.
9 10 11 12 |
# File 'lib/activity_notification/models/concerns/subscriber.rb', line 9 has_many :subscriptions, class_name: "::ActivityNotification::Subscription", as: :target, dependent: :delete_all |