Commit 5113782

mo <mo.khan@gmail.com>
2018-04-29 20:15:10
add client to send messages to hipchat
1 parent 0f6307b
lib/del/examples/routes.rb
@@ -1,17 +1,17 @@
-Del.configure do |config|
+Del.configure do |x|
   puts "Registering custom routes."
 
-  config.router.register(/.*/) do |message|
+  x.router.register(/.*/) do |message|
     Del.logger.info("Backwards!")
     message.reply(message.text.reverse)
   end
 
-  config.router.register(/^cowsay (.*)/) do |message, match_data|
+  x.router.register(/^cowsay (.*)/) do |message, match_data|
     Del.logger.info("COWSAY!")
     message.reply("/code #{`cowsay #{match_data[1]}`}")
   end
 
-  config.router.register(/^[Hh]ello/) do |message|
+  x.router.register(/^[Hh]ello/) do |message|
     message.reply("Hi!")
   end
 end
lib/del/cli.rb
@@ -6,13 +6,22 @@ module Del
   class CLI < Thor
     DEFAULT_RC=Pathname.new(Dir.home).join(".delrc")
     class_option :dotenv_file, default: ENV.fetch("DELRC", DEFAULT_RC)
+    class_option :socket_file, default: Del::Configuration::SOCKET_FILE
 
     desc "server <routes.rb>", "start server"
     def server(startup_file = nil)
       Del.start(
         dotenv_file: options[:dotenv_file],
+        socket_file: options[:socket_file],
         startup_file: startup_file,
       )
     end
+
+    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(jid: jid, message: message))
+      socket.close
+    end
   end
 end
lib/del/configuration.rb
@@ -1,5 +1,6 @@
 module Del
   class Configuration
+    SOCKET_FILE="/tmp/del.sock"
     attr_accessor :default_rooms
     attr_accessor :host
     attr_accessor :jid
@@ -11,6 +12,7 @@ module Del
     attr_accessor :rooms
     attr_accessor :router
     attr_accessor :users
+    attr_accessor :socket_file
 
     def initialize
       @default_rooms = ENV.fetch("DEL_ROOMS", '').split(',')
@@ -23,6 +25,7 @@ module Del
       @password = ENV.fetch("DEL_PASSWORD")
       @rooms = Repository.new
       @router = DefaultRouter.new
+      @socket_file = SOCKET_FILE
       @users = Repository.new
     end
   end
lib/del/robot.rb
@@ -11,7 +11,7 @@ module Del
       @router = configuration.router
       @users = configuration.users
       @rooms = configuration.rooms
-      @server = SocketServer.new
+      @server = SocketServer.new(socket_file: configuration.socket_file)
     end
 
     def get_funky!(start_server: true)
lib/del/socket_connection.rb
@@ -1,6 +1,6 @@
 module Del
   class SocketConnection
-    def initialize(path: '/tmp/del.sock')
+    def initialize(path:)
       File.unlink(path) if File.exists?(path)
       @server = UNIXServer.new(path)
     end
lib/del/socket_server.rb
@@ -1,7 +1,7 @@
 module Del
   class SocketServer
-    def initialize(connection = SocketConnection.new)
-      @connection = connection
+    def initialize(socket_file:)
+      @connection = SocketConnection.new(path: socket_file)
     end
 
     def run(robot)
lib/del.rb
@@ -20,10 +20,11 @@ require "del/user"
 require "del/version"
 
 module Del
-  def self.start(dotenv_file:, startup_file: nil, start_server: true)
+  def self.start(dotenv_file:, startup_file: nil, start_server: true, socket_file: nil)
     puts "Loading... #{dotenv_file}"
     Dotenv.load(dotenv_file.to_s)
     Del.configure do |config|
+      config.socket_file = socket_file if socket_file
       config.router.register(/.*/) do |message|
         logger.debug(message.to_s)
       end