Sha256: 2a148fa9a52350ead793d0715ef8f3b4a55442fc604ecbeeb1633e47a8aa7a4b
Contents?: true
Size: 1.83 KB
Versions: 1
Compression:
Stored size: 1.83 KB
Contents
# frozen_string_literals: true require "aws-sdk-s3" require "mail" require "shoryuken" module Jobshop module Mailroom # Jobshop::Mailroom::Postmaster # # Reponsible for processing incoming email and dispatching it to its handler. class Postmaster include Shoryuken::Worker shoryuken_options queue: Jobshop.configuration.aws.incoming_email_queue 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 def s3 @s3 ||= Aws::S3::Client.new end 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 def delete_original s3.delete_object({ bucket: @event.bucket, key: @event.key }) || raise("Could not delete original email") end class S3EventMessage def initialize(message) @message = JSON.parse(message) return false unless records end def records @records ||= @message["Records"] || [] end def bucket records.first.dig "s3", "bucket", "name" end def key records.first.dig "s3", "object", "key" end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
jobshop-0.0.167 | lib/jobshop/mailroom/postmaster.rb |