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