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.
Instance Method Summary collapse
-
#build_subscription(subscription_params = {}) ⇒ Subscription
Builds new subscription of the target.
-
#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, notifiable: nil) ⇒ Subscription
Gets subscription of the target and notification key.
-
#notification_keys(options = {}) ⇒ Array<Notification>
Gets received notification keys of the target.
-
#subscription_index(options = {}) ⇒ Array<Notification>
Gets configured subscription index of the target.
Instance Method Details
#build_subscription(subscription_params = {}) ⇒ Subscription
Builds new subscription of the target.
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/activity_notification/models/concerns/subscriber.rb', line 89 def build_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] elsif subscription_params[:subscribing_to_email].nil? subscription_params[:subscribing_to_email] = ActivityNotification.config.subscribe_to_email_as_default end # :nocov: # Convert notifiable_type/notifiable_id to notifiable_key for Dynamoid if ActivityNotification.config.orm == :dynamoid && subscription_params[:notifiable_type].present? && subscription_params[:notifiable_id].present? delimiter = ActivityNotification.config.composite_key_delimiter subscription_params[:notifiable_key] = "#{subscription_params.delete(:notifiable_type)}#{delimiter}#{subscription_params.delete(:notifiable_id)}" end # :nocov: subscription = Subscription.new(subscription_params) subscription.assign_attributes(target: self) 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) subscription.optional_targets = (subscription.optional_targets || {}).with_indifferent_access optional_targets = {}.with_indifferent_access 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) => Subscription.convert_time_as_hash(created_at) ) : optional_targets.merge( Subscription.to_optional_target_key(optional_target_name) => false, Subscription.to_optional_target_unsubscribed_at_key(optional_target_name) => Subscription.convert_time_as_hash(created_at) ) end subscription.assign_attributes(optional_targets: optional_targets) subscription end |
#create_subscription(subscription_params = {}) ⇒ Subscription
Creates new subscription of the target.
79 80 81 82 83 |
# File 'lib/activity_notification/models/concerns/subscriber.rb', line 79 def create_subscription(subscription_params = {}) subscription = build_subscription(subscription_params) raise RecordInvalidError, subscription.errors..first unless subscription.save subscription end |
#find_or_create_subscription(key, subscription_params = {}) ⇒ Subscription
Gets subscription of the target and notification key.
63 64 65 66 67 68 69 70 71 72 |
# File 'lib/activity_notification/models/concerns/subscriber.rb', line 63 def find_or_create_subscription(key, subscription_params = {}) notifiable = subscription_params.delete(:notifiable) subscription = find_subscription(key, notifiable: notifiable) merge_params = { key: key } if notifiable merge_params[:notifiable_type] = notifiable.class.name merge_params[:notifiable_id] = notifiable.id end subscription || create_subscription(subscription_params.merge(merge_params)) end |
#find_subscription(key, notifiable: nil) ⇒ Subscription
Gets subscription of the target and notification key.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/activity_notification/models/concerns/subscriber.rb', line 33 def find_subscription(key, notifiable: nil) if notifiable if ActivityNotification.config.orm == :dynamoid # :nocov: delimiter = ActivityNotification.config.composite_key_delimiter subscriptions.where(key: key, notifiable_key: "#{notifiable.class.name}#{delimiter}#{notifiable.id}").first # :nocov: else # :nocov: subscriptions.where(key: key, notifiable_type: notifiable.class.name, notifiable_id: notifiable.id).first # :nocov: end else if ActivityNotification.config.orm == :dynamoid # :nocov: subscriptions.where(key: key).select { |s| s.notifiable_type.nil? }.first # :nocov: else # :nocov: subscriptions.where(key: key, notifiable_type: nil).first # :nocov: end end end |
#notification_keys(options = {}) ⇒ Array<Notification>
Gets received notification keys of the target.
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 |
# File 'lib/activity_notification/models/concerns/subscriber.rb', line 159 def notification_keys( = {}) subscription_keys = subscriptions.uniq_keys 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.uniq_keys 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<Notification>
Gets configured subscription index of the target.
140 141 142 143 144 145 |
# File 'lib/activity_notification/models/concerns/subscriber.rb', line 140 def subscription_index( = {}) target_index = subscriptions.() target_index = [:reverse] ? target_index.earliest_order : target_index.latest_order target_index = target_index.with_target if [:with_target] [:limit].present? ? target_index.limit([:limit]).to_a : target_index.to_a end |