slack-ruby-client 0.14.5 → 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/.github/FUNDING.yml +1 -0
- data/.rubocop.yml +11 -3
- data/.rubocop_todo.yml +61 -23
- data/.travis.yml +1 -5
- data/CHANGELOG.md +43 -4
- data/CONTRIBUTING.md +17 -6
- data/Dangerfile +1 -1
- data/Gemfile +1 -2
- data/LICENSE.md +1 -1
- data/README.md +86 -52
- data/UPGRADING.md +20 -2
- data/bin/commands.rb +23 -0
- data/bin/commands/admin_analytics.rb +16 -0
- data/bin/commands/admin_apps.rb +15 -2
- data/bin/commands/admin_apps_approved.rb +17 -0
- data/bin/commands/admin_apps_restricted.rb +17 -0
- data/bin/commands/admin_barriers.rb +47 -0
- data/bin/commands/admin_conversations.rb +159 -0
- data/bin/commands/admin_conversations_ekm.rb +17 -0
- data/bin/commands/admin_conversations_restrictAccess.rb +37 -0
- data/bin/commands/admin_conversations_whitelist.rb +37 -0
- data/bin/commands/admin_emoji.rb +54 -0
- data/bin/commands/admin_inviteRequests.rb +36 -0
- data/bin/commands/admin_inviteRequests_approved.rb +16 -0
- data/bin/commands/admin_inviteRequests_denied.rb +16 -0
- data/bin/commands/admin_teams.rb +27 -0
- data/bin/commands/admin_teams_admins.rb +16 -0
- data/bin/commands/admin_teams_owners.rb +16 -0
- data/bin/commands/admin_teams_settings.rb +64 -0
- data/bin/commands/admin_usergroups.rb +48 -0
- data/bin/commands/admin_users.rb +97 -0
- data/bin/commands/admin_users_session.rb +22 -0
- data/bin/commands/api.rb +0 -1
- data/bin/commands/apps_connections.rb +13 -0
- data/bin/commands/apps_event_authorizations.rb +16 -0
- data/bin/commands/auth_teams.rb +16 -0
- data/bin/commands/bots.rb +1 -0
- data/bin/commands/calls.rb +52 -0
- data/bin/commands/calls_participants.rb +25 -0
- data/bin/commands/channels.rb +1 -155
- data/bin/commands/chat.rb +14 -12
- data/bin/commands/chat_scheduledMessages.rb +1 -0
- data/bin/commands/conversations.rb +15 -4
- data/bin/commands/dnd.rb +3 -1
- data/bin/commands/files.rb +7 -5
- data/bin/commands/files_remote.rb +3 -3
- data/bin/commands/groups.rb +1 -162
- data/bin/commands/im.rb +1 -63
- data/bin/commands/migration.rb +1 -0
- data/bin/commands/mpim.rb +1 -61
- data/bin/commands/oauth.rb +1 -1
- data/bin/commands/pins.rb +0 -2
- data/bin/commands/reactions.rb +1 -0
- data/bin/commands/search.rb +4 -1
- data/bin/commands/team.rb +3 -0
- data/bin/commands/usergroups.rb +6 -1
- data/bin/commands/usergroups_users.rb +2 -0
- data/bin/commands/users.rb +5 -3
- data/bin/commands/users_profile.rb +5 -5
- data/bin/commands/views.rb +1 -1
- data/bin/commands/workflows.rb +38 -0
- data/lib/slack-ruby-client.rb +5 -4
- data/lib/slack/events/request.rb +7 -3
- data/lib/slack/messages/message.rb +0 -4
- data/lib/slack/real_time/client.rb +2 -1
- data/lib/slack/real_time/concurrency.rb +0 -2
- data/lib/slack/real_time/concurrency/async.rb +1 -3
- data/lib/slack/real_time/config.rb +5 -14
- data/lib/slack/real_time/models/base.rb +0 -4
- data/lib/slack/real_time/socket.rb +2 -2
- data/lib/slack/real_time/stores/base.rb +3 -1
- data/lib/slack/version.rb +1 -1
- data/lib/slack/web/api/endpoints.rb +47 -0
- data/lib/slack/web/api/endpoints/admin_analytics.rb +28 -0
- data/lib/slack/web/api/endpoints/admin_apps.rb +22 -2
- data/lib/slack/web/api/endpoints/admin_apps_approved.rb +35 -0
- data/lib/slack/web/api/endpoints/admin_apps_restricted.rb +35 -0
- data/lib/slack/web/api/endpoints/admin_barriers.rb +82 -0
- data/lib/slack/web/api/endpoints/admin_conversations.rb +246 -0
- data/lib/slack/web/api/endpoints/admin_conversations_ekm.rb +35 -0
- data/lib/slack/web/api/endpoints/admin_conversations_restrictAccess.rb +61 -0
- data/lib/slack/web/api/endpoints/admin_conversations_whitelist.rb +64 -0
- data/lib/slack/web/api/endpoints/admin_emoji.rb +88 -0
- data/lib/slack/web/api/endpoints/admin_inviteRequests.rb +61 -0
- data/lib/slack/web/api/endpoints/admin_inviteRequests_approved.rb +33 -0
- data/lib/slack/web/api/endpoints/admin_inviteRequests_denied.rb +33 -0
- data/lib/slack/web/api/endpoints/admin_teams.rb +50 -0
- data/lib/slack/web/api/endpoints/admin_teams_admins.rb +34 -0
- data/lib/slack/web/api/endpoints/admin_teams_owners.rb +34 -0
- data/lib/slack/web/api/endpoints/admin_teams_settings.rb +99 -0
- data/lib/slack/web/api/endpoints/admin_usergroups.rb +77 -0
- data/lib/slack/web/api/endpoints/admin_users.rb +161 -0
- data/lib/slack/web/api/endpoints/admin_users_session.rb +38 -0
- data/lib/slack/web/api/endpoints/api.rb +0 -2
- data/lib/slack/web/api/endpoints/apps_connections.rb +21 -0
- data/lib/slack/web/api/endpoints/apps_event_authorizations.rb +34 -0
- data/lib/slack/web/api/endpoints/auth_teams.rb +33 -0
- data/lib/slack/web/api/endpoints/bots.rb +2 -0
- data/lib/slack/web/api/endpoints/calls.rb +83 -0
- data/lib/slack/web/api/endpoints/calls_participants.rb +42 -0
- data/lib/slack/web/api/endpoints/channels.rb +1 -245
- data/lib/slack/web/api/endpoints/chat.rb +23 -19
- data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +3 -1
- data/lib/slack/web/api/endpoints/conversations.rb +37 -19
- data/lib/slack/web/api/endpoints/dnd.rb +4 -0
- data/lib/slack/web/api/endpoints/files.rb +8 -4
- data/lib/slack/web/api/endpoints/files_remote.rb +4 -4
- data/lib/slack/web/api/endpoints/groups.rb +0 -253
- data/lib/slack/web/api/endpoints/im.rb +0 -101
- data/lib/slack/web/api/endpoints/migration.rb +2 -0
- data/lib/slack/web/api/endpoints/mpim.rb +0 -96
- data/lib/slack/web/api/endpoints/oauth.rb +1 -4
- data/lib/slack/web/api/endpoints/pins.rb +3 -8
- data/lib/slack/web/api/endpoints/reactions.rb +5 -3
- data/lib/slack/web/api/endpoints/search.rb +6 -0
- data/lib/slack/web/api/endpoints/stars.rb +2 -2
- data/lib/slack/web/api/endpoints/team.rb +6 -0
- data/lib/slack/web/api/endpoints/usergroups.rb +10 -0
- data/lib/slack/web/api/endpoints/usergroups_users.rb +4 -0
- data/lib/slack/web/api/endpoints/users.rb +7 -5
- data/lib/slack/web/api/endpoints/users_profile.rb +3 -3
- data/lib/slack/web/api/endpoints/views.rb +1 -1
- data/lib/slack/web/api/endpoints/workflows.rb +61 -0
- data/lib/slack/web/api/errors.rb +848 -0
- data/lib/slack/web/api/errors/internal_error.rb +14 -0
- data/lib/slack/web/api/errors/slack_error.rb +12 -0
- data/lib/slack/web/api/mixins.rb +1 -0
- data/lib/slack/web/api/mixins/channels.id.rb +1 -3
- data/lib/slack/web/api/mixins/conversations.id.rb +25 -0
- data/lib/slack/web/api/mixins/groups.id.rb +1 -3
- data/lib/slack/web/api/mixins/ids.id.rb +3 -5
- data/lib/slack/web/api/mixins/users.id.rb +1 -3
- data/lib/slack/web/api/patches/{chat.6.block-kit-support.patch → chat.1.patch} +26 -24
- data/lib/slack/web/api/templates/endpoints.erb +1 -0
- data/lib/slack/web/api/templates/errors.erb +20 -0
- data/lib/slack/web/api/templates/method.erb +4 -1
- data/lib/slack/web/api/templates/method_spec.erb +1 -1
- data/lib/slack/web/client.rb +1 -1
- data/lib/slack/web/config.rb +2 -0
- data/lib/slack/web/faraday/connection.rb +23 -20
- data/lib/slack/web/faraday/response/raise_error.rb +16 -2
- data/lib/slack/web/faraday/response/wrap_error.rb +24 -0
- data/lib/slack/web/pagination/cursor.rb +2 -2
- data/lib/tasks/real_time.rake +1 -1
- data/lib/tasks/web.rake +21 -4
- data/slack-ruby-client.gemspec +5 -5
- data/spec/fixtures/slack/web/channels_info.yml +108 -15
- data/spec/fixtures/slack/web/{groups_info.yml → conversations_info.yml} +4 -4
- data/spec/fixtures/slack/web/conversations_setTopic.yml +69 -0
- data/spec/fixtures/slack/web/conversations_setTopic_one_page.yml +142 -0
- data/spec/fixtures/slack/web/conversations_setTopic_paginated.yml +208 -0
- data/spec/fixtures/slack/web/views_open_error.yml +76 -0
- data/spec/slack/events/request_spec.rb +13 -8
- data/spec/slack/real_time/client_spec.rb +18 -1
- 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_analytics_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/admin_apps_approved_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_apps_restricted_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_apps_spec.rb +5 -0
- data/spec/slack/web/api/endpoints/admin_barriers_spec.rb +38 -0
- data/spec/slack/web/api/endpoints/admin_conversations_ekm_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_conversations_restrictAccess_spec.rb +32 -0
- data/spec/slack/web/api/endpoints/admin_conversations_spec.rb +93 -0
- data/spec/slack/web/api/endpoints/admin_emoji_spec.rb +37 -0
- data/spec/slack/web/api/endpoints/admin_inviteRequests_approved_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_inviteRequests_denied_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_inviteRequests_spec.rb +18 -0
- data/spec/slack/web/api/endpoints/admin_teams_admins_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/admin_teams_owners_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/admin_teams_settings_spec.rb +53 -0
- data/spec/slack/web/api/endpoints/admin_teams_spec.rb +16 -0
- data/spec/slack/web/api/endpoints/admin_usergroups_spec.rb +37 -0
- data/spec/slack/web/api/endpoints/admin_users_session_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_users_spec.rb +67 -0
- data/spec/slack/web/api/endpoints/apps_connections_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/apps_event_authorizations_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/apps_permissions_spec.rb +2 -2
- data/spec/slack/web/api/endpoints/apps_permissions_users_spec.rb +3 -3
- data/spec/slack/web/api/endpoints/apps_spec.rb +2 -2
- data/spec/slack/web/api/endpoints/auth_teams_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/calls_participants_spec.rb +24 -0
- data/spec/slack/web/api/endpoints/calls_spec.rb +31 -0
- data/spec/slack/web/api/endpoints/conversations_spec.rb +20 -12
- data/spec/slack/web/api/endpoints/custom_specs/conversations_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/files_comments_spec.rb +2 -2
- data/spec/slack/web/api/endpoints/files_remote_spec.rb +3 -3
- data/spec/slack/web/api/endpoints/files_spec.rb +4 -4
- 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/api/endpoints/oauth_spec.rb +3 -14
- data/spec/slack/web/api/endpoints/pins_spec.rb +1 -4
- data/spec/slack/web/api/endpoints/reactions_spec.rb +3 -3
- data/spec/slack/web/api/endpoints/reminders_spec.rb +2 -2
- data/spec/slack/web/api/endpoints/usergroups_users_spec.rb +2 -2
- data/spec/slack/web/api/endpoints/workflows_spec.rb +26 -0
- data/spec/slack/web/api/errors/slack_error_spec.rb +22 -0
- data/spec/slack/web/api/mixins/channels_spec.rb +1 -1
- data/spec/slack/web/api/mixins/conversations_list_spec.rb +21 -0
- data/spec/slack/web/api/mixins/conversations_spec.rb +43 -0
- data/spec/slack/web/api/mixins/groups_spec.rb +1 -1
- data/spec/slack/web/api/mixins/users_spec.rb +1 -1
- data/spec/slack/web/client_spec.rb +121 -0
- data/spec/slack/web/faraday/response/raise_error_spec.rb +33 -9
- data/spec/support/vcr.rb +4 -0
- metadata +145 -55
- data/examples/hi_real_time/Gemfile +0 -6
- data/examples/hi_real_time/hi.gif +0 -0
- data/examples/hi_real_time/hi.rb +0 -41
- data/examples/hi_real_time_async_celluloid/Gemfile +0 -7
- data/examples/hi_real_time_async_celluloid/Procfile +0 -2
- data/examples/hi_real_time_async_celluloid/hi.rb +0 -39
- data/examples/hi_real_time_async_eventmachine/Gemfile +0 -7
- data/examples/hi_real_time_async_eventmachine/Procfile +0 -2
- data/examples/hi_real_time_async_eventmachine/hi.rb +0 -39
- data/lib/slack/real_time/concurrency/celluloid.rb +0 -142
- data/lib/slack/real_time/concurrency/eventmachine.rb +0 -85
- data/lib/slack/web/api/patches/chat.1.text-attachments-required.patch +0 -13
- data/lib/slack/web/api/patches/chat.2.attachments-json.patch +0 -17
- data/lib/slack/web/api/patches/chat.3.update-attachments-support.patch +0 -21
- data/lib/slack/web/api/patches/chat.4.postEphemeral-attachments-support.patch +0 -17
- data/lib/slack/web/api/patches/chat.5.postEphemeral-text-or-attachments.patch +0 -15
- data/spec/slack/real_time/concurrency/celluloid_spec.rb +0 -116
- data/spec/slack/real_time/concurrency/eventmachine_spec.rb +0 -57
- 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
- data/spec/slack/web/api/errors/service_unavailable_spec.rb +0 -17
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module Slack
|
|
3
|
+
module Web
|
|
4
|
+
module Api
|
|
5
|
+
module Errors
|
|
6
|
+
class ServerError < InternalError; end
|
|
7
|
+
class ParsingError < ServerError; end
|
|
8
|
+
class HttpRequestError < ServerError; end
|
|
9
|
+
class TimeoutError < HttpRequestError; end
|
|
10
|
+
class UnavailableError < HttpRequestError; end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -10,6 +10,18 @@ module Slack
|
|
|
10
10
|
super message
|
|
11
11
|
@response = response
|
|
12
12
|
end
|
|
13
|
+
|
|
14
|
+
def error
|
|
15
|
+
response.body.error
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def errors
|
|
19
|
+
response.body.errors
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def response_metadata
|
|
23
|
+
response.body.response_metadata
|
|
24
|
+
end
|
|
13
25
|
end
|
|
14
26
|
end
|
|
15
27
|
end
|
data/lib/slack/web/api/mixins.rb
CHANGED
|
@@ -16,9 +16,7 @@ module Slack
|
|
|
16
16
|
name = options[:channel]
|
|
17
17
|
throw ArgumentError.new('Required arguments :channel missing') if name.nil?
|
|
18
18
|
|
|
19
|
-
id_for
|
|
20
|
-
channels_list
|
|
21
|
-
end
|
|
19
|
+
id_for :channel, name, '#', :channels_list, :channels, 'channel_not_found'
|
|
22
20
|
end
|
|
23
21
|
end
|
|
24
22
|
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require_relative 'ids.id'
|
|
3
|
+
|
|
4
|
+
module Slack
|
|
5
|
+
module Web
|
|
6
|
+
module Api
|
|
7
|
+
module Mixins
|
|
8
|
+
module Conversations
|
|
9
|
+
include Ids
|
|
10
|
+
#
|
|
11
|
+
# This method returns a channel ID given a channel name.
|
|
12
|
+
#
|
|
13
|
+
# @option options [channel] :channel
|
|
14
|
+
# Channel to get ID for, prefixed with #.
|
|
15
|
+
def conversations_id(options = {})
|
|
16
|
+
name = options[:channel]
|
|
17
|
+
throw ArgumentError.new('Required arguments :channel missing') if name.nil?
|
|
18
|
+
|
|
19
|
+
id_for :channel, name, '#', :conversations_list, :channels, 'channel_not_found'
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -16,9 +16,7 @@ module Slack
|
|
|
16
16
|
name = options[:channel]
|
|
17
17
|
throw ArgumentError.new('Required arguments :channel missing') if name.nil?
|
|
18
18
|
|
|
19
|
-
id_for
|
|
20
|
-
groups_list
|
|
21
|
-
end
|
|
19
|
+
id_for :group, name, '#', :groups_list, :groups, 'channel_not_found'
|
|
22
20
|
end
|
|
23
21
|
end
|
|
24
22
|
end
|
|
@@ -6,14 +6,12 @@ module Slack
|
|
|
6
6
|
module Ids
|
|
7
7
|
private
|
|
8
8
|
|
|
9
|
-
def id_for(key, name, prefix, list_method, not_found_error)
|
|
9
|
+
def id_for(key, name, prefix, enum_method, list_method, not_found_error)
|
|
10
10
|
return { 'ok' => true, key.to_s => { 'id' => name } } unless name[0] == prefix
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
public_send enum_method do |list|
|
|
13
13
|
list.public_send(list_method).each do |li|
|
|
14
|
-
if li.name == name[1..-1]
|
|
15
|
-
return Slack::Messages::Message.new('ok' => true, key.to_s => { 'id' => li.id })
|
|
16
|
-
end
|
|
14
|
+
return Slack::Messages::Message.new('ok' => true, key.to_s => { 'id' => li.id }) if li.name == name[1..-1]
|
|
17
15
|
end
|
|
18
16
|
end
|
|
19
17
|
|
|
@@ -16,9 +16,7 @@ module Slack
|
|
|
16
16
|
name = options[:user]
|
|
17
17
|
throw ArgumentError.new('Required arguments :user missing') if name.nil?
|
|
18
18
|
|
|
19
|
-
id_for
|
|
20
|
-
users_list
|
|
21
|
-
end
|
|
19
|
+
id_for :user, name, '@', :users_list, :members, 'user_not_found'
|
|
22
20
|
end
|
|
23
21
|
end
|
|
24
22
|
end
|
|
@@ -1,20 +1,23 @@
|
|
|
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
|
|
6
|
+
# @see https://api.slack.com/methods/chat.postEphemeral
|
|
6
7
|
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.postEphemeral.json
|
|
7
8
|
def chat_postEphemeral(options = {})
|
|
9
|
+
- throw ArgumentError.new('Required arguments :attachments missing') if options[:attachments].nil?
|
|
8
10
|
throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
|
|
9
|
-
- throw ArgumentError.new('Required arguments :text
|
|
11
|
+
- throw ArgumentError.new('Required arguments :text missing') if options[:text].nil?
|
|
10
12
|
+ throw ArgumentError.new('Required arguments :text, :attachments or :blocks missing') if options[:text].nil? && options[:attachments].nil? && options[:blocks].nil?
|
|
11
13
|
throw ArgumentError.new('Required arguments :user missing') if options[:user].nil?
|
|
12
14
|
options = options.merge(user: users_id(options)['user']['id']) if options[:user]
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
+ # attachments must be passed as an encoded JSON string
|
|
16
|
+
+ if options.key?(:attachments)
|
|
17
|
+
+ attachments = options[:attachments]
|
|
18
|
+
+ attachments = JSON.dump(attachments) unless attachments.is_a?(String)
|
|
19
|
+
+ options = options.merge(attachments: attachments)
|
|
20
|
+
+ end
|
|
18
21
|
+ # blocks must be passed as an encoded JSON string
|
|
19
22
|
+ if options.key?(:blocks)
|
|
20
23
|
+ blocks = options[:blocks]
|
|
@@ -24,18 +27,17 @@ index 54a7db1..c535bb5 100644
|
|
|
24
27
|
post('chat.postEphemeral', options)
|
|
25
28
|
end
|
|
26
29
|
|
|
27
|
-
@@ -
|
|
30
|
+
@@ -168,6 +179,19 @@ module Slack
|
|
28
31
|
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.postMessage.json
|
|
29
32
|
def chat_postMessage(options = {})
|
|
30
33
|
throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
|
|
31
|
-
- throw ArgumentError.new('Required arguments :text or :attachments missing') if options[:text].nil? && options[:attachments].nil?
|
|
32
34
|
+ throw ArgumentError.new('Required arguments :text, :attachments or :blocks missing') if options[:text].nil? && options[:attachments].nil? && options[:blocks].nil?
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
+ # attachments must be passed as an encoded JSON string
|
|
36
|
+
+ if options.key?(:attachments)
|
|
37
|
+
+ attachments = options[:attachments]
|
|
38
|
+
+ attachments = JSON.dump(attachments) unless attachments.is_a?(String)
|
|
39
|
+
+ options = options.merge(attachments: attachments)
|
|
40
|
+
+ end
|
|
39
41
|
+ # blocks must be passed as an encoded JSON string
|
|
40
42
|
+ if options.key?(:blocks)
|
|
41
43
|
+ blocks = options[:blocks]
|
|
@@ -45,19 +47,19 @@ index 54a7db1..c535bb5 100644
|
|
|
45
47
|
post('chat.postMessage', options)
|
|
46
48
|
end
|
|
47
49
|
|
|
48
|
-
@@ -
|
|
50
|
+
@@ -257,8 +281,21 @@ module Slack
|
|
49
51
|
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.update.json
|
|
50
52
|
def chat_update(options = {})
|
|
51
53
|
throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
|
|
52
|
-
- throw ArgumentError.new('Required arguments :text or :attachments missing') if options[:text].nil? && options[:attachments].nil?
|
|
53
54
|
+ throw ArgumentError.new('Required arguments :text, :attachments or :blocks missing') if options[:text].nil? && options[:attachments].nil? && options[:blocks].nil?
|
|
54
55
|
throw ArgumentError.new('Required arguments :ts missing') if options[:ts].nil?
|
|
55
|
-
options = options.merge(channel:
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
56
|
+
options = options.merge(channel: conversations_id(options)['channel']['id']) if options[:channel]
|
|
57
|
+
+ # attachments must be passed as an encoded JSON string
|
|
58
|
+
+ if options.key?(:attachments)
|
|
59
|
+
+ attachments = options[:attachments]
|
|
60
|
+
+ attachments = JSON.dump(attachments) unless attachments.is_a?(String)
|
|
61
|
+
+ options = options.merge(attachments: attachments)
|
|
62
|
+
+ end
|
|
61
63
|
+ # blocks must be passed as an encoded JSON string
|
|
62
64
|
+ if options.key?(:blocks)
|
|
63
65
|
+ blocks = options[:blocks]
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
# This file was auto-generated by lib/tasks/web.rake
|
|
3
|
+
|
|
4
|
+
module Slack
|
|
5
|
+
module Web
|
|
6
|
+
module Api
|
|
7
|
+
module Errors
|
|
8
|
+
<% errors.each do |e| %>
|
|
9
|
+
class <%= e.camelize %> < SlackError; end
|
|
10
|
+
<% end %>
|
|
11
|
+
|
|
12
|
+
ERROR_CLASSES = {
|
|
13
|
+
<% errors.each do |e| %>
|
|
14
|
+
'<%= e %>' => <%= e.camelize %>,
|
|
15
|
+
<% end %>
|
|
16
|
+
}.freeze
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -40,7 +40,7 @@ module Slack
|
|
|
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]
|
|
42
42
|
<% elsif data['args']['channel'] && !data['args']['channel']['desc'].include?('Can be an encoded ID, or a name.') %>
|
|
43
|
-
options = options.merge(channel:
|
|
43
|
+
options = options.merge(channel: conversations_id(options)['channel']['id']) if options[:channel]
|
|
44
44
|
<% end %>
|
|
45
45
|
<% if data['args']['user'] %>
|
|
46
46
|
options = options.merge(user: users_id(options)['user']['id']) if options[:user]
|
|
@@ -48,6 +48,9 @@ module Slack
|
|
|
48
48
|
<% if data['undocumented'] %>
|
|
49
49
|
logger.warn('The <%= group %>.<%= name %> method is undocumented.')
|
|
50
50
|
<% end %>
|
|
51
|
+
<% if data['deprecated'] %>
|
|
52
|
+
logger.warn('<%= group %>.<%= name %>: <%= data['deprecation']['deprecation_warning']%> Alternative methods: <%= data['deprecation']['alternative_methods'].join(', ')%>.')
|
|
53
|
+
<% end %>
|
|
51
54
|
<% if data['args'].keys.include?('cursor') %>
|
|
52
55
|
if block_given?
|
|
53
56
|
Pagination::Cursor.new(self, :<%= group.gsub(".", "_") %>_<%= name %>, options).each do |page|
|
|
@@ -12,7 +12,7 @@ RSpec.describe Slack::Web::Api::Endpoints::<%= group.gsub(".", "_").camelize %>
|
|
|
12
12
|
context '<%= group %>_<%= name %>' do
|
|
13
13
|
<% required_params.each do |arg_name, arg_v| %>
|
|
14
14
|
it 'requires <%= arg_name %>' do
|
|
15
|
-
<% params_except_required = required_params.reject{ |name, _| name == arg_name }.map{|var, opts| "#{var}:
|
|
15
|
+
<% params_except_required = required_params.reject{ |name, _| name == arg_name }.map{ |var, opts| "#{var}: %q[#{opts['example']}]"}.join(', ') %>
|
|
16
16
|
expect { client.<%= group.gsub(".", "_") %>_<%= name %><%= params_except_required.empty? ? '' : "(#{params_except_required})" %> }.to raise_error ArgumentError, /Required arguments :<%= arg_name %> missing/
|
|
17
17
|
end
|
|
18
18
|
<% end %>
|
data/lib/slack/web/client.rb
CHANGED
|
@@ -10,7 +10,7 @@ module Slack
|
|
|
10
10
|
|
|
11
11
|
def initialize(options = {})
|
|
12
12
|
Slack::Web::Config::ATTRIBUTES.each do |key|
|
|
13
|
-
send("#{key}=", options
|
|
13
|
+
send("#{key}=", options.fetch(key, Slack::Web.config.send(key)))
|
|
14
14
|
end
|
|
15
15
|
@logger ||= Slack::Config.logger || Slack::Logger.default
|
|
16
16
|
@token ||= Slack.config.token
|
data/lib/slack/web/config.rb
CHANGED
|
@@ -16,6 +16,7 @@ module Slack
|
|
|
16
16
|
open_timeout
|
|
17
17
|
default_page_size
|
|
18
18
|
default_max_retries
|
|
19
|
+
adapter
|
|
19
20
|
].freeze
|
|
20
21
|
|
|
21
22
|
attr_accessor(*Config::ATTRIBUTES)
|
|
@@ -32,6 +33,7 @@ module Slack
|
|
|
32
33
|
self.open_timeout = nil
|
|
33
34
|
self.default_page_size = 100
|
|
34
35
|
self.default_max_retries = 100
|
|
36
|
+
self.adapter = ::Faraday.default_adapter
|
|
35
37
|
end
|
|
36
38
|
end
|
|
37
39
|
|
|
@@ -6,29 +6,32 @@ module Slack
|
|
|
6
6
|
private
|
|
7
7
|
|
|
8
8
|
def connection
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
@connection ||=
|
|
10
|
+
begin
|
|
11
|
+
options = {
|
|
12
|
+
headers: { 'Accept' => 'application/json; charset=utf-8' }
|
|
13
|
+
}
|
|
12
14
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
options[:headers]['User-Agent'] = user_agent if user_agent
|
|
16
|
+
options[:proxy] = proxy if proxy
|
|
17
|
+
options[:ssl] = { ca_path: ca_path, ca_file: ca_file } if ca_path || ca_file
|
|
16
18
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
request_options = {}
|
|
20
|
+
request_options[:timeout] = timeout if timeout
|
|
21
|
+
request_options[:open_timeout] = open_timeout if open_timeout
|
|
22
|
+
options[:request] = request_options if request_options.any?
|
|
21
23
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
24
|
+
::Faraday::Connection.new(endpoint, options) do |connection|
|
|
25
|
+
connection.use ::Faraday::Request::Multipart
|
|
26
|
+
connection.use ::Faraday::Request::UrlEncoded
|
|
27
|
+
connection.use ::Slack::Web::Faraday::Response::RaiseError
|
|
28
|
+
connection.use ::FaradayMiddleware::Mashify, mash_class: Slack::Messages::Message
|
|
29
|
+
connection.use ::FaradayMiddleware::ParseJson
|
|
30
|
+
connection.use ::Slack::Web::Faraday::Response::WrapError
|
|
31
|
+
connection.response :logger, logger if logger
|
|
32
|
+
connection.adapter adapter
|
|
33
|
+
end
|
|
34
|
+
end
|
|
32
35
|
end
|
|
33
36
|
end
|
|
34
37
|
end
|
|
@@ -6,11 +6,25 @@ module Slack
|
|
|
6
6
|
class RaiseError < ::Faraday::Response::Middleware
|
|
7
7
|
def on_complete(env)
|
|
8
8
|
raise Slack::Web::Api::Errors::TooManyRequestsError, env.response if env.status == 429
|
|
9
|
-
|
|
9
|
+
|
|
10
|
+
return unless env.success?
|
|
11
|
+
|
|
12
|
+
body = env.body
|
|
13
|
+
return unless body
|
|
14
|
+
return if body['ok']
|
|
10
15
|
|
|
11
16
|
error_message =
|
|
12
17
|
body['error'] || body['errors'].map { |message| message['error'] }.join(',')
|
|
13
|
-
|
|
18
|
+
|
|
19
|
+
error_class = Slack::Web::Api::Errors::ERROR_CLASSES[error_message]
|
|
20
|
+
error_class ||= Slack::Web::Api::Errors::SlackError
|
|
21
|
+
raise error_class.new(error_message, env.response)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def call(env)
|
|
25
|
+
super
|
|
26
|
+
rescue ::Faraday::ParsingError
|
|
27
|
+
raise Slack::Web::Api::Errors::ParsingError.new('parsing_error', env.response)
|
|
14
28
|
end
|
|
15
29
|
end
|
|
16
30
|
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module Slack
|
|
3
|
+
module Web
|
|
4
|
+
module Faraday
|
|
5
|
+
module Response
|
|
6
|
+
class WrapError < ::Faraday::Response::Middleware
|
|
7
|
+
UNAVAILABLE_ERROR_STATUSES = (500..599).freeze
|
|
8
|
+
|
|
9
|
+
def on_complete(env)
|
|
10
|
+
return unless UNAVAILABLE_ERROR_STATUSES.cover?(env.status)
|
|
11
|
+
|
|
12
|
+
raise Slack::Web::Api::Errors::UnavailableError.new('unavailable_error', env.response)
|
|
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
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -32,14 +32,14 @@ module Slack
|
|
|
32
32
|
|
|
33
33
|
client.logger.debug("#{self.class}##{__method__}") { e.to_s }
|
|
34
34
|
retry_count += 1
|
|
35
|
-
sleep(e.retry_after
|
|
35
|
+
sleep(e.retry_after)
|
|
36
36
|
next
|
|
37
37
|
end
|
|
38
38
|
yield response
|
|
39
39
|
break unless response.response_metadata
|
|
40
40
|
|
|
41
41
|
next_cursor = response.response_metadata.next_cursor
|
|
42
|
-
break if next_cursor.
|
|
42
|
+
break if next_cursor.nil? || next_cursor == ''
|
|
43
43
|
|
|
44
44
|
retry_count = 0
|
|
45
45
|
sleep(sleep_interval) if sleep_interval
|
data/lib/tasks/real_time.rake
CHANGED
|
@@ -8,7 +8,7 @@ namespace :slack do
|
|
|
8
8
|
namespace :api do
|
|
9
9
|
REAL_TIME_EVENTS_MARKER = '### RealTime Events'
|
|
10
10
|
|
|
11
|
-
desc 'Update API.'
|
|
11
|
+
desc 'Update Real Time API.'
|
|
12
12
|
task update: [:git_update] do
|
|
13
13
|
event_schema = JSON.parse(File.read('lib/slack/real_time/api/schema/event.json'))
|
|
14
14
|
dirglob = 'lib/slack/web/api/slack-api-ref/events/**/*.json'
|
data/lib/tasks/web.rake
CHANGED
|
@@ -8,7 +8,7 @@ require 'active_support/core_ext'
|
|
|
8
8
|
namespace :slack do
|
|
9
9
|
namespace :web do
|
|
10
10
|
namespace :api do
|
|
11
|
-
desc 'Update API.'
|
|
11
|
+
desc 'Update Web API.'
|
|
12
12
|
task update: [:git_update] do
|
|
13
13
|
group_schema = JSON.parse(File.read('lib/slack/web/api/schema/group.json'))
|
|
14
14
|
dirglob = 'lib/slack/web/api/slack-api-ref/groups/**/*.json'
|
|
@@ -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
|
|
|
@@ -51,10 +55,14 @@ namespace :slack do
|
|
|
51
55
|
rendered_method_spec = method_spec_template.result(group: group, names: names)
|
|
52
56
|
File.write "spec/slack/web/api/endpoints/#{snaked_group}_spec.rb", rendered_method_spec
|
|
53
57
|
end
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
58
|
+
|
|
59
|
+
unless ENV.key?('SKIP_PATCH')
|
|
60
|
+
Dir.glob("lib/slack/web/api/patches/#{group}*.patch").sort.each do |patch|
|
|
61
|
+
puts "- patching #{patch}"
|
|
62
|
+
system("git apply #{patch}") || raise('failed to apply patch')
|
|
63
|
+
end
|
|
57
64
|
end
|
|
65
|
+
|
|
58
66
|
# command
|
|
59
67
|
raise "Missing group #{group}" unless groups.key?(group)
|
|
60
68
|
|
|
@@ -74,6 +82,15 @@ namespace :slack do
|
|
|
74
82
|
'bin/commands.rb',
|
|
75
83
|
commands_template.result(files: data.keys.map { |key| key.tr('.', '_') })
|
|
76
84
|
)
|
|
85
|
+
|
|
86
|
+
errors_template = Erubis::Eruby.new(File.read('lib/slack/web/api/templates/errors.erb'))
|
|
87
|
+
errors = data.values.map do |names|
|
|
88
|
+
names.values.map do |d|
|
|
89
|
+
d['errors'].keys
|
|
90
|
+
end
|
|
91
|
+
end.flatten.compact.uniq.sort
|
|
92
|
+
rendered_errors = errors_template.result(errors: errors)
|
|
93
|
+
File.write('lib/slack/web/api/errors.rb', rendered_errors)
|
|
77
94
|
end
|
|
78
95
|
end
|
|
79
96
|
end
|