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