del 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a70c030f756e772de50ea08ce46478b9d55c253c89c01223358932359830881b
4
- data.tar.gz: bb901e1d5da1da3fe49ec976e85e2d959b4642d538334ec8b0f94b693f3be644
3
+ metadata.gz: 7dee4ec5ef43e37de14d0de384d7e687000a441ec855015e6670d3c8b0f7ea80
4
+ data.tar.gz: 8ed4c9ad2433d08f0ebd768b9f4d69aa8ce0d3fb3c5fc74ac0f1b7602267a6ad
5
5
  SHA512:
6
- metadata.gz: 955aee1ae6f037df4c606c7cfb52c7afbd951db464195a60c2a9536c20a46bb67819656598966c6b7f1b7e97674aa7b188d4b1cf70d691ec9d2faee5fb117e03
7
- data.tar.gz: 395506b0ec6a53fcc8e487e1beff76494eb2e81457732cd419a2404e5e57df4671a91823035a321ed50ee100b6600fc30d1a44e6a663bfe0bb1b1e786bdef63a
6
+ metadata.gz: 53fe4ef8ee840f91fa551dab83b17e5abc4ee2a286465cd92b707961d386f4bc71923c7b4c6f9848928e140b894be9ee4df0ce04104894d11fa81b98fe8e3f6f
7
+ data.tar.gz: c23d9d1db2ac27d59b65649a57c19aa55949fc192b7af2e68db25ff96fbfbb57ea8c7fa90e7de23a9f8f1129c6363d4998272637659a1d29dbc80ac3b6fca106
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Del
2
2
 
3
- Del is a funky robosapien.
3
+ [Del is a funky robosapien](https://www.delhiero.com/)
4
4
 
5
5
  ## Installation
6
6
 
data/bin/console CHANGED
@@ -11,4 +11,8 @@ require "del"
11
11
  # Pry.start
12
12
 
13
13
  require "irb"
14
+ Del.start(
15
+ dotenv_file: Pathname.new(Dir.home).join(".delrc"),
16
+ start_server: false,
17
+ )
14
18
  IRB.start(__FILE__)
data/del.gemspec CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
23
23
 
24
24
  spec.add_dependency "dotenv", "~> 2.4"
25
25
  spec.add_dependency "xmpp4r", "~> 0.5"
26
+ spec.add_dependency "thor", "~> 0.20"
26
27
  spec.add_development_dependency "bundler", "~> 1.16"
27
28
  spec.add_development_dependency "rake", "~> 10.0"
28
29
  spec.add_development_dependency "rspec", "~> 3.0"
data/exe/del CHANGED
@@ -1,10 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "del"
4
- require "pathname"
3
+ require "del/cli"
5
4
 
6
- startup_file = Pathname.new(ARGV[0]) if ARGV[0]
7
- Del.start(
8
- dotenv_file: ENV.fetch("DELRC", Pathname.new(Dir.home).join(".delrc")),
9
- startup_file: startup_file,
10
- )
5
+ Del::CLI.start(ARGV)
data/lib/del.rb CHANGED
@@ -1,25 +1,30 @@
1
1
  require "dotenv"
2
+ require "json"
2
3
  require "logger"
4
+ require "socket"
3
5
  require "xmpp4r"
4
6
  require "xmpp4r/muc/helper/mucbrowser"
5
7
  require "xmpp4r/muc/helper/simplemucclient"
6
8
  require "xmpp4r/roster/helper/roster"
7
9
 
8
- require "del/connection"
9
10
  require "del/configuration"
11
+ require "del/connection"
10
12
  require "del/default_router"
11
13
  require "del/message"
12
14
  require "del/repository"
13
15
  require "del/robot"
16
+ require "del/socket_connection"
17
+ require "del/socket_server"
14
18
  require "del/source"
15
19
  require "del/user"
16
20
  require "del/version"
17
21
 
18
22
  module Del
19
- def self.start(dotenv_file:, startup_file:)
23
+ def self.start(dotenv_file:, startup_file: nil, start_server: true, socket_file: nil)
20
24
  puts "Loading... #{dotenv_file}"
21
25
  Dotenv.load(dotenv_file.to_s)
22
26
  Del.configure do |config|
27
+ config.socket_file = socket_file if socket_file
23
28
  config.router.register(/.*/) do |message|
24
29
  logger.debug(message.to_s)
25
30
  end
@@ -27,7 +32,7 @@ module Del
27
32
  load startup_file if startup_file && File.exist?(startup_file)
28
33
 
29
34
  del = Robot.new(configuration: configuration)
30
- del.get_funky!
35
+ del.get_funky!(start_server: start_server)
31
36
  end
32
37
 
33
38
  def self.configure
data/lib/del/cli.rb ADDED
@@ -0,0 +1,31 @@
1
+ require "del"
2
+ require "pathname"
3
+ require "thor"
4
+
5
+ module Del
6
+ class CLI < Thor
7
+ DEFAULT_RC=Pathname.new(Dir.home).join(".delrc")
8
+ class_option :dotenv_file, default: ENV.fetch("DELRC", DEFAULT_RC)
9
+ class_option :socket_file, default: Del::Configuration::SOCKET_FILE
10
+
11
+ desc "server <routes.rb>", "start server"
12
+ def server(startup_file = nil)
13
+ Del.start(
14
+ dotenv_file: options[:dotenv_file],
15
+ socket_file: options[:socket_file],
16
+ startup_file: startup_file,
17
+ )
18
+ end
19
+
20
+ desc "message <jid> <message>", "send a message to the Jabber ID"
21
+ def message(jid, message)
22
+ socket = UNIXSocket.new(options[:socket_file])
23
+ socket.puts(JSON.generate(command: :send_message, jid: jid, message: message))
24
+ say socket.readline, :green
25
+ rescue EOFError => error
26
+ say error.message, :red
27
+ ensure
28
+ socket&.close
29
+ end
30
+ end
31
+ end
@@ -1,5 +1,6 @@
1
1
  module Del
2
2
  class Configuration
3
+ SOCKET_FILE="/tmp/del.sock"
3
4
  attr_accessor :default_rooms
4
5
  attr_accessor :host
5
6
  attr_accessor :jid
@@ -11,18 +12,20 @@ module Del
11
12
  attr_accessor :rooms
12
13
  attr_accessor :router
13
14
  attr_accessor :users
15
+ attr_accessor :socket_file
14
16
 
15
17
  def initialize
16
18
  @default_rooms = ENV.fetch("DEL_ROOMS", '').split(',')
17
19
  @host = ENV.fetch("DEL_HOST", 'chat.hipchat.com')
18
20
  @jid = ENV.fetch("DEL_JID")
19
21
  @logger = Logger.new(STDOUT)
20
- @logger.level = Logger::INFO
22
+ @logger.level = ENV.fetch('LOG_LEVEL', Logger::INFO).to_i
21
23
  @muc_domain = ENV.fetch("DEL_MUC_DOMAIN", "conf.hipchat.com")
22
24
  @name = ENV.fetch("DEL_FULL_NAME")
23
25
  @password = ENV.fetch("DEL_PASSWORD")
24
26
  @rooms = Repository.new
25
27
  @router = DefaultRouter.new
28
+ @socket_file = SOCKET_FILE
26
29
  @users = Repository.new
27
30
  end
28
31
  end
@@ -1,13 +1,17 @@
1
- Del.configure do |config|
1
+ Del.configure do |x|
2
2
  puts "Registering custom routes."
3
3
 
4
- config.router.register(/.*/) do |message|
4
+ x.router.register(/.*/) do |message|
5
5
  Del.logger.info("Backwards!")
6
6
  message.reply(message.text.reverse)
7
7
  end
8
8
 
9
- config.router.register(/^cowsay (.*)/) do |message, match_data|
9
+ x.router.register(/^cowsay (.*)/) do |message, match_data|
10
10
  Del.logger.info("COWSAY!")
11
11
  message.reply("/code #{`cowsay #{match_data[1]}`}")
12
12
  end
13
+
14
+ x.router.register(/^[Hh]ello/) do |message|
15
+ message.reply("Hi!")
16
+ end
13
17
  end
@@ -13,6 +13,10 @@ module Del
13
13
  @lock.synchronize { @storage[id.to_s] }
14
14
  end
15
15
 
16
+ def find_by_value
17
+ @lock.synchronize { @storage.values.find { |x| yield x } }
18
+ end
19
+
16
20
  def find_all
17
21
  @lock.synchronize { @storage.keys }
18
22
  end
data/lib/del/robot.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module Del
2
2
  class Robot
3
- attr_reader :connection, :router
3
+ attr_reader :connection, :router, :server
4
4
  attr_reader :users, :rooms
5
5
  attr_reader :jid, :name
6
6
 
@@ -11,12 +11,13 @@ module Del
11
11
  @router = configuration.router
12
12
  @users = configuration.users
13
13
  @rooms = configuration.rooms
14
+ @server = SocketServer.new(socket_file: configuration.socket_file)
14
15
  end
15
16
 
16
- def get_funky!
17
- connection.connect(self)
17
+ def get_funky!(start_server: true)
18
18
  Del.logger.info("It's fire! 🔥")
19
- sleep
19
+ connection.connect(self)
20
+ server.run(self) if start_server
20
21
  rescue Interrupt
21
22
  connection.disconnect
22
23
  end
@@ -26,12 +27,28 @@ module Del
26
27
  router.route(Message.new(message, robot: self, source: source))
27
28
  end
28
29
 
29
- def send_message(jid, message, room: nil)
30
- if room.nil?
30
+ def send_message(jid, message)
31
+ if user?(jid)
31
32
  connection.deliver(jid, message)
32
33
  else
33
- connection.deliver_to_room(room, message)
34
+ connection.deliver_to_room(jid, message)
34
35
  end
35
36
  end
37
+
38
+ def execute(request)
39
+ case request['command']
40
+ when 'send_message'
41
+ send_message(request['jid'], request['message'])
42
+ "Sent!"
43
+ else
44
+ "Unknown"
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ def user?(jid)
51
+ users[jid]
52
+ end
36
53
  end
37
54
  end
@@ -0,0 +1,17 @@
1
+ module Del
2
+ class SocketConnection
3
+ def initialize(path:)
4
+ File.unlink(path) if File.exists?(path)
5
+ @server = UNIXServer.new(path)
6
+ end
7
+
8
+ def on_receive
9
+ socket = @server.accept
10
+ yield socket
11
+ rescue => error
12
+ Del.logger.error(error)
13
+ ensure
14
+ socket&.close
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Del
2
+ class SocketServer
3
+ def initialize(socket_file:)
4
+ @connection = SocketConnection.new(path: socket_file)
5
+ end
6
+
7
+ def run(robot)
8
+ loop do
9
+ @connection.on_receive do |socket|
10
+ line = socket.readline
11
+ Del.logger.debug(line)
12
+ socket.write(robot.execute(JSON.parse(line)))
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
data/lib/del/source.rb CHANGED
@@ -12,11 +12,11 @@ module Del
12
12
  end
13
13
 
14
14
  def reply(robot, message)
15
- robot.send_message(user.jid, message, room: room)
15
+ robot.send_message(room || user.jid, message)
16
16
  end
17
17
 
18
18
  def to_s
19
- "#{user.mention_name}:#{room}:"
19
+ "#{user.mention_name}#{room ? ":#{room}" : nil}"
20
20
  end
21
21
  end
22
22
  end
data/lib/del/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Del
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.6"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: del
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - mo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-28 00:00:00.000000000 Z
11
+ date: 2018-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dotenv
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: thor
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.20'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.20'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -100,6 +114,7 @@ files:
100
114
  - del.gemspec
101
115
  - exe/del
102
116
  - lib/del.rb
117
+ - lib/del/cli.rb
103
118
  - lib/del/configuration.rb
104
119
  - lib/del/connection.rb
105
120
  - lib/del/default_router.rb
@@ -107,6 +122,8 @@ files:
107
122
  - lib/del/message.rb
108
123
  - lib/del/repository.rb
109
124
  - lib/del/robot.rb
125
+ - lib/del/socket_connection.rb
126
+ - lib/del/socket_server.rb
110
127
  - lib/del/source.rb
111
128
  - lib/del/user.rb
112
129
  - lib/del/version.rb