Commit 8380092
Changed files (5)
lib
minbox
lib/minbox/cli.rb
@@ -14,7 +14,7 @@ module Minbox
from 'Your Name <me@example.org>'
to 'Destination Address <them@example.com>'
subject 'test message'
- body 'This is a test message.'
+ body "#{Time.now} This is a test message."
end
require 'net/smtp'
Net::SMTP.start(host, port) do |smtp|
@@ -25,7 +25,7 @@ module Minbox
method_option :output, type: :array, default: ['stdout']
desc 'server <HOST> <PORT>', 'SMTP server'
def server(host = 'localhost', port = '25')
- publisher = publishers_for(options[:output])
+ publisher = Publisher.from(options[:output])
Server.new(host, port).listen! do |mail|
publisher.publish(mail)
end
lib/minbox/core.rb
@@ -0,0 +1,9 @@
+module Minbox
+ def self.logger
+ @logger ||= Logger.new(STDOUT)
+ end
+
+ def self.logger=(logger)
+ @logger = logger
+ end
+end
lib/minbox/publisher.rb
@@ -15,15 +15,30 @@ module Minbox
def publish(mail)
publishers.each { |x| x.publish(mail) }
end
+
+ def self.from(outputs)
+ publisher = Publisher.new
+ outputs.each do |x|
+ case x
+ when 'stdout'
+ publisher.add(LogPublisher.new)
+ when 'redis'
+ publisher.add(RedisPublisher.new)
+ when 'file'
+ publisher.add(FilePublisher.new)
+ end
+ end
+ publisher
+ end
end
class LogPublisher
- def initialize(logger = STDOUT)
+ def initialize(logger = Minbox.logger)
@logger = logger
end
def publish(mail)
- @logger.puts mail.to_s
+ @logger.debug(mail.to_s)
end
end
lib/minbox/server.rb
@@ -1,16 +1,21 @@
module Minbox
class Server
- attr_reader :host, :port
+ attr_reader :host, :port, :logger
- def initialize(host, port)
+ def initialize(host, port, logger = Minbox.logger)
@host = host
@port = port
+ @logger = logger
end
def listen!
+ logger.debug("Starting server...")
server = TCPServer.new(port.to_i)
+ logger.debug("Server started!")
loop do
yield handle(server.accept)
+ rescue StandardError => error
+ logger.error(error)
end
end
lib/minbox.rb
@@ -1,5 +1,7 @@
require 'socket'
+require 'logger'
+require "minbox/core"
require "minbox/publisher"
require "minbox/server"
require "minbox/version"