slack-ruby-client 0.16.0 → 0.17.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/CHANGELOG.md +11 -3
- data/LICENSE.md +1 -1
- data/README.md +8 -8
- data/bin/commands.rb +0 -1
- data/bin/commands/admin_analytics.rb +2 -1
- data/bin/commands/admin_conversations.rb +0 -10
- data/bin/commands/admin_teams.rb +1 -1
- data/bin/commands/channels.rb +0 -157
- data/bin/commands/chat.rb +8 -6
- data/bin/commands/conversations.rb +2 -2
- data/bin/commands/dnd.rb +2 -0
- data/bin/commands/groups.rb +0 -163
- data/bin/commands/im.rb +0 -62
- data/bin/commands/mpim.rb +0 -60
- data/lib/slack/events/request.rb +2 -2
- data/lib/slack/real_time/config.rb +3 -13
- data/lib/slack/version.rb +1 -1
- data/lib/slack/web/api/endpoints.rb +0 -2
- data/lib/slack/web/api/endpoints/admin_analytics.rb +3 -1
- data/lib/slack/web/api/endpoints/admin_conversations.rb +0 -14
- data/lib/slack/web/api/endpoints/admin_teams.rb +1 -1
- data/lib/slack/web/api/endpoints/channels.rb +0 -265
- data/lib/slack/web/api/endpoints/chat.rb +11 -7
- data/lib/slack/web/api/endpoints/conversations.rb +2 -2
- data/lib/slack/web/api/endpoints/dnd.rb +4 -0
- data/lib/slack/web/api/endpoints/groups.rb +0 -273
- data/lib/slack/web/api/endpoints/im.rb +0 -107
- data/lib/slack/web/api/endpoints/mpim.rb +0 -102
- data/lib/slack/web/api/errors.rb +14 -16
- data/lib/slack/web/api/patches/chat.1.patch +5 -6
- data/lib/slack/web/faraday/connection.rb +1 -1
- data/lib/slack/web/faraday/response/raise_error.rb +0 -4
- data/lib/slack/web/faraday/response/wrap_error.rb +11 -5
- data/lib/tasks/web.rake +4 -0
- data/spec/fixtures/slack/web/{groups_info.yml → conversations_info.yml} +4 -4
- data/spec/slack/events/request_spec.rb +6 -5
- data/spec/slack/real_time/concurrency/with_concurrency_spec.rb +10 -0
- data/spec/slack/real_time/concurrency/without_concurrency_spec.rb +10 -0
- data/spec/slack/real_time/rtm_connect_spec.rb +1 -1
- data/spec/slack/real_time/rtm_start_spec.rb +1 -1
- data/spec/slack/web/api/endpoints/admin_conversations_spec.rb +0 -5
- data/spec/slack/web/api/endpoints/custom_specs/conversations_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/im_spec.rb +0 -31
- data/spec/slack/web/api/endpoints/mpim_spec.rb +0 -31
- data/spec/slack/web/client_spec.rb +15 -20
- metadata +10 -12
- data/spec/slack/web/api/endpoints/admin_conversations_whitelist_spec.rb +0 -32
- data/spec/slack/web/api/endpoints/custom_specs/channels_spec.rb +0 -13
- data/spec/slack/web/api/endpoints/custom_specs/groups_spec.rb +0 -13
- data/spec/slack/web/api/endpoints/views_spec.rb +0 -29
@@ -6,108 +6,6 @@ module Slack
|
|
6
6
|
module Api
|
7
7
|
module Endpoints
|
8
8
|
module Mpim
|
9
|
-
#
|
10
|
-
# Closes a multiparty direct message channel.
|
11
|
-
#
|
12
|
-
# @option options [channel] :channel
|
13
|
-
# MPIM to close.
|
14
|
-
# @see https://api.slack.com/methods/mpim.close
|
15
|
-
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/mpim/mpim.close.json
|
16
|
-
def mpim_close(options = {})
|
17
|
-
throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
|
18
|
-
options = options.merge(channel: conversations_id(options)['channel']['id']) if options[:channel]
|
19
|
-
logger.warn('mpim.close: This method is deprecated. It will stop functioning in February 2021 and will not work with newly created apps after June 10th, 2020. Alternative methods: conversations.close.')
|
20
|
-
post('mpim.close', options)
|
21
|
-
end
|
22
|
-
|
23
|
-
#
|
24
|
-
# Fetches history of messages and events from a multiparty direct message.
|
25
|
-
#
|
26
|
-
# @option options [channel] :channel
|
27
|
-
# Multiparty direct message to fetch history for.
|
28
|
-
# @option options [Object] :inclusive
|
29
|
-
# Include messages with latest or oldest timestamp in results.
|
30
|
-
# @option options [timestamp] :latest
|
31
|
-
# End of time range of messages to include in results.
|
32
|
-
# @option options [timestamp] :oldest
|
33
|
-
# Start of time range of messages to include in results.
|
34
|
-
# @option options [Object] :unreads
|
35
|
-
# Include unread_count_display in the output?.
|
36
|
-
# @see https://api.slack.com/methods/mpim.history
|
37
|
-
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/mpim/mpim.history.json
|
38
|
-
def mpim_history(options = {})
|
39
|
-
throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
|
40
|
-
options = options.merge(channel: conversations_id(options)['channel']['id']) if options[:channel]
|
41
|
-
logger.warn('mpim.history: This method is deprecated. It will stop functioning in February 2021 and will not work with newly created apps after June 10th, 2020. Alternative methods: conversations.history.')
|
42
|
-
post('mpim.history', options)
|
43
|
-
end
|
44
|
-
|
45
|
-
#
|
46
|
-
# Lists multiparty direct message channels for the calling user.
|
47
|
-
#
|
48
|
-
# @option options [Object] :cursor
|
49
|
-
# Parameter for pagination. Set cursor equal to the next_cursor attribute returned by the previous request's response_metadata. This parameter is optional, but pagination is mandatory: the default value simply fetches the first "page" of the collection. See pagination for more details.
|
50
|
-
# @option options [Object] :limit
|
51
|
-
# The maximum number of items to return. Fewer than the requested number of items may be returned, even if the end of the list hasn't been reached.
|
52
|
-
# @see https://api.slack.com/methods/mpim.list
|
53
|
-
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/mpim/mpim.list.json
|
54
|
-
def mpim_list(options = {})
|
55
|
-
logger.warn('mpim.list: This method is deprecated. It will stop functioning in February 2021 and will not work with newly created apps after June 10th, 2020. Alternative methods: conversations.list, users.conversations.')
|
56
|
-
if block_given?
|
57
|
-
Pagination::Cursor.new(self, :mpim_list, options).each do |page|
|
58
|
-
yield page
|
59
|
-
end
|
60
|
-
else
|
61
|
-
post('mpim.list', options)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
#
|
66
|
-
# Sets the read cursor in a multiparty direct message channel.
|
67
|
-
#
|
68
|
-
# @option options [channel] :channel
|
69
|
-
# Channel or conversation to set the read cursor for.
|
70
|
-
# @option options [timestamp] :ts
|
71
|
-
# Unique identifier of message you want marked as most recently seen in this conversation.
|
72
|
-
# @see https://api.slack.com/methods/mpim.mark
|
73
|
-
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/mpim/mpim.mark.json
|
74
|
-
def mpim_mark(options = {})
|
75
|
-
throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
|
76
|
-
throw ArgumentError.new('Required arguments :ts missing') if options[:ts].nil?
|
77
|
-
options = options.merge(channel: conversations_id(options)['channel']['id']) if options[:channel]
|
78
|
-
logger.warn('mpim.mark: This method is deprecated. It will stop functioning in February 2021 and will not work with newly created apps after June 10th, 2020. Alternative methods: conversations.mark.')
|
79
|
-
post('mpim.mark', options)
|
80
|
-
end
|
81
|
-
|
82
|
-
#
|
83
|
-
# This method opens a multiparty direct message.
|
84
|
-
#
|
85
|
-
# @option options [Object] :users
|
86
|
-
# Comma separated lists of users. The ordering of the users is preserved whenever a MPIM group is returned.
|
87
|
-
# @see https://api.slack.com/methods/mpim.open
|
88
|
-
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/mpim/mpim.open.json
|
89
|
-
def mpim_open(options = {})
|
90
|
-
throw ArgumentError.new('Required arguments :users missing') if options[:users].nil?
|
91
|
-
logger.warn('mpim.open: This method is deprecated. It will stop functioning in February 2021 and will not work with newly created apps after June 10th, 2020. Alternative methods: conversations.open.')
|
92
|
-
post('mpim.open', options)
|
93
|
-
end
|
94
|
-
|
95
|
-
#
|
96
|
-
# Retrieve a thread of messages posted to a direct message conversation from a multiparty direct message.
|
97
|
-
#
|
98
|
-
# @option options [channel] :channel
|
99
|
-
# Multiparty direct message channel to fetch thread from.
|
100
|
-
# @option options [Object] :thread_ts
|
101
|
-
# Unique identifier of a thread's parent message.
|
102
|
-
# @see https://api.slack.com/methods/mpim.replies
|
103
|
-
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/mpim/mpim.replies.json
|
104
|
-
def mpim_replies(options = {})
|
105
|
-
throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
|
106
|
-
throw ArgumentError.new('Required arguments :thread_ts missing') if options[:thread_ts].nil?
|
107
|
-
options = options.merge(channel: conversations_id(options)['channel']['id']) if options[:channel]
|
108
|
-
logger.warn('mpim.replies: This method is deprecated. It will stop functioning in February 2021 and will not work with newly created apps after June 10th, 2020. Alternative methods: conversations.replies.')
|
109
|
-
post('mpim.replies', options)
|
110
|
-
end
|
111
9
|
end
|
112
10
|
end
|
113
11
|
end
|
data/lib/slack/web/api/errors.rb
CHANGED
@@ -53,8 +53,6 @@ module Slack
|
|
53
53
|
class CannotFindService < SlackError; end
|
54
54
|
class CannotInstallAnOrgInstalledApp < SlackError; end
|
55
55
|
class CannotInvalidatePrimaryOwner < SlackError; end
|
56
|
-
class CannotKickHomeTeam < SlackError; end
|
57
|
-
class CannotKickTeam < SlackError; end
|
58
56
|
class CannotModifyPrimaryOwner < SlackError; end
|
59
57
|
class CannotMoveLocalChannel < SlackError; end
|
60
58
|
class CannotParse < SlackError; end
|
@@ -166,8 +164,8 @@ module Slack
|
|
166
164
|
class FileNotYetAvailable < SlackError; end
|
167
165
|
class FileUnderReview < SlackError; end
|
168
166
|
class ForbiddenHandle < SlackError; end
|
167
|
+
class ForbiddenTeam < SlackError; end
|
169
168
|
class GroupAlreadyLinkedToChannel < SlackError; end
|
170
|
-
class GroupContainsOthers < SlackError; end
|
171
169
|
class GroupMustNotBeEmpty < SlackError; end
|
172
170
|
class GroupNotFound < SlackError; end
|
173
171
|
class HandleAlreadyExists < SlackError; end
|
@@ -187,6 +185,7 @@ module Slack
|
|
187
185
|
class InvalidCallId < SlackError; end
|
188
186
|
class InvalidChannel < SlackError; end
|
189
187
|
class InvalidChannelId < SlackError; end
|
188
|
+
class InvalidChannelType < SlackError; end
|
190
189
|
class InvalidChannelsLimit < SlackError; end
|
191
190
|
class InvalidCharset < SlackError; end
|
192
191
|
class InvalidClientId < SlackError; end
|
@@ -198,7 +197,6 @@ module Slack
|
|
198
197
|
class InvalidEmail < SlackError; end
|
199
198
|
class InvalidEventContext < SlackError; end
|
200
199
|
class InvalidExternalId < SlackError; end
|
201
|
-
class InvalidForIsMpim < SlackError; end
|
202
200
|
class InvalidFormData < SlackError; end
|
203
201
|
class InvalidGrantType < SlackError; end
|
204
202
|
class InvalidInputs < SlackError; end
|
@@ -250,12 +248,12 @@ module Slack
|
|
250
248
|
class IsBot < SlackError; end
|
251
249
|
class IsInactive < SlackError; end
|
252
250
|
class LastMember < SlackError; end
|
253
|
-
class LeavingTeamNotInChannel < SlackError; end
|
254
|
-
class LeavingTeamRequired < SlackError; end
|
255
251
|
class LimitRequired < SlackError; end
|
256
252
|
class LinkNotFound < SlackError; end
|
257
253
|
class MemberAnalyticsDisabled < SlackError; end
|
258
254
|
class MessageNotFound < SlackError; end
|
255
|
+
class MetadataNotAvailable < SlackError; end
|
256
|
+
class MetadataOnlyDoesNotSupportDate < SlackError; end
|
259
257
|
class MethodDeprecated < SlackError; end
|
260
258
|
class MethodNotSupportedForChannelType < SlackError; end
|
261
259
|
class MigrationInProgress < SlackError; end
|
@@ -294,13 +292,13 @@ module Slack
|
|
294
292
|
class NoScopes < SlackError; end
|
295
293
|
class NoSuchSubteam < SlackError; end
|
296
294
|
class NoTeamIdsGiven < SlackError; end
|
297
|
-
class NoTeamsToDisconnect < SlackError; end
|
298
295
|
class NoText < SlackError; end
|
299
296
|
class NoUser < SlackError; end
|
300
297
|
class NoUserProvided < SlackError; end
|
301
298
|
class NoUsersProvided < SlackError; end
|
302
299
|
class NotAdmin < SlackError; end
|
303
300
|
class NotAllowed < SlackError; end
|
301
|
+
class NotAllowedForGridWorkspace < SlackError; end
|
304
302
|
class NotAllowedTokenType < SlackError; end
|
305
303
|
class NotAnAdmin < SlackError; end
|
306
304
|
class NotAnEnterprise < SlackError; end
|
@@ -316,13 +314,13 @@ module Slack
|
|
316
314
|
class NotImplemented < SlackError; end
|
317
315
|
class NotInChannel < SlackError; end
|
318
316
|
class NotInDnd < SlackError; end
|
319
|
-
class NotInGroup < SlackError; end
|
320
317
|
class NotPinnable < SlackError; end
|
321
318
|
class NotPinned < SlackError; end
|
322
319
|
class NotReactable < SlackError; end
|
323
320
|
class NotStarred < SlackError; end
|
324
321
|
class NotSupported < SlackError; end
|
325
322
|
class OauthAuthorizationUrlMismatch < SlackError; end
|
323
|
+
class OneOrMoreInvalidChannels < SlackError; end
|
326
324
|
class OrgLevelEmailDisplayDisabled < SlackError; end
|
327
325
|
class OrgLoginRequired < SlackError; end
|
328
326
|
class OrgNotFound < SlackError; end
|
@@ -358,6 +356,7 @@ module Slack
|
|
358
356
|
class SessionExpired < SlackError; end
|
359
357
|
class SessionInvalidationFailed < SlackError; end
|
360
358
|
class SessionNotFound < SlackError; end
|
359
|
+
class SlackConnectBlockedFileType < SlackError; end
|
361
360
|
class SlackConnectFileLinkSharingBlocked < SlackError; end
|
362
361
|
class SlackConnectFileUploadSharingBlocked < SlackError; end
|
363
362
|
class SnoozeEndFailed < SlackError; end
|
@@ -473,8 +472,6 @@ module Slack
|
|
473
472
|
'cannot_find_service' => CannotFindService,
|
474
473
|
'cannot_install_an_org_installed_app' => CannotInstallAnOrgInstalledApp,
|
475
474
|
'cannot_invalidate_primary_owner' => CannotInvalidatePrimaryOwner,
|
476
|
-
'cannot_kick_home_team' => CannotKickHomeTeam,
|
477
|
-
'cannot_kick_team' => CannotKickTeam,
|
478
475
|
'cannot_modify_primary_owner' => CannotModifyPrimaryOwner,
|
479
476
|
'cannot_move_local_channel' => CannotMoveLocalChannel,
|
480
477
|
'cannot_parse' => CannotParse,
|
@@ -586,8 +583,8 @@ module Slack
|
|
586
583
|
'file_not_yet_available' => FileNotYetAvailable,
|
587
584
|
'file_under_review' => FileUnderReview,
|
588
585
|
'forbidden_handle' => ForbiddenHandle,
|
586
|
+
'forbidden_team' => ForbiddenTeam,
|
589
587
|
'group_already_linked_to_channel' => GroupAlreadyLinkedToChannel,
|
590
|
-
'group_contains_others' => GroupContainsOthers,
|
591
588
|
'group_must_not_be_empty' => GroupMustNotBeEmpty,
|
592
589
|
'group_not_found' => GroupNotFound,
|
593
590
|
'handle_already_exists' => HandleAlreadyExists,
|
@@ -607,6 +604,7 @@ module Slack
|
|
607
604
|
'invalid_call_id' => InvalidCallId,
|
608
605
|
'invalid_channel' => InvalidChannel,
|
609
606
|
'invalid_channel_id' => InvalidChannelId,
|
607
|
+
'invalid_channel_type' => InvalidChannelType,
|
610
608
|
'invalid_channels_limit' => InvalidChannelsLimit,
|
611
609
|
'invalid_charset' => InvalidCharset,
|
612
610
|
'invalid_client_id' => InvalidClientId,
|
@@ -618,7 +616,6 @@ module Slack
|
|
618
616
|
'invalid_email' => InvalidEmail,
|
619
617
|
'invalid_event_context' => InvalidEventContext,
|
620
618
|
'invalid_external_id' => InvalidExternalId,
|
621
|
-
'invalid_for_is_mpim' => InvalidForIsMpim,
|
622
619
|
'invalid_form_data' => InvalidFormData,
|
623
620
|
'invalid_grant_type' => InvalidGrantType,
|
624
621
|
'invalid_inputs' => InvalidInputs,
|
@@ -670,12 +667,12 @@ module Slack
|
|
670
667
|
'is_bot' => IsBot,
|
671
668
|
'is_inactive' => IsInactive,
|
672
669
|
'last_member' => LastMember,
|
673
|
-
'leaving_team_not_in_channel' => LeavingTeamNotInChannel,
|
674
|
-
'leaving_team_required' => LeavingTeamRequired,
|
675
670
|
'limit_required' => LimitRequired,
|
676
671
|
'link_not_found' => LinkNotFound,
|
677
672
|
'member_analytics_disabled' => MemberAnalyticsDisabled,
|
678
673
|
'message_not_found' => MessageNotFound,
|
674
|
+
'metadata_not_available' => MetadataNotAvailable,
|
675
|
+
'metadata_only_does_not_support_date' => MetadataOnlyDoesNotSupportDate,
|
679
676
|
'method_deprecated' => MethodDeprecated,
|
680
677
|
'method_not_supported_for_channel_type' => MethodNotSupportedForChannelType,
|
681
678
|
'migration_in_progress' => MigrationInProgress,
|
@@ -714,13 +711,13 @@ module Slack
|
|
714
711
|
'no_scopes' => NoScopes,
|
715
712
|
'no_such_subteam' => NoSuchSubteam,
|
716
713
|
'no_team_ids_given' => NoTeamIdsGiven,
|
717
|
-
'no_teams_to_disconnect' => NoTeamsToDisconnect,
|
718
714
|
'no_text' => NoText,
|
719
715
|
'no_user' => NoUser,
|
720
716
|
'no_user_provided' => NoUserProvided,
|
721
717
|
'no_users_provided' => NoUsersProvided,
|
722
718
|
'not_admin' => NotAdmin,
|
723
719
|
'not_allowed' => NotAllowed,
|
720
|
+
'not_allowed_for_grid_workspace' => NotAllowedForGridWorkspace,
|
724
721
|
'not_allowed_token_type' => NotAllowedTokenType,
|
725
722
|
'not_an_admin' => NotAnAdmin,
|
726
723
|
'not_an_enterprise' => NotAnEnterprise,
|
@@ -736,13 +733,13 @@ module Slack
|
|
736
733
|
'not_implemented' => NotImplemented,
|
737
734
|
'not_in_channel' => NotInChannel,
|
738
735
|
'not_in_dnd' => NotInDnd,
|
739
|
-
'not_in_group' => NotInGroup,
|
740
736
|
'not_pinnable' => NotPinnable,
|
741
737
|
'not_pinned' => NotPinned,
|
742
738
|
'not_reactable' => NotReactable,
|
743
739
|
'not_starred' => NotStarred,
|
744
740
|
'not_supported' => NotSupported,
|
745
741
|
'oauth_authorization_url_mismatch' => OauthAuthorizationUrlMismatch,
|
742
|
+
'one_or_more_invalid_channels' => OneOrMoreInvalidChannels,
|
746
743
|
'org_level_email_display_disabled' => OrgLevelEmailDisplayDisabled,
|
747
744
|
'org_login_required' => OrgLoginRequired,
|
748
745
|
'org_not_found' => OrgNotFound,
|
@@ -778,6 +775,7 @@ module Slack
|
|
778
775
|
'session_expired' => SessionExpired,
|
779
776
|
'session_invalidation_failed' => SessionInvalidationFailed,
|
780
777
|
'session_not_found' => SessionNotFound,
|
778
|
+
'slack_connect_blocked_file_type' => SlackConnectBlockedFileType,
|
781
779
|
'slack_connect_file_link_sharing_blocked' => SlackConnectFileLinkSharingBlocked,
|
782
780
|
'slack_connect_file_upload_sharing_blocked' => SlackConnectFileUploadSharingBlocked,
|
783
781
|
'snooze_end_failed' => SnoozeEndFailed,
|
@@ -1,5 +1,5 @@
|
|
1
1
|
diff --git a/lib/slack/web/api/endpoints/chat.rb b/lib/slack/web/api/endpoints/chat.rb
|
2
|
-
index
|
2
|
+
index d090ae2..50186d5 100644
|
3
3
|
--- a/lib/slack/web/api/endpoints/chat.rb
|
4
4
|
+++ b/lib/slack/web/api/endpoints/chat.rb
|
5
5
|
@@ -121,11 +121,22 @@ module Slack
|
@@ -26,12 +26,11 @@ index 9de4aa9..8ed5625 100644
|
|
26
26
|
+ end
|
27
27
|
post('chat.postEphemeral', options)
|
28
28
|
end
|
29
|
-
|
30
|
-
@@ -
|
29
|
+
|
30
|
+
@@ -168,6 +179,19 @@ module Slack
|
31
31
|
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.postMessage.json
|
32
32
|
def chat_postMessage(options = {})
|
33
33
|
throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
|
34
|
-
- throw ArgumentError.new('Required arguments :text missing') if options[:text].nil?
|
35
34
|
+ throw ArgumentError.new('Required arguments :text, :attachments or :blocks missing') if options[:text].nil? && options[:attachments].nil? && options[:blocks].nil?
|
36
35
|
+ # attachments must be passed as an encoded JSON string
|
37
36
|
+ if options.key?(:attachments)
|
@@ -47,8 +46,8 @@ index 9de4aa9..8ed5625 100644
|
|
47
46
|
+ end
|
48
47
|
post('chat.postMessage', options)
|
49
48
|
end
|
50
|
-
|
51
|
-
@@ -
|
49
|
+
|
50
|
+
@@ -257,8 +281,21 @@ module Slack
|
52
51
|
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.update.json
|
53
52
|
def chat_update(options = {})
|
54
53
|
throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
|
@@ -24,10 +24,10 @@ module Slack
|
|
24
24
|
::Faraday::Connection.new(endpoint, options) do |connection|
|
25
25
|
connection.use ::Faraday::Request::Multipart
|
26
26
|
connection.use ::Faraday::Request::UrlEncoded
|
27
|
-
connection.use ::Slack::Web::Faraday::Response::WrapError
|
28
27
|
connection.use ::Slack::Web::Faraday::Response::RaiseError
|
29
28
|
connection.use ::FaradayMiddleware::Mashify, mash_class: Slack::Messages::Message
|
30
29
|
connection.use ::FaradayMiddleware::ParseJson
|
30
|
+
connection.use ::Slack::Web::Faraday::Response::WrapError
|
31
31
|
connection.response :logger, logger if logger
|
32
32
|
connection.adapter adapter
|
33
33
|
end
|
@@ -23,12 +23,8 @@ module Slack
|
|
23
23
|
|
24
24
|
def call(env)
|
25
25
|
super
|
26
|
-
rescue Slack::Web::Api::Errors::SlackError, Slack::Web::Api::Errors::TooManyRequestsError
|
27
|
-
raise
|
28
26
|
rescue ::Faraday::ParsingError
|
29
27
|
raise Slack::Web::Api::Errors::ParsingError.new('parsing_error', env.response)
|
30
|
-
rescue ::Faraday::TimeoutError, ::Faraday::ConnectionFailed
|
31
|
-
raise Slack::Web::Api::Errors::TimeoutError.new('timeout_error', env.response)
|
32
28
|
end
|
33
29
|
end
|
34
30
|
end
|
@@ -3,14 +3,20 @@ module Slack
|
|
3
3
|
module Web
|
4
4
|
module Faraday
|
5
5
|
module Response
|
6
|
-
class WrapError < ::Faraday::Response::
|
6
|
+
class WrapError < ::Faraday::Response::Middleware
|
7
|
+
UNAVAILABLE_ERROR_STATUSES = (500..599).freeze
|
8
|
+
|
7
9
|
def on_complete(env)
|
8
|
-
|
9
|
-
|
10
|
-
raise
|
11
|
-
rescue ::Faraday::ServerError
|
10
|
+
return unless UNAVAILABLE_ERROR_STATUSES.cover?(env.status)
|
11
|
+
|
12
12
|
raise Slack::Web::Api::Errors::UnavailableError.new('unavailable_error', env.response)
|
13
13
|
end
|
14
|
+
|
15
|
+
def call(env)
|
16
|
+
super
|
17
|
+
rescue ::Faraday::TimeoutError, ::Faraday::ConnectionFailed
|
18
|
+
raise Slack::Web::Api::Errors::TimeoutError.new('timeout_error', env.response)
|
19
|
+
end
|
14
20
|
end
|
15
21
|
end
|
16
22
|
end
|
data/lib/tasks/web.rake
CHANGED
@@ -32,6 +32,10 @@ namespace :slack do
|
|
32
32
|
parsed = JSON.parse(File.read(path))
|
33
33
|
parsed['undocumented'] = true if path =~ /undocumented/
|
34
34
|
JSON::Validator.validate(method_schema, parsed, insert_defaults: true)
|
35
|
+
if parsed['deprecated'] && parsed['deprecation']['deprecation_warning'] =~ /It will stop functioning in February 2021/
|
36
|
+
next
|
37
|
+
end
|
38
|
+
|
35
39
|
result[prefix][name] = parsed
|
36
40
|
end
|
37
41
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: post
|
5
|
-
uri: https://slack.com/api/
|
5
|
+
uri: https://slack.com/api/conversations.list
|
6
6
|
body:
|
7
7
|
encoding: UTF-8
|
8
8
|
string: token=token
|
@@ -15,14 +15,14 @@ http_interactions:
|
|
15
15
|
- application/json; charset=utf-8
|
16
16
|
body:
|
17
17
|
encoding: ASCII-8BIT
|
18
|
-
string: '{"ok":true,"
|
18
|
+
string: '{"ok":true,"channels":[{"id":"G0K7EV5A7","name":"mpdm-dblock--rubybot--player1-1","is_group":true,"created":1453561861,"creator":"U04KB5WQR","is_archived":false,"is_mpim":true,"members":["U04KB5WQR","U0HLFUZLJ","U07518DTL"],"topic":{"value":"Group
|
19
19
|
messaging","creator":"U04KB5WQR","last_set":1453561861},"purpose":{"value":"Group
|
20
20
|
messaging with: @dblock @rubybot @player1","creator":"U04KB5WQR","last_set":1453561861}}]}'
|
21
21
|
http_version:
|
22
22
|
recorded_at: Sat, 23 Jan 2016 15:19:10 GMT
|
23
23
|
- request:
|
24
24
|
method: post
|
25
|
-
uri: https://slack.com/api/
|
25
|
+
uri: https://slack.com/api/conversations.info
|
26
26
|
body:
|
27
27
|
encoding: UTF-8
|
28
28
|
string: channel=G0K7EV5A7&token=token
|
@@ -35,7 +35,7 @@ http_interactions:
|
|
35
35
|
- application/json; charset=utf-8
|
36
36
|
body:
|
37
37
|
encoding: ASCII-8BIT
|
38
|
-
string: '{"ok":true,"
|
38
|
+
string: '{"ok":true,"channel":{"id":"G0K7EV5A7","name":"mpdm-dblock--rubybot--player1-1","is_group":true,"created":1453561861,"creator":"U04KB5WQR","is_archived":false,"is_mpim":true,"is_open":false,"last_read":"0000000000.000000","latest":null,"unread_count":0,"unread_count_display":0,"members":["U04KB5WQR","U0HLFUZLJ","U07518DTL"],"topic":{"value":"Group
|
39
39
|
messaging","creator":"U04KB5WQR","last_set":1453561861},"purpose":{"value":"Group
|
40
40
|
messaging with: @dblock @rubybot @player1","creator":"U04KB5WQR","last_set":1453561861}}}'
|
41
41
|
http_version:
|
@@ -21,13 +21,14 @@ RSpec.describe Slack::Events::Request do
|
|
21
21
|
'"P7sFXA4o3HV2hTx4zb4zcQ9yrvuQs8pDh6EacOxmMRj0tJaXfQFF","type":"url_verification"}'
|
22
22
|
end
|
23
23
|
let(:http_request) do
|
24
|
-
double(
|
25
|
-
headers: {
|
26
|
-
'X-Slack-Request-Timestamp' => timestamp,
|
27
|
-
'X-Slack-Signature' => signature
|
28
|
-
},
|
24
|
+
request_double = double(
|
29
25
|
body: StringIO.new(body)
|
30
26
|
)
|
27
|
+
|
28
|
+
allow(request_double).to receive(:get_header).with('HTTP_X_SLACK_REQUEST_TIMESTAMP') { timestamp }
|
29
|
+
allow(request_double).to receive(:get_header).with('HTTP_X_SLACK_SIGNATURE') { signature }
|
30
|
+
|
31
|
+
request_double
|
31
32
|
end
|
32
33
|
|
33
34
|
after do
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
RSpec.describe 'with CONCURRENCY', skip: ( # rubocop:disable RSpec/DescribeClass
|
5
|
+
(!ENV['CONCURRENCY']) && 'missing CONCURRENCY'
|
6
|
+
) do
|
7
|
+
it 'detects concurrency' do
|
8
|
+
expect(Slack::RealTime::Config.concurrency).to eq Slack::RealTime::Concurrency::Async
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
RSpec.describe 'without CONCURRENCY', skip: ( # rubocop:disable RSpec/DescribeClass
|
5
|
+
(ENV['CONCURRENCY']) && 'CONCURRENCY is set'
|
6
|
+
) do
|
7
|
+
it 'raises NoConcurrencyError' do
|
8
|
+
expect { Slack::RealTime::Config.concurrency }.to raise_error Slack::RealTime::Config::NoConcurrencyError
|
9
|
+
end
|
10
|
+
end
|