123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- module ChecksClientNotification
- extend ActiveSupport::Concern
- included do
- after_create :notify_clients_after_create
- after_update :notify_clients_after_update
- after_touch :notify_clients_after_touch
- after_destroy :notify_clients_after_destroy
- end
- def notify_clients_data(event)
- class_name = self.class.name.gsub(%r{::}, '')
- {
- message: {
- event: "#{class_name}:#{event}",
- data: notify_clients_data_attributes
- },
- type: client_notification_send_type,
- }
- end
- def notify_clients_data_attributes
- {
- id: id,
- updated_at: updated_at
- }
- end
- def notify_clients_send(data)
- return notify_clients_send_to(data[:message]) if client_notification_send_to.present?
- PushMessages.send(data)
- end
- def notify_clients_send_to(data)
- client_notification_send_to.each do |user_id|
- PushMessages.send_to(send(user_id), data)
- end
- end
- def notify_clients_after_create
-
- return if Setting.get('import_mode')
-
- return if client_notification_events_ignored.include?(:create)
- logger.debug { "#{self.class.name}.find(
- data = notify_clients_data(:create)
- notify_clients_send(data)
- end
- def notify_clients_after_update
-
- return if Setting.get('import_mode')
-
- return if client_notification_events_ignored.include?(:update)
- logger.debug { "#{self.class.name}.find(
- data = notify_clients_data(:update)
- notify_clients_send(data)
- end
- def notify_clients_after_touch
-
- return if Setting.get('import_mode')
-
- return if client_notification_events_ignored.include?(:touch)
- logger.debug { "#{self.class.name}.find(
- data = notify_clients_data(:touch)
- notify_clients_send(data)
- end
- def notify_clients_after_destroy
-
- return if Setting.get('import_mode')
-
- return if client_notification_events_ignored.include?(:destroy)
- logger.debug { "#{self.class.name}.find(
- data = notify_clients_data(:destroy)
- notify_clients_send(data)
- end
- private
- def client_notification_events_ignored
- @client_notification_events_ignored ||= self.class.instance_variable_get(:@client_notification_events_ignored) || []
- end
- def client_notification_send_to
- @client_notification_send_to ||= self.class.instance_variable_get(:@client_notification_send_to) || []
- end
- def client_notification_send_type
- @client_notification_send_type ||= self.class.instance_variable_get(:@client_notification_send_type) || 'authenticated'
- end
-
- class_methods do
-
-
-
-
-
-
-
- def client_notification_events_ignored(*attributes)
- @client_notification_events_ignored ||= []
- @client_notification_events_ignored |= attributes
- end
- # serve method to define recipient user ids
- #
- # @example
- # class Model < ApplicationModel
- # include ChecksClientNotification
- # client_notification_send_to :user_id
- # end
- def client_notification_send_to(*attributes)
- @client_notification_send_to ||= []
- @client_notification_send_to |= attributes
- end
- def client_notification_send_type(type)
- @client_notification_send_type = type
- end
- end
- end
|