slack-ruby-bot-server 0.8.3 → 0.9.0

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: 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