Commit 2775fb9

mokha <mokha@cisco.com>
2019-03-12 23:48:16
conditional to hash lookup.
1 parent 939e8e7
Changed files (2)
lib/minbox/client.rb
@@ -16,12 +16,12 @@ module Minbox
         case line
         when /^EHLO/i then ehlo(line)
         when /^HELO/i then helo(line)
-        when /^MAIL FROM/i then mail_from(line)
-        when /^RCPT TO/i then rcpt_to(line)
+        when /^MAIL FROM/i then noop
+        when /^RCPT TO/i then noop
         when /^DATA/i then data(&block)
         when /^QUIT/i then quit
         when /^STARTTLS/i then start_tls
-        when /^RSET/i then reset
+        when /^RSET/i then noop
         when /^NOOP/i then noop
         when /^AUTH PLAIN/i then auth_plain(line)
         when /^AUTH LOGIN/i then auth_login(line)
@@ -55,14 +55,6 @@ module Minbox
       yield(Mail.new(body.join)) unless body.empty?
     end
 
-    def rcpt_to(_line)
-      write '250 OK'
-    end
-
-    def mail_from(_line)
-      write '250 OK'
-    end
-
     def ehlo(line)
       _ehlo, _client_domain = line.split(' ')
       write "250-#{server.host} offers a warm hug of welcome"
@@ -86,10 +78,6 @@ module Minbox
       @socket = socket.accept
     end
 
-    def reset
-      write '250 OK'
-    end
-
     def noop
       write '250 OK'
     end
lib/minbox/publisher.rb
@@ -3,40 +3,6 @@
 require 'redis'
 
 module Minbox
-  class Publisher
-    attr_reader :publishers
-
-    def initialize(*publishers)
-      @publishers = Array(publishers)
-    end
-
-    def add(publisher)
-      publishers.push(publisher)
-    end
-
-    def publish(mail)
-      Thread.new do
-        Minbox.logger.debug("Publishing: #{mail.message_id}")
-        publishers.each { |x| x.publish(mail) }
-      end
-    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 = Minbox.logger)
       @logger = logger
@@ -69,4 +35,38 @@ module Minbox
       IO.write(File.join(dir, "#{Time.now.to_i}.eml"), mail.to_s)
     end
   end
+
+  class Publisher
+    REGISTERED_PUBLISHERS = {
+      stdout: LogPublisher,
+      redis: RedisPublisher,
+      file: FilePublisher,
+    }.freeze
+
+    attr_reader :publishers
+
+    def initialize(*publishers)
+      @publishers = Array(publishers)
+    end
+
+    def add(publisher)
+      publishers.push(publisher)
+    end
+
+    def publish(mail)
+      Thread.new do
+        Minbox.logger.debug("Publishing: #{mail.message_id}")
+        publishers.each { |x| x.publish(mail) }
+      end
+    end
+
+    def self.from(outputs)
+      publisher = Publisher.new
+      outputs.each do |x|
+        clazz = REGISTERED_PUBLISHERS[x.to_sym]
+        publisher.add(clazz.new) if clazz
+      end
+      publisher
+    end
+  end
 end