slack-ruby-client 1.1.0 → 2.0.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 +4 -4
- data/.github/workflows/{integtest.yml → integration_test.yml} +6 -5
- data/.github/workflows/{rubocop.yml → lint.yml} +5 -4
- data/.github/workflows/{danger.yml → pr_lint.yml} +8 -6
- data/.github/workflows/test.yml +4 -2
- data/.gitignore +0 -1
- data/.rubocop.yml +4 -0
- data/.rubocop_todo.yml +8 -14
- data/.ruby-version +1 -0
- data/CHANGELOG.md +14 -0
- data/CONTRIBUTING.md +5 -4
- data/Gemfile +1 -6
- data/README.md +60 -63
- data/RELEASING.md +1 -1
- data/UPGRADING.md +28 -0
- data/bin/commands/admin_audit_anomaly_allow.rb +23 -0
- data/bin/commands/admin_conversations.rb +12 -11
- data/bin/commands/admin_users.rb +1 -1
- data/bin/commands/admin_users_session.rb +1 -1
- data/bin/commands/apps_connections.rb +2 -2
- data/bin/commands/bookmarks.rb +1 -0
- data/bin/commands/chat.rb +9 -6
- data/bin/commands/conversations.rb +8 -6
- data/bin/commands/files.rb +24 -0
- data/bin/commands/rtm.rb +0 -15
- data/bin/commands/views.rb +4 -2
- data/bin/commands.rb +1 -0
- data/bin/slack +1 -1
- 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 +8 -26
- 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 +1 -1
- data/lib/slack/web/api/endpoints/admin_apps.rb +2 -2
- data/lib/slack/web/api/endpoints/admin_apps_requests.rb +1 -1
- 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 +30 -28
- data/lib/slack/web/api/endpoints/admin_conversations_restrictAccess.rb +6 -6
- data/lib/slack/web/api/endpoints/admin_emoji.rb +7 -7
- data/lib/slack/web/api/endpoints/admin_inviteRequests.rb +2 -2
- 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/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 +6 -6
- data/lib/slack/web/api/endpoints/bookmarks.rb +10 -8
- 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 +36 -30
- data/lib/slack/web/api/endpoints/conversations.rb +37 -33
- 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/files.rb +45 -8
- 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/migration.rb +1 -1
- data/lib/slack/web/api/endpoints/oauth_v2.rb +2 -2
- data/lib/slack/web/api/endpoints/pins.rb +3 -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/tooling_tokens.rb +1 -1
- data/lib/slack/web/api/endpoints/usergroups.rb +4 -4
- 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/views.rb +16 -11
- data/lib/slack/web/api/endpoints/workflows.rb +4 -4
- data/lib/slack/web/api/endpoints.rb +2 -0
- data/lib/slack/web/api/errors.rb +56 -6
- 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/method.erb +1 -1
- data/lib/slack/web/config.rb +2 -2
- data/lib/tasks/real_time.rake +44 -22
- data/lib/tasks/web.rake +9 -2
- data/spec/fixtures/slack/web/rtm_connect.yml +85 -1
- data/spec/slack/events/config_spec.rb +2 -0
- data/spec/slack/events/request_spec.rb +4 -0
- 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 +73 -111
- 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 +28 -25
- 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} +24 -20
- 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 +1 -0
- data/spec/slack/web/api/endpoints/admin_audit_anomaly_allow_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/custom_specs/chat_spec.rb +17 -1
- data/spec/slack/web/api/endpoints/custom_specs/dialog_spec.rb +2 -0
- data/spec/slack/web/api/endpoints/custom_specs/views_spec.rb +13 -4
- data/spec/slack/web/api/endpoints/files_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 +4 -0
- data/spec/slack/web/client_spec.rb +14 -4
- data/spec/support/real_time/loaded_client.rb +120 -0
- metadata +18 -35
- 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/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/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/lib/slack/web/api/patches/{dialog.1.open-json-support.patch → dialog.encoded-json.patch}
RENAMED
@@ -1,11 +1,11 @@
|
|
1
1
|
diff --git a/lib/slack/web/api/endpoints/dialog.rb b/lib/slack/web/api/endpoints/dialog.rb
|
2
|
-
index
|
2
|
+
index 05475c8..a4ff4ff 100644
|
3
3
|
--- a/lib/slack/web/api/endpoints/dialog.rb
|
4
4
|
+++ b/lib/slack/web/api/endpoints/dialog.rb
|
5
|
-
@@ -
|
5
|
+
@@ -18,6 +18,12 @@ module Slack
|
6
6
|
def dialog_open(options = {})
|
7
|
-
|
8
|
-
|
7
|
+
raise ArgumentError, 'Required arguments :dialog missing' if options[:dialog].nil?
|
8
|
+
raise ArgumentError, 'Required arguments :trigger_id missing' if options[:trigger_id].nil?
|
9
9
|
+ # dialog must be passed as an encoded JSON string
|
10
10
|
+ if options.key?(:dialog)
|
11
11
|
+ dialog = options[:dialog]
|
@@ -0,0 +1,55 @@
|
|
1
|
+
diff --git a/lib/slack/web/api/endpoints/views.rb b/lib/slack/web/api/endpoints/views.rb
|
2
|
+
index cfa83a5..038c5f0 100644
|
3
|
+
--- a/lib/slack/web/api/endpoints/views.rb
|
4
|
+
+++ b/lib/slack/web/api/endpoints/views.rb
|
5
|
+
@@ -19,6 +19,12 @@ module Slack
|
6
|
+
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/views/views.open.json
|
7
|
+
def views_open(options = {})
|
8
|
+
raise ArgumentError, 'Required arguments :view missing' if options[:view].nil?
|
9
|
+
+ raise ArgumentError, 'One of :trigger_id, :interactivity_pointer is required' unless options[:trigger_id].nil? ^ options[:interactivity_pointer].nil?
|
10
|
+
+ if options.key?(:view)
|
11
|
+
+ view = options[:view]
|
12
|
+
+ view = JSON.dump(view) unless view.is_a?(String)
|
13
|
+
+ options = options.merge(view: view)
|
14
|
+
+ end
|
15
|
+
post('views.open', options)
|
16
|
+
end
|
17
|
+
|
18
|
+
@@ -36,6 +42,11 @@ module Slack
|
19
|
+
def views_publish(options = {})
|
20
|
+
raise ArgumentError, 'Required arguments :user_id missing' if options[:user_id].nil?
|
21
|
+
raise ArgumentError, 'Required arguments :view missing' if options[:view].nil?
|
22
|
+
+ if options.key?(:view)
|
23
|
+
+ view = options[:view]
|
24
|
+
+ view = JSON.dump(view) unless view.is_a?(String)
|
25
|
+
+ options = options.merge(view: view)
|
26
|
+
+ end
|
27
|
+
post('views.publish', options)
|
28
|
+
end
|
29
|
+
|
30
|
+
@@ -52,6 +63,12 @@ module Slack
|
31
|
+
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/views/views.push.json
|
32
|
+
def views_push(options = {})
|
33
|
+
raise ArgumentError, 'Required arguments :view missing' if options[:view].nil?
|
34
|
+
+ raise ArgumentError, 'One of :trigger_id, :interactivity_pointer is required' unless options[:trigger_id].nil? ^ options[:interactivity_pointer].nil?
|
35
|
+
+ if options.key?(:view)
|
36
|
+
+ view = options[:view]
|
37
|
+
+ view = JSON.dump(view) unless view.is_a?(String)
|
38
|
+
+ options = options.merge(view: view)
|
39
|
+
+ end
|
40
|
+
post('views.push', options)
|
41
|
+
end
|
42
|
+
|
43
|
+
@@ -70,6 +87,12 @@ module Slack
|
44
|
+
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/views/views.update.json
|
45
|
+
def views_update(options = {})
|
46
|
+
raise ArgumentError, 'Required arguments :view missing' if options[:view].nil?
|
47
|
+
+ raise ArgumentError, 'One of :external_id, :view_id is required' unless options[:external_id].nil? ^ options[:view_id].nil?
|
48
|
+
+ if options.key?(:view)
|
49
|
+
+ view = options[:view]
|
50
|
+
+ view = JSON.dump(view) unless view.is_a?(String)
|
51
|
+
+ options = options.merge(view: view)
|
52
|
+
+ end
|
53
|
+
post('views.update', options)
|
54
|
+
end
|
55
|
+
end
|
@@ -35,7 +35,7 @@ module Slack
|
|
35
35
|
<% end %>
|
36
36
|
def <%= group.gsub(".", "_") %>_<%= name %>(options = {})
|
37
37
|
<% data['args'].select{ |k, v| v['required'] }.each do |arg_name, arg_v| %>
|
38
|
-
|
38
|
+
raise ArgumentError, 'Required arguments :<%= arg_name %> missing' if options[:<%= arg_name %>].nil?
|
39
39
|
<% end %>
|
40
40
|
<% if data['group'] == 'groups' && data['args']['channel'] && !data['args']['channel']['desc'].include?('Can be an encoded ID, or a name.') %>
|
41
41
|
options = options.merge(channel: groups_id(options)['group']['id']) if options[:channel]
|
data/lib/slack/web/config.rb
CHANGED
@@ -24,8 +24,8 @@ module Slack
|
|
24
24
|
def reset
|
25
25
|
self.endpoint = 'https://slack.com/api/'
|
26
26
|
self.user_agent = "Slack Ruby Client/#{Slack::VERSION}"
|
27
|
-
self.ca_path =
|
28
|
-
self.ca_file =
|
27
|
+
self.ca_path = nil
|
28
|
+
self.ca_file = nil
|
29
29
|
self.token = nil
|
30
30
|
self.proxy = nil
|
31
31
|
self.logger = nil
|
data/lib/tasks/real_time.rake
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
3
|
require 'json-schema'
|
4
4
|
require 'erubis'
|
5
5
|
|
6
|
+
# largely from https://github.com/aki017/slack-ruby-gem
|
6
7
|
namespace :slack do
|
7
8
|
namespace :real_time do
|
8
9
|
namespace :api do
|
@@ -16,39 +17,60 @@ namespace :slack do
|
|
16
17
|
name = File.basename(path, '.json')
|
17
18
|
parsed = JSON.parse(File.read(path))
|
18
19
|
JSON::Validator.validate(event_schema, parsed, insert_defaults: true)
|
19
|
-
next if
|
20
|
+
next if name == 'message'
|
20
21
|
|
21
22
|
result[name] = parsed
|
22
23
|
end
|
23
24
|
|
24
|
-
|
25
|
-
Erubis::Eruby.new(File.read('lib/slack/real_time/api/templates/event_handler.erb'))
|
25
|
+
hook_template = Erubis::Eruby.new(File.read('lib/slack/real_time/api/templates/event_handler.erb'))
|
26
26
|
Dir.glob('lib/slack/real_time/stores/**/*.rb').each do |store_file|
|
27
27
|
next if File.basename(store_file) == 'base.rb'
|
28
28
|
|
29
|
-
STDOUT.write "#{File.basename(store_file)}:"
|
29
|
+
STDOUT.write "#{File.basename(store_file)}: "
|
30
30
|
|
31
31
|
store_file_contents = File.read(store_file)
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
33
|
+
unless store_file_contents.include?(REAL_TIME_EVENTS_MARKER)
|
34
|
+
puts "missing '#{REAL_TIME_EVENTS_MARKER}' line; skipping."
|
35
|
+
next
|
36
|
+
end
|
37
|
+
|
38
|
+
# Extract current hook implementations from the store class
|
39
|
+
hooks = {}
|
40
|
+
hook_matcher = /
|
41
|
+
(?:^[[:blank:]]*\R)+ # At least one blank line
|
42
|
+
(?:^[[:blank:]]*\#.*\R)* # Optional preceding comments
|
43
|
+
(?<hook> # on :event do |data|
|
44
|
+
^(?<padding>[[:blank:]]+)\#\ *on\ :(?<event>\w+)\ do\ \|[\w, ]+\|\ *\R # Commented hook
|
45
|
+
(?>^\k<padding>\#.*\R)* # Extra comments
|
46
|
+
|
|
47
|
+
^(?<padding>[[:blank:]]+)on\ :(?<event>\w+)\ do\ \|[\w, ]+\|\ *\R # Active hook
|
48
|
+
[\s\S]*? # Inside block
|
49
|
+
(?>^\k<padding>end[[:blank:]]*\R) # End of block
|
50
|
+
)
|
51
|
+
/x
|
52
|
+
store_file_contents.gsub!(hook_matcher) do
|
53
|
+
hook, event = Regexp.last_match.values_at(:hook, :event)
|
54
|
+
hooks[event] = hook
|
55
|
+
nil
|
56
|
+
end
|
57
|
+
|
58
|
+
# Render latest event documentation with current hook implementations
|
59
|
+
rendered_hooks = events.sort.map do |event_name, event_data|
|
60
|
+
STDOUT.write(hooks.key?(event_name) ? '.' : 'x')
|
61
|
+
|
62
|
+
hook_template.result(
|
63
|
+
name: event_data['name'],
|
64
|
+
desc: event_data['desc'],
|
65
|
+
hook: hooks[event_name]
|
66
|
+
).rstrip
|
50
67
|
end
|
51
68
|
|
69
|
+
# Insert updated event hooks under RealTime Events marker
|
70
|
+
store_file_contents.gsub!(
|
71
|
+
REAL_TIME_EVENTS_MARKER,
|
72
|
+
[REAL_TIME_EVENTS_MARKER, *rendered_hooks].join("\n\n")
|
73
|
+
)
|
52
74
|
File.write(store_file, store_file_contents)
|
53
75
|
|
54
76
|
puts ' done.'
|
data/lib/tasks/web.rake
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
|
3
3
|
require 'json-schema'
|
4
4
|
require 'erubis'
|
5
5
|
require 'active_support'
|
6
6
|
require 'active_support/core_ext'
|
7
7
|
|
8
|
+
# largely from https://github.com/aki017/slack-ruby-gem
|
8
9
|
namespace :slack do
|
9
10
|
namespace :web do
|
10
11
|
namespace :api do
|
@@ -39,11 +40,17 @@ namespace :slack do
|
|
39
40
|
result[prefix][name] = parsed
|
40
41
|
end
|
41
42
|
|
43
|
+
# Start with a fresh slate
|
44
|
+
Dir.glob('lib/slack/web/api/endpoints/*.rb').each { |file| File.delete(file) }
|
45
|
+
Dir.glob('spec/slack/web/api/endpoints/*_spec.rb').each { |file| File.delete(file) }
|
46
|
+
Dir.glob('bin/commands/*.rb').each { |file| File.delete(file) }
|
47
|
+
|
42
48
|
method_template = Erubis::Eruby.new(File.read('lib/slack/web/api/templates/method.erb'))
|
43
49
|
method_spec_template =
|
44
50
|
Erubis::Eruby.new(File.read('lib/slack/web/api/templates/method_spec.erb'))
|
45
51
|
command_template = Erubis::Eruby.new(File.read('lib/slack/web/api/templates/command.erb'))
|
46
|
-
|
52
|
+
|
53
|
+
data.each.with_index(1) do |(group, names), index|
|
47
54
|
printf "%2d/%2d %10s %s\n", index, data.size, group, names.keys
|
48
55
|
# method
|
49
56
|
snaked_group = group.tr('.', '_')
|
@@ -304,4 +304,88 @@ http_interactions:
|
|
304
304
|
encoding: UTF-8
|
305
305
|
string: '{"ok":false,"error":"invalid_array_arg"}'
|
306
306
|
recorded_at: Sat, 19 Jan 2019 21:25:48 GMT
|
307
|
-
|
307
|
+
- request:
|
308
|
+
method: post
|
309
|
+
uri: https://slack.com/api/rtm.connect
|
310
|
+
body:
|
311
|
+
encoding: UTF-8
|
312
|
+
string: presence_sub=true
|
313
|
+
headers:
|
314
|
+
Accept:
|
315
|
+
- application/json; charset=utf-8
|
316
|
+
User-Agent:
|
317
|
+
- Slack Ruby Client/2.0.0
|
318
|
+
Authorization:
|
319
|
+
- Bearer <SLACK_API_TOKEN>
|
320
|
+
Content-Type:
|
321
|
+
- application/x-www-form-urlencoded
|
322
|
+
Accept-Encoding:
|
323
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
324
|
+
response:
|
325
|
+
status:
|
326
|
+
code: 200
|
327
|
+
message: OK
|
328
|
+
headers:
|
329
|
+
Date:
|
330
|
+
- Sun, 25 Sep 2022 22:32:50 GMT
|
331
|
+
Server:
|
332
|
+
- Apache
|
333
|
+
X-Powered-By:
|
334
|
+
- HHVM/4.153.1
|
335
|
+
Access-Control-Allow-Origin:
|
336
|
+
- "*"
|
337
|
+
Referrer-Policy:
|
338
|
+
- no-referrer
|
339
|
+
X-Slack-Backend:
|
340
|
+
- r
|
341
|
+
X-Slack-Unique-Id:
|
342
|
+
- YzDXEnlUBjX0uWkT8kmCzwAAABM
|
343
|
+
Strict-Transport-Security:
|
344
|
+
- max-age=31536000; includeSubDomains; preload
|
345
|
+
Access-Control-Allow-Headers:
|
346
|
+
- slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid,
|
347
|
+
x-b3-sampled, x-b3-flags
|
348
|
+
Access-Control-Expose-Headers:
|
349
|
+
- x-slack-req-id, retry-after
|
350
|
+
X-Oauth-Scopes:
|
351
|
+
- identify,bot:basic
|
352
|
+
X-Accepted-Oauth-Scopes:
|
353
|
+
- rtm:stream,client
|
354
|
+
Expires:
|
355
|
+
- Mon, 26 Jul 1997 05:00:00 GMT
|
356
|
+
Cache-Control:
|
357
|
+
- private, no-cache, no-store, must-revalidate
|
358
|
+
Pragma:
|
359
|
+
- no-cache
|
360
|
+
X-Xss-Protection:
|
361
|
+
- '0'
|
362
|
+
X-Content-Type-Options:
|
363
|
+
- nosniff
|
364
|
+
X-Slack-Req-Id:
|
365
|
+
- 20417f9da55172a329704fca8e35f683
|
366
|
+
Vary:
|
367
|
+
- Accept-Encoding
|
368
|
+
Content-Length:
|
369
|
+
- '275'
|
370
|
+
Content-Type:
|
371
|
+
- application/json; charset=utf-8
|
372
|
+
X-Envoy-Upstream-Service-Time:
|
373
|
+
- '116'
|
374
|
+
X-Backend:
|
375
|
+
- main_normal main_bedrock_normal_with_overflow main_canary_with_overflow main_bedrock_canary_with_overflow
|
376
|
+
main_control_with_overflow main_bedrock_control_with_overflow
|
377
|
+
X-Server:
|
378
|
+
- slack-www-hhvm-main-iad-fbwt
|
379
|
+
X-Slack-Shared-Secret-Outcome:
|
380
|
+
- no-match
|
381
|
+
Via:
|
382
|
+
- envoy-www-iad-twh3, envoy-edge-pdx-hvfy
|
383
|
+
X-Edge-Backend:
|
384
|
+
- envoy-www
|
385
|
+
X-Slack-Edge-Shared-Secret-Outcome:
|
386
|
+
- no-match
|
387
|
+
body:
|
388
|
+
encoding: UTF-8
|
389
|
+
string: '{"ok":true,"url":"wss:\/\/wss-primary.slack.com\/websocket\/IDugmjBU5vPyDN1rGavpMHB1CdAznuJDyHl3pqAHz_DSflTYmCyuPIxH1vwqvz3aIXhyarUZMxyWiJD7zako2Wqc_poO8uiP3i6teabXYTA4vx4Hu2pa9k9PACV1apgYJFRU_iw4g2c5qeo=\/2","team":{"id":"T04KB5WQH","name":"dblock","domain":"dblockdotorg"},"self":{"id":"U0J1GAHN1","name":"travis-ci"}}'
|
390
|
+
recorded_at: Sun, 25 Sep 2022 22:32:50 GMT
|
391
|
+
recorded_with: VCR 6.1.0
|
@@ -14,9 +14,11 @@ RSpec.describe Slack::Events::Config do
|
|
14
14
|
it 'defaults signing secret to ENV[SLACK_SIGNING_SECRET]' do
|
15
15
|
expect(Slack::Events.config.signing_secret).to eq 'secret'
|
16
16
|
end
|
17
|
+
|
17
18
|
it 'defaults signature expiration to 5 minutes' do
|
18
19
|
expect(Slack::Events.config.signature_expires_in).to eq 5 * 60
|
19
20
|
end
|
21
|
+
|
20
22
|
context 'configured' do
|
21
23
|
before do
|
22
24
|
Slack::Events.configure do |config|
|
@@ -101,6 +101,7 @@ RSpec.describe Slack::Events::Request do
|
|
101
101
|
expect(request).to be_valid
|
102
102
|
expect(request).not_to be_expired
|
103
103
|
end
|
104
|
+
|
104
105
|
it 'does not raise an error and returns true' do
|
105
106
|
expect(request.verify!).to be true
|
106
107
|
end
|
@@ -115,6 +116,7 @@ RSpec.describe Slack::Events::Request do
|
|
115
116
|
expect(request).to be_valid
|
116
117
|
expect(request).to be_expired
|
117
118
|
end
|
119
|
+
|
118
120
|
it 'raises an error on verify!' do
|
119
121
|
expect { request.verify! }.to raise_error Slack::Events::Request::TimestampExpired
|
120
122
|
end
|
@@ -129,6 +131,7 @@ RSpec.describe Slack::Events::Request do
|
|
129
131
|
expect(request).to be_valid
|
130
132
|
expect(request).not_to be_expired
|
131
133
|
end
|
134
|
+
|
132
135
|
it 'does not raise an error on verify!' do
|
133
136
|
expect(request.verify!).to be true
|
134
137
|
end
|
@@ -143,6 +146,7 @@ RSpec.describe Slack::Events::Request do
|
|
143
146
|
expect(request).to be_valid
|
144
147
|
expect(request).to be_expired
|
145
148
|
end
|
149
|
+
|
146
150
|
it 'raises an error on verify!' do
|
147
151
|
expect { request.verify! }.to raise_error Slack::Events::Request::TimestampExpired
|
148
152
|
end
|
@@ -10,30 +10,37 @@ describe Slack::Messages::Formatting do
|
|
10
10
|
it 'plain text' do
|
11
11
|
expect(formatting.unescape('plain text')).to eq 'plain text'
|
12
12
|
end
|
13
|
+
|
13
14
|
it 'decodes an HTML-encoded message' do
|
14
15
|
expect(formatting.unescape('Hello & <world>')).to eq 'Hello & <world>'
|
15
16
|
end
|
17
|
+
|
16
18
|
it 'unescapes a user reference' do
|
17
19
|
expect(formatting.unescape('Hey <@U024BE7LH|bob>, did you see my file?')).to(
|
18
20
|
eq('Hey @bob, did you see my file?')
|
19
21
|
)
|
20
22
|
end
|
23
|
+
|
21
24
|
it 'unescapes a user reference without a name' do
|
22
25
|
expect(formatting.unescape('<@U02BEFY4U> ^^^')).to eq '@U02BEFY4U ^^^'
|
23
26
|
end
|
27
|
+
|
24
28
|
it 'unescapes a URL without text' do
|
25
29
|
expect(formatting.unescape('This message contains a URL <http://foo.com/>')).to(
|
26
30
|
eq('This message contains a URL http://foo.com/')
|
27
31
|
)
|
28
32
|
end
|
33
|
+
|
29
34
|
it 'unescapes a URL with text' do
|
30
35
|
expect(formatting.unescape('So does this one: <http://www.foo.com|www.foo.com>')).to(
|
31
36
|
eq('So does this one: www.foo.com')
|
32
37
|
)
|
33
38
|
end
|
39
|
+
|
34
40
|
it 'removes mailto' do
|
35
41
|
expect(formatting.unescape('<mailto:bob@example.com|Bob>')).to eq 'Bob'
|
36
42
|
end
|
43
|
+
|
37
44
|
it 'unlinkifies references' do
|
38
45
|
expect(
|
39
46
|
formatting.unescape('Hello <@U123|bob>, say hi to <!everyone> in <#C1234|general>')
|
@@ -41,12 +48,15 @@ describe Slack::Messages::Formatting do
|
|
41
48
|
eq('Hello @bob, say hi to @everyone in #general')
|
42
49
|
)
|
43
50
|
end
|
51
|
+
|
44
52
|
it 'can handle a lone >' do
|
45
53
|
expect(formatting.unescape('Hello <@U123|bob> > file.txt')).to eq 'Hello @bob > file.txt'
|
46
54
|
end
|
55
|
+
|
47
56
|
it 'unescapes a double smart quote' do
|
48
57
|
expect(formatting.unescape('“hello”')).to eq '"hello"'
|
49
58
|
end
|
59
|
+
|
50
60
|
it 'unescapes a single smart quote' do
|
51
61
|
expect(formatting.unescape('‘hello’')).to eq "'hello'"
|
52
62
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/
|
4
|
+
RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_connect' } do
|
5
5
|
include_context 'connected client'
|
6
6
|
|
7
7
|
describe '#message' do
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/
|
4
|
+
RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_connect' } do
|
5
5
|
include_context 'connected client'
|
6
6
|
|
7
7
|
describe '#ping' do
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/
|
4
|
+
RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_connect' } do
|
5
5
|
include_context 'connected client'
|
6
6
|
|
7
7
|
describe '#typing' do
|