del 0.1.5 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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