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