Sha256: c26a90fa17df6ac4fab43400909557440e90c8b0891d1a2df801b593c1ea36c3

Contents?: true

Size: 1.35 KB

Versions: 6

Compression:

Stored size: 1.35 KB

Contents

require 'active_support'

module NotificationSettings
    module Subscribable

        extend ActiveSupport::Concern

        included do
            has_many :notification_subscriptions, as: :subscribable, class_name: 'NotificationSettings::Subscription', dependent: :destroy
            has_many :notification_subscribers, through: :notification_subscriptions, source: :subscriber

            include NotificationSettings::Subscribable::InstanceMethods
        end

        module InstanceMethods

            def notify_subscribers options = {}
                options[:object] = self
                subscribers = notify_dependents options.delete(:dependents)
                self.notification_subscribers&.each { |subscriber| subscribers << subscriber }
                subscribers.to_a.uniq&.each do |subscriber|
                    subscriber.notify options
                end
            end

            def notify_dependents dependents
                subscribers = []
                dependents ||= self.notification_dependents
                dependents&.each { |dependent| dependent.notification_subscribers&.each { |subscriber| subscribers << subscriber } }
                subscribers
            end

            private

            def notification_dependents
                []
            end

        end

    end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
notification-settings-1.2.5 lib/notification_settings/subscribable.rb
notification-settings-1.2.4 lib/notification_settings/subscribable.rb
notification-settings-1.2.3 lib/notification_settings/subscribable.rb
notification-settings-1.2.2 lib/notification_settings/subscribable.rb
notification-settings-1.2.1 lib/notification_settings/subscribable.rb
notification-settings-1.2.0 lib/notification_settings/subscribable.rb