module Pheromone::Publishable::InstanceMethods

Public Instance Methods

dispatch_messages(message_options:, current_event:) click to toggle source
# File lib/pheromone/publishable.rb, line 60
def dispatch_messages(message_options:, current_event:)
  return unless Pheromone.enabled?
  message_options.each do |options|
    next unless check_conditions(options, current_event)
    send_message(options, current_event)
  end
end

Private Instance Methods

check_conditions(options, current_event) click to toggle source
# File lib/pheromone/publishable.rb, line 70
def check_conditions(options, current_event)
  condition_callback = options[:if]
  result = check_event(options, current_event)
  return result unless condition_callback
  result && call_proc_or_instance_method(condition_callback)
end
check_event(options, current_event) click to toggle source
# File lib/pheromone/publishable.rb, line 77
def check_event(options, current_event)
  options[:event_types].any? { |event| event == current_event }
end
message_blob(options) click to toggle source
# File lib/pheromone/publishable.rb, line 106
def message_blob(options)
  message = options[:message]
  return call_proc_or_instance_method(message) if message
  options[:serializer].new(self, options[:serializer_options] || {}).serializable_hash
end
message_meta_data(options, current_event) click to toggle source
# File lib/pheromone/publishable.rb, line 98
def message_meta_data(options, current_event)
  metadata = options[:metadata]
  default_metadata = { event: current_event.to_s, entity: self.class.name, timestamp: Time.now }
  return default_metadata if metadata.blank?
  provided_metadata = metadata.is_a?(Hash) ? metadata : call_proc_or_instance_method(metadata)
  default_metadata.merge!(provided_metadata)
end
send_message(options, current_event) click to toggle source

Manages the actual formatting and sending of messages. By default messages are sent in sync mode. To override this, provide dispatch_method as :async

# File lib/pheromone/publishable.rb, line 83
def send_message(options, current_event)
  Pheromone::Messaging::MessageDispatcher.new(
    message_parameters: {
      topic: options[:topic],
      blob: message_blob(options),
      metadata: message_meta_data(options, current_event),
      encoder: options[:encoder],
      message_format: options[:message_format],
      producer_options: options[:producer_options],
      embed_blob: options[:embed_blob]
    },
    dispatch_method: options[:dispatch_method] || :sync
  ).dispatch
end