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 +4 -4
- data/README.md +1 -1
- data/bin/console +4 -0
- data/del.gemspec +1 -0
- data/exe/del +2 -7
- data/lib/del.rb +8 -3
- data/lib/del/cli.rb +31 -0
- data/lib/del/configuration.rb +4 -1
- data/lib/del/examples/routes.rb +7 -3
- data/lib/del/repository.rb +4 -0
- data/lib/del/robot.rb +24 -7
- data/lib/del/socket_connection.rb +17 -0
- data/lib/del/socket_server.rb +17 -0
- data/lib/del/source.rb +2 -2
- data/lib/del/version.rb +1 -1
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7dee4ec5ef43e37de14d0de384d7e687000a441ec855015e6670d3c8b0f7ea80
|
4
|
+
data.tar.gz: 8ed4c9ad2433d08f0ebd768b9f4d69aa8ce0d3fb3c5fc74ac0f1b7602267a6ad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 53fe4ef8ee840f91fa551dab83b17e5abc4ee2a286465cd92b707961d386f4bc71923c7b4c6f9848928e140b894be9ee4df0ce04104894d11fa81b98fe8e3f6f
|
7
|
+
data.tar.gz: c23d9d1db2ac27d59b65649a57c19aa55949fc192b7af2e68db25ff96fbfbb57ea8c7fa90e7de23a9f8f1129c6363d4998272637659a1d29dbc80ac3b6fca106
|
data/README.md
CHANGED
data/bin/console
CHANGED
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
|
-
|
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
|
data/lib/del/configuration.rb
CHANGED
@@ -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
|
data/lib/del/examples/routes.rb
CHANGED
@@ -1,13 +1,17 @@
|
|
1
|
-
Del.configure do |
|
1
|
+
Del.configure do |x|
|
2
2
|
puts "Registering custom routes."
|
3
3
|
|
4
|
-
|
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
|
-
|
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
|
data/lib/del/repository.rb
CHANGED
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
|
-
|
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
|
30
|
-
if
|
30
|
+
def send_message(jid, message)
|
31
|
+
if user?(jid)
|
31
32
|
connection.deliver(jid, message)
|
32
33
|
else
|
33
|
-
connection.deliver_to_room(
|
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
|
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
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.
|
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-
|
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
|