Commit 6bf1f28
Changed files (6)
lib/del/configuration.rb
@@ -0,0 +1,28 @@
+module Del
+ class Configuration
+ attr_accessor :default_rooms
+ attr_accessor :host
+ attr_accessor :jid
+ attr_accessor :jid
+ attr_accessor :logger
+ attr_accessor :muc_domain
+ attr_accessor :name
+ attr_accessor :password
+ attr_accessor :rooms
+ attr_accessor :router
+ attr_accessor :users
+
+ def initialize
+ @default_rooms = ENV.fetch("DEL_ROOMS", '').split(',')
+ @host = ENV.fetch("DEL_HOST", 'chat.hipchat.com')
+ @jid = ENV.fetch("DEL_JID")
+ @logger = Logger.new(STDOUT)
+ @muc_domain = ENV.fetch("DEL_MUC_DOMAIN", "conf.hipchat.com")
+ @name = ENV.fetch("DEL_FULL_NAME")
+ @password = ENV.fetch("DEL_PASSWORD")
+ @rooms = Repository.new
+ @router = DefaultRouter.new
+ @users = Repository.new
+ end
+ end
+end
lib/del/connection.rb
@@ -61,7 +61,7 @@ module Del
end
def disconnect
- puts "byte me!"
+ Del.logger.info("byte me!")
client.close
rescue IOError, SystemCallError => error
Del.logger.error(error)
lib/del/default_router.rb
@@ -1,9 +1,23 @@
module Del
class DefaultRouter
- def route(message)
- Del.logger.info(message.to_s)
+ attr_reader :logger
+
+ def initialize(logger = Del.logger)
+ @logger = logger
+ @routes = []
+ end
- message.reply(message.text.reverse)
+ def register(pattern, &block)
+ @routes.push(pattern: pattern, command: block)
+ end
+
+ def route(message)
+ logger.info(message.to_s)
+ @routes.each do |route|
+ if route[:pattern].match(message.text)
+ route[:command].call(message)
+ end
+ end
end
end
end
lib/del/robot.rb
@@ -15,6 +15,7 @@ module Del
def get_funky!
connection.connect(self)
+ Del.logger.info("It's fire! 🔥")
sleep
rescue Interrupt
connection.disconnect
lib/del.rb
@@ -6,6 +6,7 @@ require "xmpp4r/muc/helper/simplemucclient"
require "xmpp4r/roster/helper/roster"
require "del/connection"
+require "del/configuration"
require "del/default_router"
require "del/message"
require "del/repository"
@@ -18,7 +19,6 @@ module Del
def self.start(dotenv_file:)
puts "Loading... #{dotenv_file}"
Dotenv.load(dotenv_file.to_s)
- puts "It's fire! 🔥"
Del.logger.level = Logger::INFO
del = Robot.new(configuration: configuration)
del.get_funky!
@@ -29,18 +29,7 @@ module Del
end
def self.configuration
- @configuration ||= {
- default_rooms: ENV.fetch("DEL_ROOMS", '').split(','),
- host: ENV.fetch("DEL_HOST"),
- jid: ENV.fetch("DEL_JID"),
- logger: Logger.new(STDOUT),
- muc_domain: ENV.fetch("DEL_MUC_DOMAIN"),
- name: ENV.fetch("DEL_FULL_NAME"),
- password: ENV.fetch("DEL_PASSWORD"),
- rooms: Repository.new,
- router: DefaultRouter.new,
- users: Repository.new,
- }
+ @configuration ||= Configuration.new
end
def self.logger
spec/default_router_spec.rb
@@ -0,0 +1,22 @@
+RSpec.describe Del::DefaultRouter do
+ subject { described_class.new(Logger.new(STDOUT)) }
+
+ describe "#route" do
+ let(:recorder) { [] }
+ before :each do
+ subject.register(/^Hello World!$/) do |message|
+ recorder.push(message.text)
+ end
+ end
+
+ it 'routes to the registered route' do
+ subject.route(double(text: 'Hello World!'))
+ expect(recorder).to include('Hello World!')
+ end
+
+ it 'does not route a route that does not match' do
+ subject.route(double(text: "What's good?"))
+ expect(recorder).to be_empty
+ end
+ end
+end