Class: ActivityNotification::ORM::ActiveRecord::Subscription

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
SubscriptionApi
Defined in:
lib/activity_notification/orm/active_record/subscription.rb

Overview

Subscription model implementation generated by ActivityNotification.

Class Method Summary collapse

Instance Method Summary collapse

Methods included from SubscriptionApi

#as_json, #optional_target_names, #subscribe, #subscribe_to_email, #subscribe_to_optional_target, #subscribing_to_optional_target?, #unsubscribe, #unsubscribe_to_email, #unsubscribe_to_optional_target

Class Method Details

.filtered_by_targetActiveRecord_AssociationRelation<Subscription>

Selects filtered subscriptions by target instance. ActivityNotification::Subscription.filtered_by_target(@user) is the same as @user.subscriptions

Parameters:

  • target (Object)

    Target instance for filter

Returns:

  • (ActiveRecord_AssociationRelation<Subscription>)

    Database query of filtered subscriptions



50
# File 'lib/activity_notification/orm/active_record/subscription.rb', line 50

scope :filtered_by_target,  ->(target) { where(target: target) }

.uniq_keysArray<String>

Selects unique keys from query for subscriptions.

Returns:

  • (Array<String>)

    Array of subscription unique keys



71
72
73
74
75
# File 'lib/activity_notification/orm/active_record/subscription.rb', line 71

def self.uniq_keys
  # select method cannot be chained with order by other columns like created_at
  # select(:key).distinct.pluck(:key)
  pluck(:key).uniq
end

Instance Method Details

#for_notifiableActiveRecord_AssociationRelation<Subscription>

Selects subscriptions for a specific notifiable instance.

Parameters:

  • notifiable (Object)

    Notifiable instance for filter

Returns:

  • (ActiveRecord_AssociationRelation<Subscription>)

    Database query of filtered subscriptions



67
# File 'lib/activity_notification/orm/active_record/subscription.rb', line 67

scope :for_notifiable,            ->(notifiable) { where(notifiable_type: notifiable.class.name, notifiable_id: notifiable.id) }

#instance_level_onlyActiveRecord_AssociationRelation<Subscription>

Selects instance-level subscriptions only (where notifiable is present).

Returns:

  • (ActiveRecord_AssociationRelation<Subscription>)

    Database query of instance-level subscriptions



62
# File 'lib/activity_notification/orm/active_record/subscription.rb', line 62

scope :instance_level_only,       -> { where.not(notifiable_type: nil) }

#key_level_onlyActiveRecord_AssociationRelation<Subscription>

Selects key-level subscriptions only (where notifiable is nil).

Returns:

  • (ActiveRecord_AssociationRelation<Subscription>)

    Database query of key-level subscriptions



58
# File 'lib/activity_notification/orm/active_record/subscription.rb', line 58

scope :key_level_only,            -> { where(notifiable_type: nil) }

#notifiableObject?

Belongs to notifiable instance of this subscription as polymorphic association (optional). When present, this subscription is scoped to a specific notifiable instance. When nil, this is a key-level subscription that applies globally.

Returns:

  • (Object, nil)

    Notifiable instance of this subscription



21
# File 'lib/activity_notification/orm/active_record/subscription.rb', line 21

belongs_to :notifiable,           polymorphic: true, optional: true

#targetObject

Belongs to target instance of this subscription as polymorphic association.

Returns:

  • (Object)

    Target instance of this subscription



14
# File 'lib/activity_notification/orm/active_record/subscription.rb', line 14

belongs_to :target,               polymorphic: true

#with_targetActiveRecord_AssociationRelation<Subscription>

Includes target instance with query for subscriptions.

Returns:

  • (ActiveRecord_AssociationRelation<Subscription>)

    Database query of subscriptions with target



54
# File 'lib/activity_notification/orm/active_record/subscription.rb', line 54

scope :with_target,               -> { includes(:target) }