class EmmyExtends::Remailer::Operation

Attributes

completed[RW]
connection[RW]
request[RW]
response[RW]

Public Class Methods

new(req) click to toggle source
# File lib/emmy_extends/remailer/operation.rb, line 11
def initialize(req)
  @request = req
  @completed = false
end

Public Instance Methods

connect() click to toggle source
# File lib/emmy_extends/remailer/operation.rb, line 16
def connect
  @connection ||= EmmyMachine.connect(*self)
end
initialize_connection(conn) click to toggle source
# File lib/emmy_extends/remailer/operation.rb, line 52
def initialize_connection(conn)
  conn.on :connect do |*a|
  end

  conn.on :error do |*a|
    error!
  end

  conn.on :disconnect do |*a|
    error!(Remailer::Error.new(conn.error_message)) unless completed
  end
end
send_emails() click to toggle source
# File lib/emmy_extends/remailer/operation.rb, line 20
def send_emails
  raise "no emails to send" if request.emails.empty?

  request.emails.each_with_index do |email, index|
    if index.zero?
      connection.send_email(email.from, email.to, email.content) do |status|
        @response = Remailer::Response.new(status)
        success!(response, self, connection) unless completed
      end
    else
      connection.send_email(email.from, email.to, email.content)
    end
  end
end
sync() click to toggle source
# File lib/emmy_extends/remailer/operation.rb, line 35
def sync
  Fiber.sync do |fiber|
    connect
    send_emails

    on :success do |res, operation, conn|
      @completed = true
      fiber.resume response
    end

    on :error do |error, operation, conn|
      @completed = true
      fiber.leave error
    end
  end
end
to_a() click to toggle source
# File lib/emmy_extends/remailer/operation.rb, line 65
def to_a
  ["tcp://#{request.options.host}:#{request.options.port}", EmmyExtends::Remailer::Connection, method(:initialize_connection), self]
end