module Messaging::Handle
Public Class Methods
included(cls)
click to toggle source
# File lib/messaging/handle.rb, line 5 def self.included(cls) cls.class_exec do include Dependency include Virtual def handler_logger @handler_logger ||= Log.get(self) end attr_writer :handler_logger extend Build extend Call extend Info extend HandleMacro extend MessageRegistry virtual :configure attr_writer :strict end end
Public Instance Methods
call(message_or_message_data, strict: nil)
click to toggle source
# File lib/messaging/handle.rb, line 164 def call(message_or_message_data, strict: nil) if message_or_message_data.is_a? Message handle_message(message_or_message_data, strict: strict) else handle_message_data(message_or_message_data, strict: strict) end end
handle_message(message, strict: nil)
click to toggle source
# File lib/messaging/handle.rb, line 172 def handle_message(message, strict: nil) strict ||= self.strict? handler_logger.trace(tags: [:dispatch, :message]) { "Dispatching message (Message class: #{message.class.name})" } handler_logger.trace(tags: [:data, :message]) { message.pretty_inspect } handler = self.class.handler(message) unless handler.nil? message_type = message.message_type handler_logger.trace(tag: [:handle, :message]) { "Handling Message (Type: #{message_type}, Method: #{handler})" } public_send(handler, message) handler_logger.info(tags: [:handle, :message]) { "Handled message (Message class: #{message.class.name})" } handler_logger.info(tags: [:data, :message]) { message.pretty_inspect } else if strict error_msg = "#{self.class.name} does not implement a handler for #{message.message_type}. Cannot handle the message." handler_logger.error(tag: :handle) { error_msg } raise Error, error_msg end end message end
handle_message_data(message_data, strict: nil)
click to toggle source
# File lib/messaging/handle.rb, line 200 def handle_message_data(message_data, strict: nil) strict ||= self.strict? handler_logger.trace(tags: [:dispatch, :message_data]) { "Dispatching message data (Type: #{message_data.type})" } handler_logger.trace(tags: [:data, :message_data]) { message_data.pretty_inspect } message = nil handler = self.class.handler(message_data) unless handler.nil? message_type = message_data.type message_name = Messaging::Message::Info.canonize_name(message_type) message_class = self.class.message_registry.get(message_name) if message_class == nil error_msg = "No message class is registered (Message Type: #{message_type}, Handler: #{self.class.name})" handler_logger.error(tag: :handle) { error_msg } raise Error, error_msg end message = Message::Import.(message_data, message_class) message_type = message.message_type handler_logger.trace(tag: [:handle, :message_data]) { "Handling Message Data (Type: #{message_type}, Method: #{handler})" } public_send(handler, message) handler_logger.info(tags: [:handle, :message_data]) { "Handled message data (Type: #{message_data.type})" } handler_logger.info(tags: [:data, :message_data]) { message_data.pretty_inspect } else if respond_to?(:handle) message_type = message_data.type handler_logger.trace(tag: [:handle, :message_data]) { "Handling Message Data (Type: #{message_type}, Method: handle" } handle(message_data) handler_logger.info(tags: [:handle, :message_data]) { "Handled message data (Type: #{message_data.type})" } handler_logger.info(tags: [:data, :message_data]) { message_data.pretty_inspect } message = message_data else if strict error_msg = "#{self.class.name} does not implement `handle'. Cannot handle message data." handler_logger.error(tag: :handle) { error_msg } raise Error, error_msg end end end message end
handler_logger()
click to toggle source
# File lib/messaging/handle.rb, line 10 def handler_logger @handler_logger ||= Log.get(self) end
strict()
click to toggle source
# File lib/messaging/handle.rb, line 159 def strict @strict ||= Defaults.strict end
Also aliased as: strict?