class Jobshop::Mailroom::Postmaster

Jobshop::Mailroom::Postmaster

Reponsible for processing incoming email and dispatching it to its handler.

Public Instance Methods

copy_to(prefix) click to toggle source
# File lib/jobshop/mailroom/postmaster.rb, line 40
def copy_to(prefix)
  key = prefix + "/" + @event.key.split("/").last

  s3.copy_object({
    copy_source: @event.bucket + "/" + @event.key,
    bucket: Jobshop.configuration.aws.s3_bucket,
    key: key
  }) || raise("Could not copy incoming rfq to processed folder")
end
delete_original() click to toggle source
# File lib/jobshop/mailroom/postmaster.rb, line 50
def delete_original
  s3.delete_object({
    bucket: @event.bucket, key: @event.key
  }) || raise("Could not delete original email")
end
perform(sqs_msg, *) click to toggle source
# File lib/jobshop/mailroom/postmaster.rb, line 17
def perform(sqs_msg, *)
  @event = S3EventMessage.new(sqs_msg.body) || return
  tempfile = Tempfile.new
  s3.get_object({ bucket: @event.bucket, key: @event.key }, target: tempfile)
  message = Mail.new(File.read(tempfile))
  handler = Mailman.handler_for(message)

  if handler.process
    copy_to(handler.archive_prefix)
    delete_original
    sqs_msg.delete
  end

ensure
  @event = nil
  tempfile.close
  tempfile.unlink
end
s3() click to toggle source
# File lib/jobshop/mailroom/postmaster.rb, line 36
def s3
  @s3 ||= Aws::S3::Client.new
end