Class: Jobshop::Mailroom::Postmaster

Inherits:
Object
  • Object
show all
Includes:
Shoryuken::Worker
Defined in:
lib/jobshop/mailroom/postmaster.rb

Overview

Jobshop::Mailroom::Postmaster

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

Defined Under Namespace

Classes: S3EventMessage

Instance Method Summary collapse

Instance Method Details

#copy_to(prefix) ⇒ Object



40
41
42
43
44
45
46
47
48
# 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_originalObject



50
51
52
53
54
# 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) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 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

#s3Object



36
37
38
# File 'lib/jobshop/mailroom/postmaster.rb', line 36

def s3
  @s3 ||= Aws::S3::Client.new
end