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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 98fcac8e33fc669ff0a331717491c75cc7e819c1cf3c43b405901731ec4febc7
4
- data.tar.gz: 728424653814376e017fbfe66f0d9fadaa65f8d116c10fd8d4b108753f8052b6
3
+ metadata.gz: 02acf8078e1ec2fb418d45f9fac6823d7af6b473ad00c8992f59ff4a64311609
4
+ data.tar.gz: d1da43dc7201cd30a5e49eb6193eb476820edd936b804e714e8952aafaf4d566
5
5
  SHA512:
6
- metadata.gz: 44a081620509fa8a7e1effdf25f87a87e0c4b96c1ea67ccdad7cd02437c1bc0be74ec9e330816ba58c4642e8edf7e609734b1302c1bf6e4eea2445c4eff5dd76
7
- data.tar.gz: b2a3ab5234473ea2cb9cf8079425bc63e84b515c439cbe0042893ed9683b98d149d05fb1854108d928a92004e9eb5573c84f4bd197db9b496e61fa6321d1ac1f
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 2018-09-08 18:09:56 -0400 using RuboCop version 0.58.2.
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.8.3 (2019/01/17)
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 **next** release of slack-ruby-bot-server. Please see the documentation for the [last stable release, v0.8.2](https://github.com/slack-ruby/slack-ruby-bot-server/blob/v0.8.2/README.md) unless you're integrating with HEAD. See [UPGRADING](UPGRADING.md) when upgrading from an older version.
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,7 +3,6 @@ require 'async/websocket'
3
3
  require 'grape-swagger'
4
4
  require 'slack-ruby-bot'
5
5
  require 'slack-ruby-bot-server/server'
6
- require 'slack-ruby-bot-server/ping'
7
6
  require 'slack-ruby-bot-server/config'
8
7
 
9
8
  require 'slack-ruby-bot-server/ext'
@@ -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
@@ -1,3 +1,3 @@
1
1
  module SlackRubyBotServer
2
- VERSION = '0.8.3'.freeze
2
+ VERSION = '0.9.0'.freeze
3
3
  end
@@ -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.8.3
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-01-17 00:00:00.000000000 Z
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: '0'
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: '0'
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