Commit 8380092

mokha <mokha@cisco.com>
2019-02-28 20:11:21
write to logger
1 parent be432c3
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"