Commit 2cc4d62

mo <mo.khan@gmail.com>
2018-05-12 00:35:03
extract socket message.
1 parent d1ba155
lib/del/cli.rb
@@ -42,18 +42,7 @@ module Del
 
     desc 'message <jid> <message>', 'send a message to the Jabber ID'
     def message(jid, message)
-      socket = UNIXSocket.new(options[:socket_file])
-      socket.puts(
-        JSON.generate(command: :send_message, jid: jid, message: message)
-      )
-      say socket.readline, :green
-    rescue EOFError => error
-      say error.message, :red
-    rescue Errno::ECONNREFUSED => error
-      say error.message, :red
-      say 'You must start the del server first.', :yellow
-    ensure
-      socket&.close
+      SendMessage.new(self).run(jid, message)
     end
 
     desc 'setup', 'setup your $HOME/.delrc'
lib/del/send_message.rb
@@ -0,0 +1,21 @@
+# frozen_string_literal: true
+
+module Del
+  class SendMessage
+    def initialize(shell)
+      @shell = shell
+    end
+
+    def run(jid, message)
+      socket = SocketMessage.new(@shell)
+      socket.deliver(
+        command: :send_message,
+        jid: jid,
+        message: message
+      )
+      @shell.say(socket.listen, :green)
+    ensure
+      socket.close
+    end
+  end
+end
lib/del/socket_message.rb
@@ -0,0 +1,36 @@
+# frozen_string_literal: true
+
+module Del
+  class SocketMessage
+    def initialize(shell)
+      @shell = shell
+    end
+
+    def deliver(payload)
+      socket.puts(message_for(payload))
+    rescue EOFError => error
+      @shell.say error.message, :red
+    rescue Errno::ECONNREFUSED => error
+      @shell.say error.message, :red
+      @shell.say 'You must start the del server first.', :yellow
+    end
+
+    def listen
+      socket.readline
+    end
+
+    def close
+      socket&.close
+    end
+
+    private
+
+    def message_for(payload)
+      JSON.generate(payload)
+    end
+
+    def socket
+      @socket ||= UNIXSocket.new(options[:socket_file])
+    end
+  end
+end
lib/del.rb
@@ -17,8 +17,10 @@ require 'del/default_router'
 require 'del/message'
 require 'del/repository'
 require 'del/robot'
+require 'del/send_message'
 require 'del/shell_command'
 require 'del/socket_connection'
+require 'del/socket_message'
 require 'del/socket_server'
 require 'del/source'
 require 'del/user'