class Nuntius::BaseMessageBox

Message boxes process inbound messages

def deliver(message)

def deliver(message)
  klasses = message_box_for(transport: message.transport.to_sym, provider: message.provider.to_sym)
  klass, method = message_box_for_route(klasses, message)
  if method
    klass.new(message).send(method)
    true
  end
end

def descendants

def descendants
  ObjectSpace.each_object(Class).select { |k| k < self }
end

def initialize(message)

def initialize(message)
  @message = message
end

def mail

Returns:
  • (Mail::Message) -
def mail
  return nil unless self.class.transport.to_sym == :mail
  return @mail if @mail
  @mail = Mail.new(message.raw_message.download)
end

def message_box_for(transport: nil, provider: nil)

def message_box_for(transport: nil, provider: nil)
  result = descendants
  result = result.select { |message_box| message_box.transport == transport } if transport
  result = result.select { |message_box| message_box.provider == provider } if provider
  result
end

def message_box_for_route(message_boxes, message)

def message_box_for_route(message_boxes, message)
  klass = message_boxes.find do |message_box|
    routes = message_box.routes || {}
    routes.any? do |attribute, hash|
      value = message.send(attribute)
      if value.is_a? Array
        value.any? { |value_item| hash[:test].match(value_item) }
      else
        hash[:test].match(value)
      end
    end
  end
  route = klass&.routes&.find do |attribute, hash|
    value = message.send(attribute)
    if value.is_a? Array
      value.any? { |value_item| hash[:test].match(value_item) }
    else
      hash[:test].match(value)
    end
  end
  [klass, route.last[:to]] if route
end

def provider(value = nil)

def provider(value = nil)
  @provider = value.to_sym if value
  @provider
end

def route(attribute = :to, test = /.*/, to:)

def route(attribute = :to, test = /.*/, to:)
  @routes ||= {}
  @routes[attribute] = {test: test, to: to}
  @routes
end

def settings(hash = nil)

Defines the settings
def settings(hash = nil)
  @settings = hash if hash
  @settings
end

def transport(value = nil)

def transport(value = nil)
  @transport = value.to_sym if value
  @transport
end