class EventHub::Message

Message class

Constants

REQUIRED_HEADERS

Headers that are required (value can be nil) in order to pass valid?

VERSION

Attributes

body[RW]
header[RW]
raw[RW]
routing_key[RW]
vhost[RW]

Public Class Methods

from_json(raw) click to toggle source
# File lib/eventhub/message.rb, line 40
def self.from_json(raw)
  data = JSON.parse(raw)
  Message.new(data.get("header"), data.get("body"), raw)
rescue => e
  Message.new(
    {
      "status" =>
      {
        "code" => STATUS_INVALID,
        "message" => "JSON parse error: #{e}"
      }
    },
    {
      "original_message_base64_encoded" => Base64.encode64(raw)
    },
    raw
  )
end
new(header = nil, body = nil, raw = nil) click to toggle source
# File lib/eventhub/message.rb, line 59
def initialize(header = nil, body = nil, raw = nil)
  @header = header || {}
  @body = body || {}
  @raw = raw

  # set message defaults, that we have required headers
  @header.set("message_id", UUIDTools::UUID.timestamp_create.to_s, false)
  @header.set("version", VERSION, false)
  @header.set("created_at", now_stamp, false)

  @header.set("origin.module_id", "undefined", false)
  @header.set("origin.type", "undefined", false)
  @header.set("origin.site_id", "undefined", false)

  @header.set("process.name", "undefined", false)
  @header.set("process.execution_id",
    UUIDTools::UUID.timestamp_create.to_s, false)
  @header.set("process.step_position", 0, false)

  @header.set("status.retried_count", 0, false)
  @header.set("status.code", STATUS_INITIAL, false)
  @header.set("status.message", "", false)
end
translate_status_code(code) click to toggle source
# File lib/eventhub/message.rb, line 154
def self.translate_status_code(code)
  STATUS_CODE_TRANSLATION[code]
end

Public Instance Methods

append_to_execution_history(processor_name) click to toggle source
# File lib/eventhub/message.rb, line 147
def append_to_execution_history(processor_name)
  header.set("execution_history", []) unless \
    header.get("execution_history")
  header.get("execution_history") << \
    {"processor" => processor_name, "timestamp" => now_stamp}
end
copy(status_code = STATUS_SUCCESS) click to toggle source

copies the message and set's provided status code (default: success), actual stamp, and a new message id

# File lib/eventhub/message.rb, line 135
def copy(status_code = STATUS_SUCCESS)
  # use Marshal dump and load to make a deep object copy
  copied_header = Marshal.load(Marshal.dump(header))
  copied_body = Marshal.load(Marshal.dump(body))

  copied_header.set("message_id", UUIDTools::UUID.timestamp_create.to_s)
  copied_header.set("created_at", now_stamp)
  copied_header.set("status.code", status_code)

  Message.new(copied_header, copied_body)
end
initial?() click to toggle source
# File lib/eventhub/message.rb, line 99
def initial?
  status_code == STATUS_INITIAL
end
invalid?() click to toggle source
# File lib/eventhub/message.rb, line 107
def invalid?
  status_code == STATUS_INVALID
end
retry?() click to toggle source
# File lib/eventhub/message.rb, line 95
def retry?
  status_code == STATUS_RETRY
end
retry_pending?() click to toggle source
# File lib/eventhub/message.rb, line 103
def retry_pending?
  status_code == STATUS_RETRY_PENDING
end
schedule?() click to toggle source
# File lib/eventhub/message.rb, line 111
def schedule?
  status_code == STATUS_SCHEDULE
end
schedule_pending?() click to toggle source
# File lib/eventhub/message.rb, line 119
def schedule_pending?
  status_code == STATUS_SCHEDULE_PENDING
end
schedule_retry?() click to toggle source
# File lib/eventhub/message.rb, line 115
def schedule_retry?
  status_code == STATUS_SCHEDULE_RETRY
end
success?() click to toggle source
# File lib/eventhub/message.rb, line 91
def success?
  status_code == STATUS_SUCCESS
end
to_json() click to toggle source
# File lib/eventhub/message.rb, line 123
def to_json
  {"header" => header, "body" => body}.to_json
end
to_s() click to toggle source
# File lib/eventhub/message.rb, line 127
def to_s
  "Msg: process "\
    "[#{process_name}, #{process_step_position}, #{process_execution_id}]"\
    ", status [#{status_code},#{status_message},#{status_retried_count}]"
end
valid?() click to toggle source
# File lib/eventhub/message.rb, line 83
def valid?
  # check for existence and defined value
  REQUIRED_HEADERS.all? do |key|
    @header.all_keys_with_path.include?(key) &&
      !send(key.tr(".", "_").to_sym).nil?
  end
end