Skip to content
This repository was archived by the owner on Sep 29, 2025. It is now read-only.

Commit ab251ce

Browse files
committed
Real time server with lifecycle registration.
1 parent 1415612 commit ab251ce

File tree

16 files changed

+235
-36
lines changed

16 files changed

+235
-36
lines changed

.rubocop_todo.yml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,26 @@
11
# This configuration was generated by
22
# `rubocop --auto-gen-config`
3-
# on 2020-10-14 08:19:11 -0400 using RuboCop version 0.81.0.
3+
# on 2020-11-14 17:11:37 -0500 using RuboCop version 0.81.0.
44
# The point is for the user to remove these configuration records
55
# one by one as the offenses are removed from the code base.
66
# Note that changes in the inspected code, or installation of new
77
# versions of RuboCop, may require this file to be generated again.
88

99
# Offense count: 1
10+
Lint/AmbiguousOperator:
11+
Exclude:
12+
- 'spec/slack-ruby-bot-server-rtm/lifecycle_spec.rb'
13+
14+
# Offense count: 1
15+
# Configuration parameters: IgnoreImplicitReferences.
16+
Lint/ShadowedArgument:
17+
Exclude:
18+
- 'lib/slack-ruby-bot-server-rtm/lifecycle.rb'
19+
20+
# Offense count: 2
1021
# Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
1122
# AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
1223
Naming/FileName:
1324
Exclude:
1425
- 'lib/slack-ruby-bot-server-rtm.rb'
26+
- 'lib/slack-ruby-bot-server-rtm/ext/slack-ruby-bot.rb'

Gemfile

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ else
1919
warn "Invalid ENV['DATABASE_ADAPTER']: #{ENV['DATABASE_ADAPTER']}."
2020
end
2121

22+
gem 'slack-ruby-bot-server', github: 'dblock/slack-ruby-bot-server', branch: 'extract-rtm'
23+
2224
gemspec
2325

2426
group :development, :test do
@@ -36,5 +38,5 @@ group :development, :test do
3638
end
3739

3840
group :test do
39-
gem 'slack-ruby-danger', '~> 0.1.0', require: false
41+
gem 'slack-ruby-danger', '~> 0.2.0', require: false
4042
end

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Slack Ruby Bot Server RealTime (RTM) Extension
44
[![Gem Version](https://badge.fury.io/rb/slack-ruby-bot-server-rtm.svg)](https://badge.fury.io/rb/slack-ruby-bot-server-rtm)
55
[![Build Status](https://travis-ci.org/slack-ruby/slack-ruby-bot-server-rtm.svg?branch=master)](https://travis-ci.org/slack-ruby/slack-ruby-bot-server-rtm)
66

7-
An extension to [slack-ruby-bot-server](https://github.com/slack-ruby/slack-ruby-bot-server) that makes it easy to handle Slack RTM bots.
7+
An extension to [slack-ruby-bot-server](https://github.com/slack-ruby/slack-ruby-bot-server) that makes it easy to implement Slack RTM bots.
88

99
### Sample
1010

lib/slack-ruby-bot-server-rtm.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# frozen_string_literal: true
22

3+
require 'slack-ruby-bot'
34
require 'slack-ruby-bot-server'
45

56
require_relative 'slack-ruby-bot-server-rtm/version'
7+
require_relative 'slack-ruby-bot-server-rtm/server'
68
require_relative 'slack-ruby-bot-server-rtm/config'
9+
require_relative 'slack-ruby-bot-server-rtm/ext'
10+
require_relative 'slack-ruby-bot-server-rtm/lifecycle'

lib/slack-ruby-bot-server-rtm/config.rb

Lines changed: 3 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -5,42 +5,13 @@ module RealTime
55
module Config
66
extend self
77

8-
ATTRIBUTES = %i[
9-
callbacks
10-
].freeze
11-
12-
attr_accessor(*Config::ATTRIBUTES)
8+
attr_accessor :server_class
139

1410
def reset!
15-
self.callbacks = Hash.new { |h, k| h[k] = [] }
16-
end
17-
18-
def on(type, *values, &block)
19-
value_key = values.compact.join('/') if values.any?
20-
key = [type.to_s, value_key].compact.join('/')
21-
callbacks[key] << block
11+
self.server_class = SlackRubyBotServer::RealTime::Server
2212
end
2313

24-
def run_callbacks(type, value, args)
25-
callbacks = []
26-
27-
keys = ([type.to_s] + Array(value)).compact
28-
29-
# more specific callbacks first
30-
while keys.any?
31-
callbacks += self.callbacks[keys.join('/')]
32-
keys.pop
33-
end
34-
35-
return nil unless callbacks&.any?
36-
37-
callbacks.each do |c|
38-
rc = c.call(args || value)
39-
return rc if rc
40-
end
41-
42-
nil
43-
end
14+
reset!
4415
end
4516

4617
class << self
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# frozen_string_literal: true
2+
3+
require_relative 'ext/slack-ruby-bot'
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# frozen_string_literal: true
2+
3+
require_relative 'slack-ruby-bot/client'
4+
require_relative 'slack-ruby-bot/commands/base'
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# frozen_string_literal: true
2+
3+
module SlackRubyBot
4+
class Client
5+
# keep track of the team that the client is connected to
6+
attr_accessor :owner
7+
end
8+
end
9+
10+
SlackRubyBot::Client.logger.level = Logger::WARN
11+
12+
Slack::RealTime::Client.configure do |config|
13+
config.store_class = Slack::RealTime::Stores::Starter
14+
end
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# frozen_string_literal: true
2+
3+
module SlackRubyBot
4+
module Commands
5+
class Base
6+
class << self
7+
alias _invoke invoke
8+
9+
def invoke(client, data)
10+
_invoke client, data
11+
rescue StandardError => e
12+
logger.info "#{name.demodulize.upcase}: #{client.owner}, #{e.class}: #{e}"
13+
logger.debug e.backtrace.join("\n")
14+
client.say(channel: data.channel, text: e.message)
15+
true
16+
end
17+
end
18+
end
19+
end
20+
end
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# frozen_string_literal: true
2+
3+
SlackRubyBotServer::Config.service_class.instance.on :starting do |team, _error, options|
4+
SlackRubyBotServer::Config.service_class.instance.logger.info "Starting real-time team #{team}."
5+
options = { team: team }
6+
server = SlackRubyBotServer::RealTime::Config.server_class.new(options)
7+
SlackRubyBotServer::RealTime::Server.start_server! team, server
8+
end
9+
10+
SlackRubyBotServer::Config.service_class.instance.on :restarting do |team, _error, options|
11+
SlackRubyBotServer::Config.service_class.instance.logger.info "Restarting real-time team #{team}."
12+
SlackRubyBotServer::RealTime::Server.start_server! team, server, options[:wait]
13+
end
14+
15+
SlackRubyBotServer::Config.service_class.instance.on :stopped do |team, _error, _options|
16+
SlackRubyBotServer::Config.service_class.instance.logger.info "Stopping real-time team #{team}."
17+
begin
18+
team.server&.stop!
19+
ensure
20+
team.server = nil
21+
end
22+
end
23+
24+
SlackRubyBotServer::Config.service_class.instance.on :deactivated do |team, _error, _options|
25+
SlackRubyBotServer::Config.service_class.instance.logger.info "De-activating real-time team #{team}."
26+
team.server = nil
27+
end

0 commit comments

Comments
 (0)