slack-ruby-bot-server 0.7.0 → 0.8.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
  SHA1:
3
- metadata.gz: 1cc9126666813e0a880a4c970ff259ea90fd0954
4
- data.tar.gz: 0eede9635d5aca9c6db238e8bb1a3bcf86614564
3
+ metadata.gz: c2baab12040f4100e3fb8ece5469b8b4ed6616f2
4
+ data.tar.gz: 45d3c6c0c456033a0a1c799ab71c298b3b7d72b6
5
5
  SHA512:
6
- metadata.gz: ea825ac737ceb089ad5460b40ff98607d9424bf2d6b9d196351399e73ce065581303d996c105dc20d9c88d4d21e7fa222f7cc65ad9d07e9b22655c01a9c0bd21
7
- data.tar.gz: 91ed370e494c05e9543aba95379dcecdfdd0513f535a75d349983d7244cb9b4f69590584ad25558ccb4c094934f44b02920c7d255d676cb8341930d4c08e19f2
6
+ metadata.gz: fced549dc1ec1f687223b076c6c73d50e5d14fd1976dcf007f392beb8b9e7f0b2c0519d011acbd1d20db7a86e3cee58b3974f0f444c1013d5edb10e8501f593e
7
+ data.tar.gz: 383451e38ac282f35ee977179a2e20a1df09ba40664cb2c38dd1a28d5fa1cc28bbf31de19c0bdfe2682df4d7f003d788983927f5973d0fbcc8356add93475f2a
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2018-08-22 08:29:35 -0400 using RuboCop version 0.58.2.
3
+ # on 2018-09-08 18:09:56 -0400 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,6 +16,11 @@ 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
+
19
24
  # Offense count: 3
20
25
  # Configuration parameters: Blacklist.
21
26
  # Blacklist: (?-mix:(^|\s)(EO[A-Z]{1}|END)(\s|$))
@@ -1,56 +1,61 @@
1
1
  ### Changelog
2
2
 
3
- #### 0.7.0 (8/22/2018)
3
+ #### 0.8.0 (2018/9/8)
4
+
5
+ * [#75](https://github.com/slack-ruby/slack-ruby-bot-server/pull/75): Default to `async-websocket` instead of `celluloid-io` - [@dblock](https://github.com/dblock).
6
+ * [#76](https://github.com/slack-ruby/slack-ruby-bot-server/pull/76): Adjust wait time on restart on Slack::Web::Api::Errors::TooManyRequestsError - [@dblock](https://github.com/dblock).
7
+
8
+ #### 0.7.0 (2018/8/22)
4
9
 
5
10
  * [#60](https://github.com/slack-ruby/slack-ruby-bot-server/pull/60): Log caught Standard::Error backtrace at debug-level - [@alexagranov](https://github.com/alexagranov).
6
11
  * [#65](https://github.com/slack-ruby/slack-ruby-bot-server/pull/65): Updated Capybara and selenium-webdriver - [@dblock](https://github.com/dblock).
7
12
  * [#67](https://github.com/slack-ruby/slack-ruby-bot-server/pull/67): Only load the OTR::ActiveRecord::ConnectionManagement middleware when the OTR module is included. This module isn't needed when using Rails - [@darbyfrey](https://github.com/darbyfrey).
8
13
  * [#74](https://github.com/slack-ruby/slack-ruby-bot-server/pull/74): Added ping worker, will restart offline bots - [@dblock](https://github.com/dblock).
9
14
 
10
- #### 0.6.1 (3/29/2017)
15
+ #### 0.6.1 (2017/3/29)
11
16
 
12
17
  * [#54](https://github.com/slack-ruby/slack-ruby-bot-server/pull/54): Removing one more Mongoid dependency when rescuing from _invoke - [@alexagranov](https://github.com/alexagranov).
13
18
  * [#53](https://github.com/slack-ruby/slack-ruby-bot-server/pull/53): No need for `otr-activerecord` if using activerecord under Rails - [@alexagranov](https://github.com/alexagranov).
14
19
 
15
- #### 0.6.0 (3/12/2017)
20
+ #### 0.6.0 (2017/3/12)
16
21
 
17
22
  * [#38](https://github.com/slack-ruby/slack-ruby-bot-server/issues/7): Added ActiveRecord support - [@zachfeldman](https://github.com/zachfeldman), [@spencerldixon](https://github.com/spencerldixon), [@dblock](https://github.com/dblock).
18
23
  * [#45](https://github.com/slack-ruby/slack-ruby-bot-server/pull/45): Updated grape-roar to 0.4.0 - [@swalberg](https://github.com/swalberg).
19
24
  * [#49](https://github.com/slack-ruby/slack-ruby-bot-server/pull/49): Run tests in the sample apps part of CI - [@dblock](https://github.com/dblock).
20
25
 
21
- #### 0.5.0 (2/9/2017)
26
+ #### 0.5.0 (2017/2/9)
22
27
 
23
28
  * [#43](https://github.com/slack-ruby/slack-ruby-bot-server/pull/43): Fix: `cannot load kaminari/grape` - [@dblock](https://github.com/dblock).
24
29
  * [#43](https://github.com/slack-ruby/slack-ruby-bot-server/pull/43): Fix: `undefined method '[]' for nil:NilClass` in APIs - [@dblock](https://github.com/dblock).
25
30
  * [#28](https://github.com/slack-ruby/slack-ruby-bot-server/pull/28): Use slack-ruby-danger gem - [@dblock](https://github.com/dblock).
26
31
  * [#31](https://github.com/slack-ruby/slack-ruby-bot-server/pull/31): Adds MONGODB_URI as environment variable for MongoDB - [@corprew](https://github.com/corprew).
27
32
 
28
- #### 0.4.0 (8/29/2016)
33
+ #### 0.4.0 (2016/8/29)
29
34
 
30
35
  * [#25](https://github.com/slack-ruby/slack-ruby-bot-server/pull/25): Added [danger](http://danger.systems), PR linting - [@dblock](https://github.com/dblock).
31
36
  * The `reset` and `resetting` callbacks have been removed - [@dblock](https://github.com/dblock).
32
37
  * Callbacks receive `team` and `error`, but no longer `server` - [@dblock](https://github.com/dblock).
33
38
  * [#23](https://github.com/slack-ruby/slack-ruby-bot-server/issues/23): Fix: server-side removal of bot doesn't deactivate it - [@dblock](https://github.com/dblock).
34
39
 
35
- #### 0.3.1 (7/10/2016)
40
+ #### 0.3.1 (2016/7/10)
36
41
 
37
42
  * [#22](https://github.com/slack-ruby/slack-ruby-bot-server/issues/22): Subclassing `SlackRubyBotServer::App` creates an `.instance` of child class - [@dblock](https://github.com/dblock).
38
43
 
39
- #### 0.3.0 (7/4/2016)
44
+ #### 0.3.0 (2016/7/4)
40
45
 
41
46
  * Specify the server class via `SlackRubyBotServer.configure`, default is `SlackRubyBotServer::Server` - [@dblock](https://github.com/dblock).
42
47
  * Added service management lifecycle callbacks when a new team is registered, deactivated, etc - [@dblock](https://github.com/dblock).
43
48
 
44
- #### 0.2.0 (6/21/2016)
49
+ #### 0.2.0 (2016/6/21)
45
50
 
46
51
  * Relaxed dependency versions, notably enabling grape 0.16.2 and Swagger 0.21.0 that uses Swagger 2.0 spec - [@dblock](https://github.com/dblock).
47
52
  * [#21](https://github.com/slack-ruby/slack-ruby-bot-server/issues/21): Fix: pass additional options through into `SlackRubyBot::Server` - [@dblock](https://github.com/dblock).
48
53
 
49
- #### 0.1.1 (6/4/2016)
54
+ #### 0.1.1 (2016/6/4)
50
55
 
51
56
  * [#14](https://github.com/slack-ruby/slack-ruby-bot-server/pull/14): Moved config/initializers into the library - [@tmsrjs](https://github.com/tmsrjs).
52
57
 
53
- #### 0.1.0 (6/1/2016)
58
+ #### 0.1.0 (2016/6/1)
54
59
 
55
60
  * Initial public release - [@dblock](https://github.com/dblock).
56
61
  * Renamed slack-bot-server to slack-ruby-bot-server - [@dblock](https://github.com/dblock).
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 **stable** release of slack-ruby-bot-server, 0.7.0. 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.8.0. See [UPGRADING](UPGRADING.md) when upgrading from an older version.
17
17
 
18
18
  ### Try Me
19
19
 
@@ -1,6 +1,14 @@
1
1
  Upgrading Slack-Ruby-Bot-Server
2
2
  ===============================
3
3
 
4
+ ### Upgrading to >= 0.8.0
5
+
6
+ ### Different Asynchronous I/O Library
7
+
8
+ The library now uses [async-websocket](https://github.com/socketry/async-websocket) instead of [celluloid-io](https://github.com/celluloid/celluloid-io). If your application is built on Celluloid you may need to make changes and use `Async::Reactor.run` and the likes.
9
+
10
+ See [#75](https://github.com/slack-ruby/slack-ruby-bot-server/pull/75) for more information.
11
+
4
12
  ### Upgrading to >= 0.7.0
5
13
 
6
14
  #### New Ping Worker
@@ -1,4 +1,4 @@
1
- require 'celluloid/current'
1
+ require 'async/websocket'
2
2
 
3
3
  require 'grape-swagger'
4
4
  require 'slack-ruby-bot'
@@ -1,7 +1,7 @@
1
+ require 'active_support/core_ext/string/filters'
2
+
1
3
  module SlackRubyBotServer
2
4
  class Ping
3
- include Celluloid
4
-
5
5
  attr_reader :client
6
6
  attr_reader :options
7
7
  attr_reader :error_count
@@ -13,16 +13,29 @@ module SlackRubyBotServer
13
13
  end
14
14
 
15
15
  def start!
16
- every ping_interval do
17
- check!
16
+ ::Async::Reactor.run do |task|
17
+ run(task)
18
18
  end
19
19
  end
20
20
 
21
21
  private
22
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
+
23
35
  def check!
24
36
  if online?
25
37
  @error_count = 0
38
+ true
26
39
  else
27
40
  down!
28
41
  end
@@ -30,9 +43,11 @@ module SlackRubyBotServer
30
43
  case e.message
31
44
  when 'account_inactive', 'invalid_auth' then
32
45
  logger.warn "Error pinging team #{owner.id}: #{e.message}, terminating."
33
- terminate
46
+ false
34
47
  else
35
- logger.warn "Error pinging team #{owner.id}: #{e.message}."
48
+ message = e.message.truncate(24, separator: "\n", omission: '...')
49
+ logger.warn "Error pinging team #{owner.id}: #{message}."
50
+ true
36
51
  end
37
52
  end
38
53
 
@@ -51,14 +66,22 @@ module SlackRubyBotServer
51
66
  def down!
52
67
  logger.warn "DOWN: #{owner}, #{retries_left} #{retries_left == 1 ? 'retry' : 'retries'} left"
53
68
  @error_count += 1
54
- return if retries_left?
69
+ return true if retries_left?
55
70
  restart!
71
+ false
56
72
  end
57
73
 
58
74
  def restart!
59
75
  logger.warn "RESTART: #{owner}"
60
- driver.emit(:close, WebSocket::Driver::CloseEvent.new(1001, 'bot offline')) if driver
61
- terminate
76
+ begin
77
+ connection.close
78
+ rescue Async::Wrapper::Cancelled
79
+ # ignore, from connection.close
80
+ end
81
+ driver.close
82
+ driver.emit(:close, WebSocket::Driver::CloseEvent.new(1001, 'bot offline'))
83
+ rescue StandardError => e
84
+ logger.warn "Error restarting team #{owner.id}: #{e.message}."
62
85
  end
63
86
 
64
87
  def ping_interval
@@ -85,6 +108,10 @@ module SlackRubyBotServer
85
108
  socket.instance_variable_get(:@driver) if socket
86
109
  end
87
110
 
111
+ def connection
112
+ driver.instance_variable_get(:@socket) if driver
113
+ end
114
+
88
115
  def logger
89
116
  @logger ||= begin
90
117
  STDOUT.sync = true
@@ -97,6 +97,7 @@ module SlackRubyBotServer
97
97
  logger.error "#{team.name}: #{e.message}, team will be deactivated."
98
98
  deactivate!(team)
99
99
  else
100
+ wait = e.retry_after if e.is_a?(Slack::Web::Api::Errors::TooManyRequestsError)
100
101
  logger.error "#{team.name}: #{e.message}, restarting in #{wait} second(s)."
101
102
  sleep(wait)
102
103
  start_server! team, server, [wait * 2, 60].min
@@ -1,3 +1,3 @@
1
1
  module SlackRubyBotServer
2
- VERSION = '0.7.0'.freeze
2
+ VERSION = '0.8.0'.freeze
3
3
  end
@@ -7,12 +7,6 @@ require 'yaml'
7
7
 
8
8
  ActiveRecord::Base.establish_connection(YAML.load_file('config/postgresql.yml')[ENV['RACK_ENV']])
9
9
 
10
- if ENV['RACK_ENV'] == 'development'
11
- puts 'Loading NewRelic in developer mode ...'
12
- require 'new_relic/rack/developer_mode'
13
- use NewRelic::Rack::DeveloperMode
14
- end
15
-
16
10
  NewRelic::Agent.manual_start
17
11
 
18
12
  SlackRubyBotServer::App.instance.prepare!
@@ -6,12 +6,6 @@ require_relative 'commands'
6
6
 
7
7
  Mongoid.load!(File.expand_path('config/mongoid.yml', __dir__), ENV['RACK_ENV'])
8
8
 
9
- if ENV['RACK_ENV'] == 'development'
10
- puts 'Loading NewRelic in developer mode ...'
11
- require 'new_relic/rack/developer_mode'
12
- use NewRelic::Rack::DeveloperMode
13
- end
14
-
15
9
  NewRelic::Agent.manual_start
16
10
 
17
11
  SlackRubyBotServer::App.instance.prepare!
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
14
14
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec)/}) }
15
15
  spec.require_paths = ['lib']
16
16
 
17
- spec.add_dependency 'celluloid-io'
17
+ spec.add_dependency 'async-websocket'
18
18
  spec.add_dependency 'foreman'
19
19
  spec.add_dependency 'grape'
20
20
  spec.add_dependency 'grape-roar', '>= 0.4.0'
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slack-ruby-bot-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.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: 2018-08-22 00:00:00.000000000 Z
11
+ date: 2018-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: celluloid-io
14
+ name: async-websocket
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -295,7 +295,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
295
295
  version: '0'
296
296
  requirements: []
297
297
  rubyforge_project:
298
- rubygems_version: 2.6.12
298
+ rubygems_version: 2.6.14
299
299
  signing_key:
300
300
  specification_version: 4
301
301
  summary: A Grape API serving a Slack bot to multiple teams.