53 lines
1.2 KiB
Ruby
53 lines
1.2 KiB
Ruby
|
module ChecksKbClientNotification
|
||
|
extend ActiveSupport::Concern
|
||
|
|
||
|
included do
|
||
|
after_create :notify_kb_clients_after_create
|
||
|
after_update :notify_kb_clients_after_update
|
||
|
after_touch :notify_kb_clients_after_touch
|
||
|
after_destroy :notify_kb_clients_after_destroy
|
||
|
|
||
|
class_attribute :notify_kb_clients_suspend, default: false
|
||
|
end
|
||
|
|
||
|
def self.disable_in_all_classes!
|
||
|
all_classes.each { |klass| klass.notify_kb_clients_suspend = true }
|
||
|
end
|
||
|
|
||
|
def self.enable_in_all_classes!
|
||
|
all_classes.each { |klass| klass.notify_kb_clients_suspend = false }
|
||
|
end
|
||
|
|
||
|
def self.all_classes
|
||
|
ActiveRecord::Base
|
||
|
.descendants
|
||
|
.select { |c| c.included_modules.include?(ChecksKbClientNotification) }
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
# generic call
|
||
|
|
||
|
def notify_kb_clients(event)
|
||
|
return if self.class.notify_kb_clients_suspend?
|
||
|
|
||
|
ChecksKbClientNotificationJob.notify_later(self, event)
|
||
|
end
|
||
|
|
||
|
def notify_kb_clients_after_create
|
||
|
notify_kb_clients(:create)
|
||
|
end
|
||
|
|
||
|
def notify_kb_clients_after_update
|
||
|
notify_kb_clients(:update)
|
||
|
end
|
||
|
|
||
|
def notify_kb_clients_after_touch
|
||
|
notify_kb_clients(:touch)
|
||
|
end
|
||
|
|
||
|
def notify_kb_clients_after_destroy
|
||
|
notify_kb_clients(:destroy)
|
||
|
end
|
||
|
end
|