class Bricolage::SQSMessage

Constants

SQS_EVENT_SOURCE

Attributes

delay_seconds[R]

Valid only for sending messages

message_id[R]

Valid only for received messages

name[R]

abstract init_message(**message_params)

receipt_handle[R]
source[R]
time[R]

Public Class Methods

create( name:, time: Time.now.getutc, source: SQS_EVENT_SOURCE, delay_seconds: 0, **message_params) click to toggle source

Writer interface

# File lib/bricolage/sqsdatasource.rb, line 351
def SQSMessage.create(
    name:,
    time: Time.now.getutc,
    source: SQS_EVENT_SOURCE,
    delay_seconds: 0,
    **message_params)
  new(name: name, time: time, source: source, delay_seconds: delay_seconds, **message_params)
end
for_sqs_record(msg, rec) click to toggle source

abstract SQSMessage.get_concrete_class(msg, rec)

# File lib/bricolage/sqsdatasource.rb, line 370
def SQSMessage.for_sqs_record(msg, rec)
  new(** SQSMessage.parse_sqs_record(msg, rec).merge(parse_sqs_record(msg, rec)))
end
for_sqs_result(result) click to toggle source
# File lib/bricolage/sqsdatasource.rb, line 360
def SQSMessage.for_sqs_result(result)
  result.messages.flat_map {|msg|
    body = JSON.parse(msg.body)
    records = body['Records'] or next [UnknownSQSMessage.for_sqs_record(msg, nil)]
    records.map {|rec| get_concrete_class(msg, rec).for_sqs_record(msg, rec) }
  }
end
get_event_time(rec) click to toggle source
# File lib/bricolage/sqsdatasource.rb, line 384
def SQSMessage.get_event_time(rec)
  return nil unless rec
  str = rec['eventTime'] or return nil
  Time.parse(str) rescue nil
end
new(name:, time:, source:, message_id: nil, receipt_handle: nil, delay_seconds: nil, **message_params) click to toggle source
# File lib/bricolage/sqsdatasource.rb, line 390
def initialize(name:, time:, source:,
    message_id: nil, receipt_handle: nil, delay_seconds: nil,
    **message_params)
  @name = name
  @time = time
  @source = source

  @message_id = message_id
  @receipt_handle = receipt_handle

  @delay_seconds = delay_seconds

  init_message(**message_params)
end
parse_sqs_record(msg, rec) click to toggle source
# File lib/bricolage/sqsdatasource.rb, line 374
def SQSMessage.parse_sqs_record(msg, rec)
  {
    message_id: msg.message_id,
    receipt_handle: msg.receipt_handle,
    name: (rec ? rec['eventName'] : nil),
    time: get_event_time(rec),
    source: (rec ? rec['eventSource'] : nil)
  }
end

Public Instance Methods

body() click to toggle source
# File lib/bricolage/sqsdatasource.rb, line 420
def body
  obj = {}
  [
    ['eventName', @name],
    ['eventTime', (@time ? @time.iso8601 : nil)],
    ['eventSource', @source]
  ].each do |name, value|
    obj[name] = value if value
  end
  obj
end