slack-ruby-client 1.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/FUNDING.yml +1 -0
- data/.github/workflows/integration_test.yml +45 -0
- data/.github/workflows/lint.yml +14 -0
- data/.github/workflows/pr_lint.yml +21 -0
- data/.github/workflows/test.yml +37 -0
- data/.gitignore +4 -3
- data/.rubocop.yml +6 -1
- data/.rubocop_todo.yml +88 -34
- data/.ruby-version +1 -0
- data/CHANGELOG.md +36 -0
- data/CONTRIBUTING.md +6 -5
- data/Gemfile +13 -1
- data/Gemfile.danger +6 -0
- data/README.md +78 -76
- data/RELEASING.md +2 -2
- data/SECURITY.md +9 -0
- data/UPGRADING.md +28 -0
- data/bin/commands/admin_analytics.rb +16 -10
- data/bin/commands/admin_apps.rb +48 -42
- data/bin/commands/admin_apps_approved.rb +17 -11
- data/bin/commands/admin_apps_requests.rb +28 -11
- data/bin/commands/admin_apps_restricted.rb +17 -11
- data/bin/commands/admin_audit_anomaly_allow.rb +29 -0
- data/bin/commands/admin_auth_policy.rb +37 -31
- data/bin/commands/admin_barriers.rb +44 -38
- data/bin/commands/admin_conversations.rb +221 -163
- data/bin/commands/admin_conversations_ekm.rb +17 -11
- data/bin/commands/admin_conversations_restrictAccess.rb +35 -29
- data/bin/commands/admin_emoji.rb +50 -44
- data/bin/commands/admin_inviteRequests.rb +34 -28
- data/bin/commands/admin_inviteRequests_approved.rb +16 -10
- data/bin/commands/admin_inviteRequests_denied.rb +16 -10
- data/bin/commands/admin_roles.rb +46 -0
- data/bin/commands/admin_teams.rb +26 -20
- data/bin/commands/admin_teams_admins.rb +16 -10
- data/bin/commands/admin_teams_owners.rb +16 -10
- data/bin/commands/admin_teams_settings.rb +59 -53
- data/bin/commands/admin_usergroups.rb +45 -39
- data/bin/commands/admin_users.rb +91 -85
- data/bin/commands/admin_users_session.rb +72 -66
- data/bin/commands/admin_users_unsupportedVersions.rb +21 -0
- data/bin/commands/api.rb +14 -8
- data/bin/commands/apps.rb +15 -9
- data/bin/commands/apps_connections.rb +13 -7
- data/bin/commands/apps_event_authorizations.rb +16 -10
- data/bin/commands/apps_manifest.rb +48 -41
- data/bin/commands/auth.rb +21 -15
- data/bin/commands/auth_teams.rb +16 -10
- data/bin/commands/bookmarks.rb +59 -0
- data/bin/commands/bots.rb +15 -9
- data/bin/commands/calls.rb +49 -43
- data/bin/commands/calls_participants.rb +24 -18
- data/bin/commands/chat.rb +150 -141
- data/bin/commands/chat_scheduledMessages.rb +19 -13
- data/bin/commands/conversations.rb +233 -225
- data/bin/commands/dialog.rb +15 -9
- data/bin/commands/dnd.rb +46 -40
- data/bin/commands/emoji.rb +14 -7
- data/bin/commands/files.rb +112 -83
- data/bin/commands/files_comments.rb +15 -9
- data/bin/commands/files_remote.rb +73 -67
- data/bin/commands/functions_workflows_steps.rb +22 -0
- data/bin/commands/functions_workflows_steps_responses.rb +22 -0
- data/bin/commands/migration.rb +16 -10
- data/bin/commands/oauth.rb +18 -12
- data/bin/commands/oauth_v2.rb +28 -22
- data/bin/commands/openid_connect.rb +26 -20
- data/bin/commands/pins.rb +33 -26
- data/bin/commands/reactions.rb +52 -46
- data/bin/commands/reminders.rb +53 -47
- data/bin/commands/rtm.rb +15 -24
- data/bin/commands/search.rb +43 -37
- data/bin/commands/stars.rb +38 -32
- data/bin/commands/team.rb +47 -38
- data/bin/commands/team_billing.rb +13 -7
- data/bin/commands/team_preferences.rb +13 -7
- data/bin/commands/team_profile.rb +14 -8
- data/bin/commands/tooling_tokens.rb +14 -8
- data/bin/commands/usergroups.rb +64 -58
- data/bin/commands/usergroups_users.rb +27 -21
- data/bin/commands/users.rb +111 -105
- data/bin/commands/users_admin.rb +28 -22
- data/bin/commands/users_prefs.rb +13 -7
- data/bin/commands/users_profile.rb +26 -20
- data/bin/commands/views.rb +47 -39
- data/bin/commands/workflows.rb +36 -30
- data/bin/slack +48 -43
- data/lib/slack/real_time/api/message.rb +3 -2
- data/lib/slack/real_time/api/templates/event_handler.erb +5 -1
- data/lib/slack/real_time/api/typing.rb +2 -1
- data/lib/slack/real_time/client.rb +10 -28
- data/lib/slack/real_time/config.rb +3 -3
- data/lib/slack/real_time/models/channel.rb +4 -0
- data/lib/slack/real_time/models/{group.rb → mpim.rb} +1 -1
- data/lib/slack/real_time/models.rb +2 -1
- data/lib/slack/real_time/stores/base.rb +25 -9
- data/lib/slack/real_time/stores/starter.rb +323 -309
- data/lib/slack/real_time/stores/store.rb +265 -198
- data/lib/slack/real_time/stores.rb +1 -7
- data/lib/slack/version.rb +1 -1
- data/lib/slack/web/api/endpoints/admin_analytics.rb +2 -2
- data/lib/slack/web/api/endpoints/admin_apps.rb +2 -2
- data/lib/slack/web/api/endpoints/admin_apps_requests.rb +16 -0
- data/lib/slack/web/api/endpoints/admin_audit_anomaly_allow.rb +34 -0
- data/lib/slack/web/api/endpoints/admin_auth_policy.rb +7 -7
- data/lib/slack/web/api/endpoints/admin_barriers.rb +8 -8
- data/lib/slack/web/api/endpoints/admin_conversations.rb +110 -28
- data/lib/slack/web/api/endpoints/admin_conversations_restrictAccess.rb +6 -6
- data/lib/slack/web/api/endpoints/admin_emoji.rb +9 -9
- data/lib/slack/web/api/endpoints/admin_inviteRequests.rb +2 -2
- data/lib/slack/web/api/endpoints/admin_roles.rb +73 -0
- data/lib/slack/web/api/endpoints/admin_teams.rb +2 -2
- data/lib/slack/web/api/endpoints/admin_teams_admins.rb +1 -1
- data/lib/slack/web/api/endpoints/admin_teams_owners.rb +1 -1
- data/lib/slack/web/api/endpoints/admin_teams_settings.rb +11 -11
- data/lib/slack/web/api/endpoints/admin_usergroups.rb +7 -7
- data/lib/slack/web/api/endpoints/admin_users.rb +16 -16
- data/lib/slack/web/api/endpoints/admin_users_session.rb +8 -8
- data/lib/slack/web/api/endpoints/admin_users_unsupportedVersions.rb +25 -0
- data/lib/slack/web/api/endpoints/apps.rb +2 -2
- data/lib/slack/web/api/endpoints/apps_connections.rb +1 -1
- data/lib/slack/web/api/endpoints/apps_event_authorizations.rb +1 -1
- data/lib/slack/web/api/endpoints/apps_manifest.rb +8 -6
- data/lib/slack/web/api/endpoints/bookmarks.rb +88 -0
- data/lib/slack/web/api/endpoints/bots.rb +1 -1
- data/lib/slack/web/api/endpoints/calls.rb +5 -5
- data/lib/slack/web/api/endpoints/calls_participants.rb +4 -4
- data/lib/slack/web/api/endpoints/chat.rb +37 -31
- data/lib/slack/web/api/endpoints/conversations.rb +38 -34
- data/lib/slack/web/api/endpoints/dialog.rb +2 -2
- data/lib/slack/web/api/endpoints/dnd.rb +1 -1
- data/lib/slack/web/api/endpoints/emoji.rb +2 -0
- data/lib/slack/web/api/endpoints/files.rb +45 -10
- data/lib/slack/web/api/endpoints/files_comments.rb +2 -2
- data/lib/slack/web/api/endpoints/files_remote.rb +8 -8
- data/lib/slack/web/api/endpoints/functions_workflows_steps.rb +28 -0
- data/lib/slack/web/api/endpoints/functions_workflows_steps_responses.rb +28 -0
- data/lib/slack/web/api/endpoints/migration.rb +1 -1
- data/lib/slack/web/api/endpoints/oauth_v2.rb +2 -2
- data/lib/slack/web/api/endpoints/pins.rb +5 -3
- data/lib/slack/web/api/endpoints/reactions.rb +4 -4
- data/lib/slack/web/api/endpoints/reminders.rb +5 -5
- data/lib/slack/web/api/endpoints/rtm.rb +0 -23
- data/lib/slack/web/api/endpoints/search.rb +3 -3
- data/lib/slack/web/api/endpoints/team.rb +13 -1
- data/lib/slack/web/api/endpoints/tooling_tokens.rb +1 -1
- data/lib/slack/web/api/endpoints/usergroups.rb +5 -5
- data/lib/slack/web/api/endpoints/usergroups_users.rb +3 -3
- data/lib/slack/web/api/endpoints/users.rb +4 -4
- data/lib/slack/web/api/endpoints/users_admin.rb +2 -2
- data/lib/slack/web/api/endpoints/users_profile.rb +1 -1
- data/lib/slack/web/api/endpoints/views.rb +16 -11
- data/lib/slack/web/api/endpoints/workflows.rb +4 -4
- data/lib/slack/web/api/endpoints.rb +12 -0
- data/lib/slack/web/api/errors.rb +146 -8
- data/lib/slack/web/api/mixins/conversations.id.rb +1 -1
- data/lib/slack/web/api/mixins/users.id.rb +1 -1
- data/lib/slack/web/api/mixins/users.search.rb +2 -1
- data/lib/slack/web/api/patches/{chat.1.patch → chat.attachments-blocks.patch} +13 -14
- data/lib/slack/web/api/patches/{dialog.1.open-json-support.patch → dialog.encoded-json.patch} +4 -4
- data/lib/slack/web/api/patches/views.view-json.patch +55 -0
- data/lib/slack/web/api/templates/command.erb +18 -12
- data/lib/slack/web/api/templates/method.erb +1 -1
- data/lib/slack/web/config.rb +2 -2
- data/lib/slack/web/faraday/connection.rb +4 -4
- data/lib/slack/web/faraday/request.rb +2 -0
- data/lib/slack/web/faraday/response/raise_error.rb +2 -10
- data/lib/slack/web/faraday/response/wrap_error.rb +1 -1
- data/lib/slack-ruby-client.rb +2 -1
- data/lib/tasks/real_time.rake +44 -24
- data/lib/tasks/web.rake +9 -8
- data/slack-ruby-client.gemspec +5 -14
- data/spec/fixtures/slack/web/rtm_connect.yml +85 -1
- data/spec/integration/integration_spec.rb +1 -1
- data/spec/slack/events/config_spec.rb +2 -0
- data/spec/slack/events/request_spec.rb +5 -1
- data/spec/slack/messages/formatting_spec.rb +10 -0
- data/spec/slack/real_time/api/message_spec.rb +1 -1
- data/spec/slack/real_time/api/ping_spec.rb +1 -1
- data/spec/slack/real_time/api/typing_spec.rb +1 -1
- data/spec/slack/real_time/client_spec.rb +91 -127
- data/spec/slack/real_time/event_handlers/bot_spec.rb +19 -17
- data/spec/slack/real_time/event_handlers/event_handlers_spec.rb +1 -1
- data/spec/slack/real_time/event_handlers/im_spec.rb +30 -27
- data/spec/slack/real_time/event_handlers/{group_spec.rb → private_channel_spec.rb} +35 -27
- data/spec/slack/real_time/event_handlers/{channel_spec.rb → public_channel_spec.rb} +27 -23
- data/spec/slack/real_time/event_handlers/team_spec.rb +7 -8
- data/spec/slack/real_time/event_handlers/user_spec.rb +6 -5
- data/spec/slack/real_time/stores/store_spec.rb +50 -0
- data/spec/slack/slack_spec.rb +5 -4
- data/spec/slack/version_spec.rb +1 -1
- data/spec/slack/web/api/endpoints/admin_apps_requests_spec.rb +5 -0
- data/spec/slack/web/api/endpoints/admin_audit_anomaly_allow_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_conversations_spec.rb +31 -0
- data/spec/slack/web/api/endpoints/admin_roles_spec.rb +30 -0
- data/spec/slack/web/api/endpoints/admin_users_unsupportedVersions_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/bookmarks_spec.rb +40 -0
- data/spec/slack/web/api/endpoints/custom_specs/chat_spec.rb +45 -17
- data/spec/slack/web/api/endpoints/custom_specs/dialog_spec.rb +6 -2
- data/spec/slack/web/api/endpoints/custom_specs/views_spec.rb +33 -16
- data/spec/slack/web/api/endpoints/files_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/functions_workflows_steps_responses_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/functions_workflows_steps_spec.rb +13 -0
- data/spec/slack/web/api/mixins/conversations_spec.rb +2 -0
- data/spec/slack/web/api/mixins/users_spec.rb +2 -0
- data/spec/slack/web/api/pagination/cursor_spec.rb +11 -7
- data/spec/slack/web/client_spec.rb +39 -11
- data/spec/slack/web/faraday/response/raise_error_spec.rb +1 -1
- data/spec/support/real_time/connected_client.rb +1 -1
- data/spec/support/real_time/loaded_client.rb +120 -0
- metadata +45 -197
- data/.travis.yml +0 -29
- data/bin/commands/admin_conversations_whitelist.rb +0 -37
- data/bin/commands/apps_permissions.rb +0 -23
- data/bin/commands/apps_permissions_resources.rb +0 -15
- data/bin/commands/apps_permissions_scopes.rb +0 -13
- data/bin/commands/apps_permissions_users.rb +0 -26
- data/bin/commands/channels.rb +0 -23
- data/bin/commands/groups.rb +0 -14
- data/bin/commands/im.rb +0 -6
- data/bin/commands/mpim.rb +0 -6
- data/bin/commands.rb +0 -66
- data/lib/slack/web/api/endpoints/admin_conversations_whitelist.rb +0 -64
- data/lib/slack/web/api/endpoints/apps_permissions.rb +0 -36
- data/lib/slack/web/api/endpoints/apps_permissions_resources.rb +0 -31
- data/lib/slack/web/api/endpoints/apps_permissions_scopes.rb +0 -21
- data/lib/slack/web/api/endpoints/apps_permissions_users.rb +0 -50
- data/lib/slack/web/api/endpoints/channels.rb +0 -25
- data/lib/slack/web/api/endpoints/groups.rb +0 -13
- data/lib/slack/web/api/endpoints/im.rb +0 -13
- data/lib/slack/web/api/endpoints/mpim.rb +0 -13
- data/lib/slack/web/api/endpoints/presence.rb +0 -23
- data/lib/slack/web/api/patches/views.1.view-json.patch +0 -40
- data/lib/slack/web/api/patches/views.1.views-published.patch +0 -16
- data/lib/slack/web/api/templates/commands.erb +0 -6
- data/spec/fixtures/slack/web/rtm_start.yml +0 -815
- data/spec/slack/real_time/rtm_start_spec.rb +0 -14
- data/spec/slack/real_time/store_spec.rb +0 -12
data/bin/slack
CHANGED
@@ -2,50 +2,55 @@
|
|
2
2
|
require 'gli'
|
3
3
|
require 'slack_ruby_client'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
5
|
+
module Slack
|
6
|
+
module Cli
|
7
|
+
class App
|
8
|
+
extend GLI::App
|
9
|
+
|
10
|
+
program_desc 'Slack client.'
|
11
|
+
|
12
|
+
default_command :help
|
13
|
+
|
14
|
+
switch %i[d debug], desc: 'Enable debug-level logging.', default_value: false
|
15
|
+
flag [:t, 'slack-api-token'], desc: 'Slack API token.', default_value: ENV['SLACK_API_TOKEN']
|
16
|
+
flag ['vcr-cassette-name'], desc: 'Offline VCR cassette.'
|
17
|
+
|
18
|
+
commands_from File.expand_path('commands', __dir__)
|
19
|
+
|
20
|
+
pre do |global_options, _command, options, _args|
|
21
|
+
# global Slack configuration
|
22
|
+
Slack.config.token = global_options['slack-api-token']
|
23
|
+
help_now! 'Set Slack API token via --slack-api-token or SLACK_API_TOKEN.' unless Slack.config.token && !Slack.config.token.empty?
|
24
|
+
|
25
|
+
if global_options['debug']
|
26
|
+
require 'logger'
|
27
|
+
logger = Logger.new(STDOUT)
|
28
|
+
logger.level = Logger::DEBUG
|
29
|
+
Slack::Web::Client.config.logger = logger
|
30
|
+
end
|
31
|
+
|
32
|
+
@client = Slack::Web::Client.new
|
33
|
+
|
34
|
+
# Offline VCR cassette
|
35
|
+
if global_options['vcr-cassette-name']
|
36
|
+
require 'webmock'
|
37
|
+
WebMock.enable!
|
38
|
+
require 'vcr'
|
39
|
+
VCR.configure do |config|
|
40
|
+
config.cassette_library_dir = 'spec/fixtures/slack'
|
41
|
+
config.hook_into :webmock
|
42
|
+
config.default_cassette_options = { record: :new_episodes }
|
43
|
+
end
|
44
|
+
VCR.insert_cassette global_options['vcr-cassette-name']
|
45
|
+
end
|
46
|
+
|
47
|
+
# remove any nil values from options
|
48
|
+
options.compact!
|
49
|
+
|
50
|
+
true
|
51
|
+
end
|
38
52
|
end
|
39
|
-
VCR.insert_cassette global_options['vcr-cassette-name']
|
40
53
|
end
|
41
|
-
|
42
|
-
# remove any nil values from options
|
43
|
-
options.select! { |_k, v| v }
|
44
|
-
|
45
|
-
true
|
46
54
|
end
|
47
55
|
|
48
|
-
|
49
|
-
require 'commands'
|
50
|
-
|
51
|
-
exit run(ARGV)
|
56
|
+
exit Slack::Cli::App.run(ARGV)
|
@@ -12,8 +12,9 @@ module Slack
|
|
12
12
|
# @option options [Object] :text
|
13
13
|
# Text of the message to send. See below for an explanation of formatting.
|
14
14
|
def message(options = {})
|
15
|
-
|
16
|
-
|
15
|
+
raise ArgumentError, 'Required arguments :channel missing' if options[:channel].nil?
|
16
|
+
raise ArgumentError, 'Required arguments :text missing' if options[:text].nil?
|
17
|
+
|
17
18
|
send_json({ type: 'message', id: next_id }.merge(options))
|
18
19
|
end
|
19
20
|
end
|
@@ -1,4 +1,8 @@
|
|
1
1
|
# <%= desc %>
|
2
2
|
# @see https://api.slack.com/events/<%= name %>
|
3
3
|
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/<%= name %>.json
|
4
|
-
|
4
|
+
<% if hook %>
|
5
|
+
<%= hook %>
|
6
|
+
<% else %>
|
7
|
+
# on :<%= name %> do |data|
|
8
|
+
<% end %>
|
@@ -10,7 +10,8 @@ module Slack
|
|
10
10
|
# Channel to send message to. Can be a public channel, private group or IM channel.
|
11
11
|
# Can be an encoded ID, or a name.
|
12
12
|
def typing(options = {})
|
13
|
-
|
13
|
+
raise ArgumentError, 'Required arguments :channel missing' if options[:channel].nil?
|
14
|
+
|
14
15
|
send_json({ type: 'typing', id: next_id }.merge(options))
|
15
16
|
end
|
16
17
|
end
|
@@ -11,15 +11,9 @@ module Slack
|
|
11
11
|
include Api::Message
|
12
12
|
include Api::Typing
|
13
13
|
|
14
|
-
@events = {}
|
15
|
-
|
16
|
-
class << self
|
17
|
-
attr_accessor :events
|
18
|
-
end
|
19
|
-
|
20
14
|
attr_accessor :web_client, :store, :url, *Config::ATTRIBUTES
|
21
15
|
|
22
|
-
protected :store_class, :store_class=
|
16
|
+
protected :store_class, :store_class=, :store_options, :store_options=
|
23
17
|
|
24
18
|
def initialize(options = {})
|
25
19
|
@callbacks = Hash.new { |h, k| h[k] = [] }
|
@@ -31,7 +25,7 @@ module Slack
|
|
31
25
|
@web_client = Slack::Web::Client.new(token: token, logger: logger)
|
32
26
|
end
|
33
27
|
|
34
|
-
|
28
|
+
[:self, :team, *Stores::Base::CACHES].each do |store_method|
|
35
29
|
define_method store_method do
|
36
30
|
store&.send(store_method)
|
37
31
|
end
|
@@ -44,7 +38,7 @@ module Slack
|
|
44
38
|
|
45
39
|
# Start RealTime client and block until it disconnects.
|
46
40
|
def start!(&block)
|
47
|
-
@callback = block if
|
41
|
+
@callback = block if block
|
48
42
|
build_socket
|
49
43
|
@socket.start_sync(self)
|
50
44
|
end
|
@@ -52,7 +46,7 @@ module Slack
|
|
52
46
|
# Start RealTime client and return immediately.
|
53
47
|
# The RealTime::Client will run in the background.
|
54
48
|
def start_async(&block)
|
55
|
-
@callback = block if
|
49
|
+
@callback = block if block
|
56
50
|
build_socket
|
57
51
|
@socket.start_async(self)
|
58
52
|
end
|
@@ -162,10 +156,10 @@ module Slack
|
|
162
156
|
def restart_async
|
163
157
|
logger.debug("#{self}##{__method__}")
|
164
158
|
@socket.close
|
165
|
-
start = web_client.
|
159
|
+
start = web_client.rtm_connect(start_options)
|
166
160
|
data = Slack::Messages::Message.new(start)
|
167
161
|
@url = data.url
|
168
|
-
@store =
|
162
|
+
@store = store_class.new(data, store_options.to_h) if store_class
|
169
163
|
@socket.restart_async(self, @url)
|
170
164
|
end
|
171
165
|
|
@@ -173,23 +167,13 @@ module Slack
|
|
173
167
|
def build_socket
|
174
168
|
raise ClientAlreadyStartedError if started?
|
175
169
|
|
176
|
-
start = web_client.
|
170
|
+
start = web_client.rtm_connect(start_options)
|
177
171
|
data = Slack::Messages::Message.new(start)
|
178
172
|
@url = data.url
|
179
|
-
@store =
|
173
|
+
@store = store_class.new(data, store_options.to_h) if store_class
|
180
174
|
@socket = socket_class.new(@url, socket_options)
|
181
175
|
end
|
182
176
|
|
183
|
-
def rtm_start_method
|
184
|
-
if start_method
|
185
|
-
start_method
|
186
|
-
elsif @store_class && @store_class <= Slack::RealTime::Stores::Store
|
187
|
-
:rtm_start
|
188
|
-
else
|
189
|
-
:rtm_connect
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
177
|
def socket_options
|
194
178
|
socket_options = {}
|
195
179
|
socket_options[:ping] = websocket_ping if websocket_ping
|
@@ -249,11 +233,9 @@ module Slack
|
|
249
233
|
end
|
250
234
|
|
251
235
|
def run_handlers(type, data)
|
252
|
-
return unless store.class.events
|
253
|
-
|
254
236
|
handlers = store.class.events[type.to_s]
|
255
|
-
handlers
|
256
|
-
store.instance_exec(data, &handler)
|
237
|
+
handlers.each do |handler|
|
238
|
+
store.instance_exec(data, self, &handler)
|
257
239
|
end
|
258
240
|
rescue StandardError => e
|
259
241
|
logger.error("#{self}##{__method__}") { e }
|
@@ -11,9 +11,9 @@ module Slack
|
|
11
11
|
websocket_ping
|
12
12
|
websocket_proxy
|
13
13
|
concurrency
|
14
|
-
start_method
|
15
14
|
start_options
|
16
15
|
store_class
|
16
|
+
store_options
|
17
17
|
logger
|
18
18
|
].freeze
|
19
19
|
|
@@ -25,9 +25,9 @@ module Slack
|
|
25
25
|
self.websocket_proxy = nil
|
26
26
|
self.token = nil
|
27
27
|
self.concurrency = method(:detect_concurrency)
|
28
|
-
self.start_method = nil
|
29
28
|
self.start_options = { request: { timeout: 180 } }
|
30
|
-
self.store_class = Slack::RealTime::
|
29
|
+
self.store_class = Slack::RealTime::Stores::Starter
|
30
|
+
self.store_options = {}
|
31
31
|
self.logger = nil
|
32
32
|
end
|
33
33
|
|
@@ -1,8 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
require_relative 'models/base'
|
3
4
|
require_relative 'models/user'
|
4
5
|
require_relative 'models/bot'
|
5
6
|
require_relative 'models/channel'
|
6
|
-
require_relative 'models/group'
|
7
7
|
require_relative 'models/team'
|
8
8
|
require_relative 'models/im'
|
9
|
+
require_relative 'models/mpim'
|
@@ -1,14 +1,36 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Slack
|
3
4
|
module RealTime
|
4
5
|
module Stores
|
5
6
|
# Doesn't store anything.
|
6
7
|
class Base
|
8
|
+
CACHES = %i[
|
9
|
+
teams
|
10
|
+
users
|
11
|
+
bots
|
12
|
+
public_channels
|
13
|
+
private_channels
|
14
|
+
ims
|
15
|
+
mpims
|
16
|
+
].freeze
|
17
|
+
|
18
|
+
@events = Hash.new { |h, k| h[k] = [] }
|
19
|
+
|
7
20
|
class << self
|
8
|
-
|
21
|
+
attr_reader :events
|
22
|
+
|
23
|
+
def inherited(subclass)
|
24
|
+
super
|
25
|
+
subclass.instance_variable_set :@events, events.dup
|
26
|
+
end
|
27
|
+
|
28
|
+
def on(event, &handler)
|
29
|
+
events[event.to_s] << handler
|
30
|
+
end
|
9
31
|
end
|
10
32
|
|
11
|
-
attr_accessor
|
33
|
+
attr_accessor(*CACHES)
|
12
34
|
|
13
35
|
def self
|
14
36
|
nil
|
@@ -18,13 +40,7 @@ module Slack
|
|
18
40
|
nil
|
19
41
|
end
|
20
42
|
|
21
|
-
def initialize(_attrs); end
|
22
|
-
|
23
|
-
def self.on(event, &block)
|
24
|
-
self.events ||= {}
|
25
|
-
self.events[event.to_s] ||= []
|
26
|
-
self.events[event.to_s] << block
|
27
|
-
end
|
43
|
+
def initialize(_attrs, _options = {}); end
|
28
44
|
end
|
29
45
|
end
|
30
46
|
end
|