slack-ruby-bot-server 0.8.3 → 0.9.0
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 +4 -4
- data/.rubocop_todo.yml +1 -6
- data/CHANGELOG.md +5 -1
- data/README.md +1 -17
- data/UPGRADING.md +8 -0
- data/lib/slack-ruby-bot-server.rb +0 -1
- data/lib/slack-ruby-bot-server/config.rb +0 -2
- data/lib/slack-ruby-bot-server/server.rb +0 -12
- data/lib/slack-ruby-bot-server/service.rb +0 -1
- data/lib/slack-ruby-bot-server/version.rb +1 -1
- data/slack-ruby-bot-server.gemspec +1 -1
- metadata +4 -5
- data/lib/slack-ruby-bot-server/ping.rb +0 -149
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 02acf8078e1ec2fb418d45f9fac6823d7af6b473ad00c8992f59ff4a64311609
|
4
|
+
data.tar.gz: d1da43dc7201cd30a5e49eb6193eb476820edd936b804e714e8952aafaf4d566
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc2b495018d4d24f36c75eada4e9eb218205611bc2ab94d77b89326e4c23ac0e254302747a6d3bee758dc20fb46f44a4722da93fcac69a262754eb106aca80a6
|
7
|
+
data.tar.gz: 4e503d3c5f70d464a4c07f429cd81b1aa6bdc3414e95fa9b3e668ad6649f644e6df83a8401bf491147c9e5821a3b865052c3a74532cb4ca0e711a495047d5753
|
data/.rubocop_todo.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on
|
3
|
+
# on 2019-02-25 14:24:34 -0500 using RuboCop version 0.58.2.
|
4
4
|
# The point is for the user to remove these configuration records
|
5
5
|
# one by one as the offenses are removed from the code base.
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
@@ -16,11 +16,6 @@ Layout/IndentHeredoc:
|
|
16
16
|
- 'sample_apps/sample_app_activerecord/commands/help.rb'
|
17
17
|
- 'sample_apps/sample_app_mongoid/commands/help.rb'
|
18
18
|
|
19
|
-
# Offense count: 1
|
20
|
-
Lint/HandleExceptions:
|
21
|
-
Exclude:
|
22
|
-
- 'lib/slack-ruby-bot-server/ping.rb'
|
23
|
-
|
24
19
|
# Offense count: 3
|
25
20
|
# Configuration parameters: Blacklist.
|
26
21
|
# Blacklist: (?-mix:(^|\s)(EO[A-Z]{1}|END)(\s|$))
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
### Changelog
|
2
2
|
|
3
|
-
#### 0.
|
3
|
+
#### 0.9.0 (2019/2/25)
|
4
|
+
|
5
|
+
* [#93](https://github.com/slack-ruby/slack-ruby-bot-server/pull/93): Removed ping worker in favor of slack-ruby-client lower level ping - [@dblock](https://github.com/dblock).
|
6
|
+
|
7
|
+
#### 0.8.3 (2019/1/17)
|
4
8
|
|
5
9
|
* [#88](https://github.com/slack-ruby/slack-ruby-bot-server/issues/88): Fix: compatibility with Grape 1.2.x - [@dblock](https://github.com/dblock).
|
6
10
|
|
data/README.md
CHANGED
@@ -13,7 +13,7 @@ A library that contains a [Grape](http://github.com/ruby-grape/grape) API servin
|
|
13
13
|
|
14
14
|
### Stable Release
|
15
15
|
|
16
|
-
You're reading the documentation for the **
|
16
|
+
You're reading the documentation for the **stable** release of slack-ruby-bot-server, v0.9.0. See [UPGRADING](UPGRADING.md) when upgrading from an older version.
|
17
17
|
|
18
18
|
### Try Me
|
19
19
|
|
@@ -152,22 +152,6 @@ SlackRubyBotServer.configure do |config|
|
|
152
152
|
end
|
153
153
|
```
|
154
154
|
|
155
|
-
#### Ping Worker
|
156
|
-
|
157
|
-
Each `SlackRubyBotServer::Server` instance will start a ping worker that will periodically check the online status of the bot via the Slack web [auth.test](https://api.slack.com/methods/auth.test) and [users.getPresence](https://api.slack.com/methods/users.getPresence) APIs, and will forcefully close the connection if the bot goes offline, causing an automatic reconnect.
|
158
|
-
|
159
|
-
You can configure the ping interval, number of retries before restart, and disable the ping worker entirely.
|
160
|
-
|
161
|
-
```ruby
|
162
|
-
SlackRubyBotServer.configure do |config|
|
163
|
-
config.ping = {
|
164
|
-
enabled: true, # set to false to disable the ping worker
|
165
|
-
ping_interval: 30, # interval in seconds
|
166
|
-
retry_count: 3 # number of unsuccessful retries until a restart
|
167
|
-
}
|
168
|
-
end
|
169
|
-
```
|
170
|
-
|
171
155
|
### Access Tokens
|
172
156
|
|
173
157
|
By default the implementation of [Team](lib/slack-ruby-bot-server/models/team) stores a `bot_access_token` that grants a certain amount of privileges to the bot user as described in [Slack OAuth Docs](https://api.slack.com/docs/oauth). You may not want a bot user at all, or may require different auth scopes, such as `users.profile:read` to access user profile information via `Slack::Web::Client#users_profile_get`. To obtain the non-bot access token make the following changes.
|
data/UPGRADING.md
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
Upgrading Slack-Ruby-Bot-Server
|
2
2
|
===============================
|
3
3
|
|
4
|
+
### Upgrading to >= 0.9.0
|
5
|
+
|
6
|
+
### Removed Ping Worker
|
7
|
+
|
8
|
+
The ping worker that was added in 0.7.0 has been removed in favor of a lower level implementation in slack-ruby-client. Remove any references to `ping` options.
|
9
|
+
|
10
|
+
See [slack-ruby-client#226](https://github.com/slack-ruby/slack-ruby-client/pull/226) and [#93](https://github.com/slack-ruby/slack-ruby-bot-server/pull/93) for more information.
|
11
|
+
|
4
12
|
### Upgrading to >= 0.8.0
|
5
13
|
|
6
14
|
### Different Asynchronous I/O Library
|
@@ -3,11 +3,9 @@ module SlackRubyBotServer
|
|
3
3
|
extend self
|
4
4
|
|
5
5
|
attr_accessor :server_class
|
6
|
-
attr_accessor :ping
|
7
6
|
attr_accessor :database_adapter
|
8
7
|
|
9
8
|
def reset!
|
10
|
-
self.ping = nil
|
11
9
|
self.server_class = SlackRubyBotServer::Server
|
12
10
|
self.database_adapter = if defined?(::Mongoid)
|
13
11
|
:mongoid
|
@@ -7,7 +7,6 @@ module SlackRubyBotServer
|
|
7
7
|
def initialize(attrs = {})
|
8
8
|
attrs = attrs.dup
|
9
9
|
@team = attrs.delete(:team)
|
10
|
-
@ping_options = attrs.delete(:ping) || {}
|
11
10
|
raise 'Missing team' unless @team
|
12
11
|
attrs[:token] = @team.token
|
13
12
|
super(attrs)
|
@@ -24,19 +23,8 @@ module SlackRubyBotServer
|
|
24
23
|
|
25
24
|
private
|
26
25
|
|
27
|
-
attr_reader :ping_options
|
28
|
-
|
29
|
-
def create_ping
|
30
|
-
return unless !ping_options.key?(:enabled) || ping_options[:enabled]
|
31
|
-
SlackRubyBotServer::Ping.new(client, ping_options)
|
32
|
-
end
|
33
|
-
|
34
26
|
def open!
|
35
27
|
client.owner = team
|
36
|
-
client.on :open do |_event|
|
37
|
-
worker = create_ping
|
38
|
-
worker.start! if worker
|
39
|
-
end
|
40
28
|
end
|
41
29
|
end
|
42
30
|
end
|
@@ -31,7 +31,6 @@ module SlackRubyBotServer
|
|
31
31
|
run_callbacks :starting, team
|
32
32
|
logger.info "Starting team #{team}."
|
33
33
|
options = { team: team }
|
34
|
-
options[:ping] = SlackRubyBotServer::Config.ping if SlackRubyBotServer::Config.ping
|
35
34
|
server = SlackRubyBotServer::Config.server_class.new(options)
|
36
35
|
start_server! team, server
|
37
36
|
run_callbacks :started, team
|
@@ -23,6 +23,6 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_dependency 'rack-cors'
|
24
24
|
spec.add_dependency 'rack-rewrite'
|
25
25
|
spec.add_dependency 'rack-server-pages'
|
26
|
-
spec.add_dependency 'slack-ruby-bot'
|
26
|
+
spec.add_dependency 'slack-ruby-bot', '>= 0.12.0'
|
27
27
|
spec.add_dependency 'unicorn'
|
28
28
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slack-ruby-bot-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Doubrovkine
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-02-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async-websocket
|
@@ -142,14 +142,14 @@ dependencies:
|
|
142
142
|
requirements:
|
143
143
|
- - ">="
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
145
|
+
version: 0.12.0
|
146
146
|
type: :runtime
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - ">="
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
152
|
+
version: 0.12.0
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: unicorn
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -225,7 +225,6 @@ files:
|
|
225
225
|
- lib/slack-ruby-bot-server/models/team/activerecord.rb
|
226
226
|
- lib/slack-ruby-bot-server/models/team/methods.rb
|
227
227
|
- lib/slack-ruby-bot-server/models/team/mongoid.rb
|
228
|
-
- lib/slack-ruby-bot-server/ping.rb
|
229
228
|
- lib/slack-ruby-bot-server/rspec.rb
|
230
229
|
- lib/slack-ruby-bot-server/rspec/fabricators/team.rb
|
231
230
|
- lib/slack-ruby-bot-server/server.rb
|
@@ -1,149 +0,0 @@
|
|
1
|
-
require 'active_support/core_ext/string/filters'
|
2
|
-
|
3
|
-
module SlackRubyBotServer
|
4
|
-
class Ping
|
5
|
-
attr_reader :client
|
6
|
-
attr_reader :options
|
7
|
-
attr_reader :error_count
|
8
|
-
|
9
|
-
def initialize(client, options = {})
|
10
|
-
@options = options
|
11
|
-
@client = client
|
12
|
-
@error_count = 0
|
13
|
-
end
|
14
|
-
|
15
|
-
def start!
|
16
|
-
::Async::Reactor.run do |task|
|
17
|
-
run(task)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def run(task)
|
24
|
-
logger.debug "PING: #{owner}, every #{ping_interval} second(s)"
|
25
|
-
loop do
|
26
|
-
task.sleep ping_interval
|
27
|
-
break unless check!
|
28
|
-
end
|
29
|
-
logger.debug "PING: #{owner}, done."
|
30
|
-
rescue StandardError => e
|
31
|
-
logger.error e
|
32
|
-
raise e
|
33
|
-
end
|
34
|
-
|
35
|
-
def check!
|
36
|
-
if online?
|
37
|
-
@error_count = 0
|
38
|
-
true
|
39
|
-
else
|
40
|
-
down!
|
41
|
-
end
|
42
|
-
rescue StandardError => e
|
43
|
-
case e.message
|
44
|
-
when 'account_inactive', 'invalid_auth' then
|
45
|
-
logger.warn "Error pinging team #{owner.id}: #{e.message}, terminating."
|
46
|
-
false
|
47
|
-
else
|
48
|
-
message = e.message.truncate(24, separator: "\n", omission: '...')
|
49
|
-
logger.warn "Error pinging team #{owner.id}: #{message}."
|
50
|
-
true
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def offline?
|
55
|
-
!online?
|
56
|
-
end
|
57
|
-
|
58
|
-
def online?
|
59
|
-
presence.online
|
60
|
-
end
|
61
|
-
|
62
|
-
def presence
|
63
|
-
owner.ping![:presence]
|
64
|
-
end
|
65
|
-
|
66
|
-
def down!
|
67
|
-
logger.warn "DOWN: #{owner}, #{retries_left} #{retries_left == 1 ? 'retry' : 'retries'} left"
|
68
|
-
@error_count += 1
|
69
|
-
return true if retries_left?
|
70
|
-
restart!
|
71
|
-
end
|
72
|
-
|
73
|
-
def restart!
|
74
|
-
logger.warn "RESTART: #{owner}"
|
75
|
-
close_driver
|
76
|
-
emit_close
|
77
|
-
close_connection
|
78
|
-
false
|
79
|
-
rescue StandardError => e
|
80
|
-
logger.warn "Error restarting team #{owner.id}: #{e.message}."
|
81
|
-
true
|
82
|
-
end
|
83
|
-
|
84
|
-
def close_connection
|
85
|
-
return unless connection
|
86
|
-
connection.close
|
87
|
-
rescue Async::Wrapper::Cancelled
|
88
|
-
# ignore, from connection.close
|
89
|
-
rescue StandardError => e
|
90
|
-
logger.warn "Error closing connection for #{owner.id}: #{e.message}."
|
91
|
-
raise e
|
92
|
-
end
|
93
|
-
|
94
|
-
def close_driver
|
95
|
-
return unless driver
|
96
|
-
driver.close
|
97
|
-
rescue StandardError => e
|
98
|
-
logger.warn "Error closing driver for #{owner.id}: #{e.message}."
|
99
|
-
raise e
|
100
|
-
end
|
101
|
-
|
102
|
-
def emit_close
|
103
|
-
return unless driver
|
104
|
-
driver.emit(:close, WebSocket::Driver::CloseEvent.new(1001, 'bot offline'))
|
105
|
-
rescue StandardError => e
|
106
|
-
logger.warn "Error sending :close event to driver for #{owner.id}: #{e.message}."
|
107
|
-
raise e
|
108
|
-
end
|
109
|
-
|
110
|
-
def ping_interval
|
111
|
-
options[:ping_interval] || 60
|
112
|
-
end
|
113
|
-
|
114
|
-
def retries_left?
|
115
|
-
retry_count - error_count >= 0
|
116
|
-
end
|
117
|
-
|
118
|
-
def retries_left
|
119
|
-
[0, retry_count - error_count].max
|
120
|
-
end
|
121
|
-
|
122
|
-
def retry_count
|
123
|
-
options[:retry_count] || 2
|
124
|
-
end
|
125
|
-
|
126
|
-
def socket
|
127
|
-
client.instance_variable_get(:@socket) if client
|
128
|
-
end
|
129
|
-
|
130
|
-
def driver
|
131
|
-
socket.instance_variable_get(:@driver) if socket
|
132
|
-
end
|
133
|
-
|
134
|
-
def connection
|
135
|
-
driver.instance_variable_get(:@socket) if driver
|
136
|
-
end
|
137
|
-
|
138
|
-
def logger
|
139
|
-
@logger ||= begin
|
140
|
-
STDOUT.sync = true
|
141
|
-
Logger.new(STDOUT)
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
def owner
|
146
|
-
client.owner
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|