slack-ruby-client 0.12.0 → 0.14.6
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/.gitignore +1 -0
- data/.rubocop.yml +21 -9
- data/.rubocop_todo.yml +64 -56
- data/.travis.yml +5 -3
- data/CHANGELOG.md +90 -32
- data/Dangerfile +2 -0
- data/Gemfile +10 -4
- data/LICENSE.md +1 -1
- data/README.md +176 -32
- data/Rakefile +2 -1
- data/UPGRADING.md +27 -1
- data/bin/commands.rb +21 -0
- data/bin/commands/admin_apps.rb +27 -0
- data/bin/commands/admin_apps_approved.rb +17 -0
- data/bin/commands/admin_apps_requests.rb +16 -0
- data/bin/commands/admin_apps_restricted.rb +17 -0
- data/bin/commands/admin_conversations.rb +17 -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_users.rb +97 -0
- data/bin/commands/admin_users_session.rb +16 -0
- data/bin/commands/api.rb +1 -0
- data/bin/commands/apps.rb +15 -0
- data/bin/commands/apps_permissions.rb +1 -0
- data/bin/commands/apps_permissions_resources.rb +1 -0
- data/bin/commands/apps_permissions_scopes.rb +1 -0
- data/bin/commands/apps_permissions_users.rb +1 -0
- data/bin/commands/auth.rb +1 -0
- data/bin/commands/bots.rb +1 -0
- data/bin/commands/channels.rb +3 -1
- data/bin/commands/chat.rb +48 -9
- data/bin/commands/chat_scheduledMessages.rb +18 -0
- data/bin/commands/conversations.rb +4 -2
- data/bin/commands/dialog.rb +1 -0
- data/bin/commands/dnd.rb +4 -3
- data/bin/commands/emoji.rb +1 -0
- data/bin/commands/files.rb +4 -14
- data/bin/commands/files_comments.rb +1 -21
- data/bin/commands/files_remote.rb +78 -0
- data/bin/commands/groups.rb +2 -1
- data/bin/commands/im.rb +2 -1
- data/bin/commands/migration.rb +1 -0
- data/bin/commands/mpim.rb +2 -1
- data/bin/commands/oauth.rb +2 -1
- data/bin/commands/oauth_v2.rb +17 -0
- data/bin/commands/pins.rb +1 -2
- data/bin/commands/reactions.rb +2 -3
- data/bin/commands/reminders.rb +1 -0
- data/bin/commands/rtm.rb +1 -0
- data/bin/commands/search.rb +2 -1
- data/bin/commands/stars.rb +1 -0
- data/bin/commands/team.rb +2 -0
- data/bin/commands/team_profile.rb +1 -0
- data/bin/commands/usergroups.rb +2 -1
- data/bin/commands/usergroups_users.rb +1 -0
- data/bin/commands/users.rb +2 -2
- data/bin/commands/users_admin.rb +1 -0
- data/bin/commands/users_prefs.rb +1 -0
- data/bin/commands/users_profile.rb +1 -0
- data/bin/commands/views.rb +48 -0
- data/bin/slack +2 -3
- data/examples/hi_real_time/Gemfile +1 -0
- data/examples/hi_real_time/hi.rb +7 -3
- data/examples/hi_real_time_and_web/Gemfile +1 -0
- data/examples/hi_real_time_and_web/hi.rb +7 -3
- data/examples/hi_real_time_async_async/Gemfile +7 -0
- data/examples/hi_real_time_async_async/Procfile +2 -0
- data/examples/hi_real_time_async_async/hi.rb +41 -0
- data/examples/hi_real_time_async_celluloid/Gemfile +1 -0
- data/examples/hi_real_time_async_celluloid/hi.rb +7 -3
- data/examples/hi_real_time_async_eventmachine/Gemfile +1 -0
- data/examples/hi_real_time_async_eventmachine/hi.rb +7 -3
- data/examples/hi_web/Gemfile +1 -0
- data/examples/hi_web/hi.rb +1 -0
- data/examples/new_ticket/Gemfile +1 -0
- data/examples/new_ticket/new_ticket.rb +1 -0
- data/lib/slack-ruby-client.rb +8 -2
- data/lib/slack.rb +1 -0
- data/lib/slack/config.rb +1 -0
- data/lib/slack/events/config.rb +32 -0
- data/lib/slack/events/request.rb +66 -0
- data/lib/slack/logger.rb +6 -5
- data/lib/slack/messages/formatting.rb +1 -0
- data/lib/slack/messages/message.rb +1 -0
- data/lib/slack/real_time/api/message.rb +3 -1
- data/lib/slack/real_time/api/message_id.rb +1 -0
- data/lib/slack/real_time/api/ping.rb +5 -2
- data/lib/slack/real_time/api/typing.rb +3 -1
- data/lib/slack/real_time/client.rb +97 -28
- data/lib/slack/real_time/concurrency.rb +2 -0
- data/lib/slack/real_time/concurrency/async.rb +142 -0
- data/lib/slack/real_time/concurrency/celluloid.rb +33 -9
- data/lib/slack/real_time/concurrency/eventmachine.rb +32 -7
- data/lib/slack/real_time/config.rb +7 -2
- data/lib/slack/real_time/models.rb +1 -0
- data/lib/slack/real_time/models/base.rb +1 -0
- data/lib/slack/real_time/models/bot.rb +1 -0
- data/lib/slack/real_time/models/channel.rb +1 -0
- data/lib/slack/real_time/models/group.rb +1 -0
- data/lib/slack/real_time/models/im.rb +1 -0
- data/lib/slack/real_time/models/team.rb +1 -0
- data/lib/slack/real_time/models/user.rb +1 -0
- data/lib/slack/real_time/socket.rb +42 -13
- data/lib/slack/real_time/stores.rb +1 -0
- data/lib/slack/real_time/stores/base.rb +1 -0
- data/lib/slack/real_time/stores/starter.rb +11 -0
- data/lib/slack/real_time/stores/store.rb +28 -25
- data/lib/slack/version.rb +2 -1
- data/lib/slack/web/api/endpoints.rb +41 -0
- data/lib/slack/web/api/endpoints/admin_apps.rb +42 -0
- data/lib/slack/web/api/endpoints/admin_apps_approved.rb +35 -0
- data/lib/slack/web/api/endpoints/admin_apps_requests.rb +33 -0
- data/lib/slack/web/api/endpoints/admin_apps_restricted.rb +35 -0
- data/lib/slack/web/api/endpoints/admin_conversations.rb +30 -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_users.rb +163 -0
- data/lib/slack/web/api/endpoints/admin_users_session.rb +28 -0
- data/lib/slack/web/api/endpoints/api.rb +1 -0
- data/lib/slack/web/api/endpoints/apps.rb +27 -0
- data/lib/slack/web/api/endpoints/apps_permissions.rb +1 -0
- data/lib/slack/web/api/endpoints/apps_permissions_resources.rb +1 -0
- data/lib/slack/web/api/endpoints/apps_permissions_scopes.rb +1 -0
- data/lib/slack/web/api/endpoints/apps_permissions_users.rb +1 -0
- data/lib/slack/web/api/endpoints/auth.rb +1 -0
- data/lib/slack/web/api/endpoints/bots.rb +1 -0
- data/lib/slack/web/api/endpoints/channels.rb +3 -0
- data/lib/slack/web/api/endpoints/chat.rb +99 -12
- data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +38 -0
- data/lib/slack/web/api/endpoints/conversations.rb +4 -1
- data/lib/slack/web/api/endpoints/dialog.rb +1 -0
- data/lib/slack/web/api/endpoints/dnd.rb +3 -1
- data/lib/slack/web/api/endpoints/emoji.rb +1 -0
- data/lib/slack/web/api/endpoints/files.rb +4 -13
- data/lib/slack/web/api/endpoints/files_comments.rb +1 -33
- data/lib/slack/web/api/endpoints/files_remote.rb +127 -0
- data/lib/slack/web/api/endpoints/groups.rb +1 -0
- data/lib/slack/web/api/endpoints/im.rb +1 -0
- data/lib/slack/web/api/endpoints/migration.rb +1 -0
- data/lib/slack/web/api/endpoints/mpim.rb +1 -0
- data/lib/slack/web/api/endpoints/oauth.rb +2 -1
- data/lib/slack/web/api/endpoints/oauth_v2.rb +30 -0
- data/lib/slack/web/api/endpoints/pins.rb +2 -4
- data/lib/slack/web/api/endpoints/reactions.rb +5 -6
- data/lib/slack/web/api/endpoints/reminders.rb +1 -0
- data/lib/slack/web/api/endpoints/rtm.rb +1 -0
- data/lib/slack/web/api/endpoints/search.rb +1 -0
- data/lib/slack/web/api/endpoints/stars.rb +1 -0
- data/lib/slack/web/api/endpoints/team.rb +3 -0
- data/lib/slack/web/api/endpoints/team_profile.rb +1 -0
- data/lib/slack/web/api/endpoints/usergroups.rb +1 -0
- data/lib/slack/web/api/endpoints/usergroups_users.rb +1 -0
- data/lib/slack/web/api/endpoints/users.rb +1 -2
- data/lib/slack/web/api/endpoints/users_admin.rb +1 -0
- data/lib/slack/web/api/endpoints/users_prefs.rb +1 -0
- data/lib/slack/web/api/endpoints/users_profile.rb +1 -0
- data/lib/slack/web/api/endpoints/views.rb +97 -0
- data/lib/slack/web/api/error.rb +1 -0
- data/lib/slack/web/api/errors.rb +566 -0
- data/lib/slack/web/api/errors/slack_error.rb +14 -1
- data/lib/slack/web/api/errors/too_many_requests_error.rb +1 -0
- data/lib/slack/web/api/mixins.rb +1 -0
- data/lib/slack/web/api/mixins/channels.id.rb +1 -0
- data/lib/slack/web/api/mixins/groups.id.rb +1 -0
- data/lib/slack/web/api/mixins/ids.id.rb +4 -1
- data/lib/slack/web/api/mixins/users.id.rb +1 -0
- data/lib/slack/web/api/mixins/users.search.rb +1 -0
- data/lib/slack/web/api/patches/chat.5.postEphemeral-text-or-attachments.patch +5 -3
- data/lib/slack/web/api/patches/chat.6.block-kit-support.patch +69 -0
- data/lib/slack/web/api/patches/views.1.view-json.patch +40 -0
- data/lib/slack/web/api/patches/views.1.views-published.patch +16 -0
- data/lib/slack/web/api/templates/command.erb +1 -0
- data/lib/slack/web/api/templates/commands.erb +1 -0
- 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 +1 -0
- data/lib/slack/web/api/templates/method_spec.erb +1 -0
- data/lib/slack/web/client.rb +2 -1
- data/lib/slack/web/config.rb +1 -0
- data/lib/slack/web/faraday/connection.rb +1 -0
- data/lib/slack/web/faraday/request.rb +1 -0
- data/lib/slack/web/faraday/response/raise_error.rb +10 -6
- data/lib/slack/web/pagination/cursor.rb +4 -0
- data/lib/slack_ruby_client.rb +1 -0
- data/lib/tasks/git.rake +1 -0
- data/lib/tasks/real_time.rake +15 -5
- data/lib/tasks/update.rake +1 -0
- data/lib/tasks/web.rake +28 -7
- data/screenshots/create-app.png +0 -0
- data/slack-ruby-client.gemspec +6 -2
- data/spec/fixtures/slack/web/views_open_error.yml +76 -0
- data/spec/integration/integration_spec.rb +116 -48
- data/spec/slack/config_spec.rb +2 -0
- data/spec/slack/events/config_spec.rb +33 -0
- data/spec/slack/events/request_spec.rb +179 -0
- data/spec/slack/messages/formatting_spec.rb +25 -13
- data/spec/slack/real_time/api/message_spec.rb +6 -1
- data/spec/slack/real_time/api/ping_spec.rb +2 -0
- data/spec/slack/real_time/api/typing_spec.rb +5 -1
- data/spec/slack/real_time/client_spec.rb +212 -31
- data/spec/slack/real_time/concurrency/celluloid_spec.rb +15 -5
- data/spec/slack/real_time/concurrency/eventmachine_spec.rb +11 -1
- data/spec/slack/real_time/concurrency/it_behaves_like_a_realtime_socket.rb +2 -0
- data/spec/slack/real_time/event_handlers/bot_spec.rb +2 -1
- data/spec/slack/real_time/event_handlers/channel_spec.rb +9 -6
- data/spec/slack/real_time/event_handlers/event_handlers_spec.rb +2 -1
- data/spec/slack/real_time/event_handlers/group_spec.rb +5 -4
- data/spec/slack/real_time/event_handlers/im_spec.rb +4 -3
- data/spec/slack/real_time/event_handlers/team_spec.rb +3 -1
- data/spec/slack/real_time/event_handlers/user_spec.rb +1 -0
- data/spec/slack/real_time/rtm_connect_spec.rb +1 -0
- data/spec/slack/real_time/rtm_start_spec.rb +1 -0
- data/spec/slack/real_time/store_spec.rb +2 -1
- data/spec/slack/slack_spec.rb +37 -5
- data/spec/slack/version_spec.rb +2 -1
- data/spec/slack/web/api/endpoints/admin_apps_approved_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_apps_requests_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 +8 -0
- data/spec/slack/web/api/endpoints/admin_conversations_spec.rb +13 -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_users_session_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/admin_users_spec.rb +75 -0
- data/spec/slack/web/api/endpoints/api_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/apps_permissions_resources_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/apps_permissions_scopes_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/apps_permissions_spec.rb +3 -2
- data/spec/slack/web/api/endpoints/apps_permissions_users_spec.rb +4 -3
- data/spec/slack/web/api/endpoints/apps_spec.rb +16 -0
- data/spec/slack/web/api/endpoints/bots_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/chat_scheduledMessages_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/conversations_spec.rb +2 -1
- data/spec/slack/web/api/endpoints/custom_specs/auth_spec.rb +5 -1
- data/spec/slack/web/api/endpoints/custom_specs/channels_spec.rb +2 -0
- data/spec/slack/web/api/endpoints/custom_specs/chat_spec.rb +112 -36
- data/spec/slack/web/api/endpoints/custom_specs/dialog_spec.rb +12 -4
- data/spec/slack/web/api/endpoints/custom_specs/groups_spec.rb +2 -0
- data/spec/slack/web/api/endpoints/custom_specs/users_spec.rb +6 -1
- data/spec/slack/web/api/endpoints/custom_specs/views_spec.rb +95 -0
- data/spec/slack/web/api/endpoints/dnd_spec.rb +6 -0
- data/spec/slack/web/api/endpoints/emoji_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/files_comments_spec.rb +1 -19
- data/spec/slack/web/api/endpoints/files_remote_spec.rb +24 -0
- data/spec/slack/web/api/endpoints/files_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/im_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/migration_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/mpim_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/oauth_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/oauth_v2_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/pins_spec.rb +5 -1
- data/spec/slack/web/api/endpoints/reactions_spec.rb +8 -1
- data/spec/slack/web/api/endpoints/reminders_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/rtm_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/search_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/stars_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/team_profile_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/team_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/usergroups_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/usergroups_users_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/users_admin_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/users_prefs_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/users_profile_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/views_spec.rb +29 -0
- data/spec/slack/web/api/error_spec.rb +4 -2
- data/spec/slack/web/api/errors/service_unavailable_spec.rb +6 -3
- data/spec/slack/web/api/errors/slack_error_spec.rb +26 -2
- data/spec/slack/web/api/mixins/channels_spec.rb +17 -7
- data/spec/slack/web/api/mixins/groups_spec.rb +17 -7
- data/spec/slack/web/api/mixins/users_spec.rb +17 -8
- data/spec/slack/web/api/pagination/cursor_spec.rb +40 -10
- data/spec/slack/web/client_spec.rb +45 -18
- data/spec/slack/web/faraday/response/raise_error_spec.rb +41 -7
- data/spec/spec_helper.rb +8 -1
- data/spec/support/queue_with_timeout.rb +5 -4
- data/spec/support/real_time/concurrency/mock.rb +1 -0
- data/spec/support/real_time/connected_client.rb +9 -3
- data/spec/support/real_time/event.rb +1 -0
- data/spec/support/token.rb +1 -0
- data/spec/support/vcr.rb +1 -0
- metadata +149 -9
- data/screenshots/register-bot.png +0 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Slack
|
|
2
3
|
module Web
|
|
3
4
|
module Api
|
|
@@ -6,8 +7,20 @@ module Slack
|
|
|
6
7
|
attr_reader :response
|
|
7
8
|
|
|
8
9
|
def initialize(message, response = nil)
|
|
9
|
-
@response = response
|
|
10
10
|
super message
|
|
11
|
+
@response = response
|
|
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
|
|
11
24
|
end
|
|
12
25
|
end
|
|
13
26
|
end
|
data/lib/slack/web/api/mixins.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Slack
|
|
2
3
|
module Web
|
|
3
4
|
module Api
|
|
@@ -10,7 +11,9 @@ module Slack
|
|
|
10
11
|
|
|
11
12
|
yield.tap do |list|
|
|
12
13
|
list.public_send(list_method).each do |li|
|
|
13
|
-
|
|
14
|
+
if li.name == name[1..-1]
|
|
15
|
+
return Slack::Messages::Message.new('ok' => true, key.to_s => { 'id' => li.id })
|
|
16
|
+
end
|
|
14
17
|
end
|
|
15
18
|
end
|
|
16
19
|
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
diff --git a/
|
|
2
|
-
index
|
|
1
|
+
diff --git a/lib/slack/web/api/endpoints/chat.rb b/lib/slack/web/api/endpoints/chat.rb
|
|
2
|
+
index e1c409d..3b24fea 100644
|
|
3
3
|
--- a/lib/slack/web/api/endpoints/chat.rb
|
|
4
4
|
+++ b/lib/slack/web/api/endpoints/chat.rb
|
|
5
|
-
@@ -
|
|
5
|
+
@@ -120,9 +120,8 @@ 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
11
|
- throw ArgumentError.new('Required arguments :text missing') if options[:text].nil?
|
|
10
12
|
+ throw ArgumentError.new('Required arguments :text or :attachments missing') if options[:text].nil? && options[:attachments].nil?
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
diff --git a/lib/slack/web/api/endpoints/chat.rb b/lib/slack/web/api/endpoints/chat.rb
|
|
2
|
+
index 54a7db1..c535bb5 100644
|
|
3
|
+
--- a/lib/slack/web/api/endpoints/chat.rb
|
|
4
|
+
+++ b/lib/slack/web/api/endpoints/chat.rb
|
|
5
|
+
@@ -97,7 +97,7 @@ module Slack
|
|
6
|
+
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.postEphemeral.json
|
|
7
|
+
def chat_postEphemeral(options = {})
|
|
8
|
+
throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
|
|
9
|
+
- throw ArgumentError.new('Required arguments :text or :attachments missing') if options[:text].nil? && options[:attachments].nil?
|
|
10
|
+
+ throw ArgumentError.new('Required arguments :text, :attachments or :blocks missing') if options[:text].nil? && options[:attachments].nil? && options[:blocks].nil?
|
|
11
|
+
throw ArgumentError.new('Required arguments :user missing') if options[:user].nil?
|
|
12
|
+
options = options.merge(user: users_id(options)['user']['id']) if options[:user]
|
|
13
|
+
# attachments must be passed as an encoded JSON string
|
|
14
|
+
@@ -106,6 +106,12 @@ module Slack
|
|
15
|
+
attachments = JSON.dump(attachments) unless attachments.is_a?(String)
|
|
16
|
+
options = options.merge(attachments: attachments)
|
|
17
|
+
end
|
|
18
|
+
+ # blocks must be passed as an encoded JSON string
|
|
19
|
+
+ if options.key?(:blocks)
|
|
20
|
+
+ blocks = options[:blocks]
|
|
21
|
+
+ blocks = JSON.dump(blocks) unless blocks.is_a?(String)
|
|
22
|
+
+ options = options.merge(blocks: blocks)
|
|
23
|
+
+ end
|
|
24
|
+
post('chat.postEphemeral', options)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
@@ -146,13 +152,19 @@ module Slack
|
|
28
|
+
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.postMessage.json
|
|
29
|
+
def chat_postMessage(options = {})
|
|
30
|
+
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
|
+
+ throw ArgumentError.new('Required arguments :text, :attachments or :blocks missing') if options[:text].nil? && options[:attachments].nil? && options[:blocks].nil?
|
|
33
|
+
# attachments must be passed as an encoded JSON string
|
|
34
|
+
if options.key?(:attachments)
|
|
35
|
+
attachments = options[:attachments]
|
|
36
|
+
attachments = JSON.dump(attachments) unless attachments.is_a?(String)
|
|
37
|
+
options = options.merge(attachments: attachments)
|
|
38
|
+
end
|
|
39
|
+
+ # blocks must be passed as an encoded JSON string
|
|
40
|
+
+ if options.key?(:blocks)
|
|
41
|
+
+ blocks = options[:blocks]
|
|
42
|
+
+ blocks = JSON.dump(blocks) unless blocks.is_a?(String)
|
|
43
|
+
+ options = options.merge(blocks: blocks)
|
|
44
|
+
+ end
|
|
45
|
+
post('chat.postMessage', options)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
@@ -204,7 +216,7 @@ module Slack
|
|
49
|
+
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.update.json
|
|
50
|
+
def chat_update(options = {})
|
|
51
|
+
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
|
+
+ throw ArgumentError.new('Required arguments :text, :attachments or :blocks missing') if options[:text].nil? && options[:attachments].nil? && options[:blocks].nil?
|
|
54
|
+
throw ArgumentError.new('Required arguments :ts missing') if options[:ts].nil?
|
|
55
|
+
options = options.merge(channel: channels_id(options)['channel']['id']) if options[:channel]
|
|
56
|
+
# attachments must be passed as an encoded JSON string
|
|
57
|
+
@@ -213,6 +225,12 @@ module Slack
|
|
58
|
+
attachments = JSON.dump(attachments) unless attachments.is_a?(String)
|
|
59
|
+
options = options.merge(attachments: attachments)
|
|
60
|
+
end
|
|
61
|
+
+ # blocks must be passed as an encoded JSON string
|
|
62
|
+
+ if options.key?(:blocks)
|
|
63
|
+
+ blocks = options[:blocks]
|
|
64
|
+
+ blocks = JSON.dump(blocks) unless blocks.is_a?(String)
|
|
65
|
+
+ options = options.merge(blocks: blocks)
|
|
66
|
+
+ end
|
|
67
|
+
post('chat.update', options)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
diff --git a/lib/slack/web/api/endpoints/views.rb b/lib/slack/web/api/endpoints/views.rb
|
|
2
|
+
index 3d7ac8e..10de15c 100644
|
|
3
|
+
--- a/lib/slack/web/api/endpoints/views.rb
|
|
4
|
+
+++ b/lib/slack/web/api/endpoints/views.rb
|
|
5
|
+
@@ -18,6 +18,11 @@ module Slack
|
|
6
|
+
def views_open(options = {})
|
|
7
|
+
throw ArgumentError.new('Required arguments :trigger_id missing') if options[:trigger_id].nil?
|
|
8
|
+
throw ArgumentError.new('Required arguments :view missing') if options[:view].nil?
|
|
9
|
+
+ if options.key?(:view)
|
|
10
|
+
+ view = options[:view]
|
|
11
|
+
+ view = JSON.dump(view) unless view.is_a?(String)
|
|
12
|
+
+ options = options.merge(view: view)
|
|
13
|
+
+ end
|
|
14
|
+
post('views.open', options)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
@@ -33,6 +38,11 @@ module Slack
|
|
18
|
+
def views_push(options = {})
|
|
19
|
+
throw ArgumentError.new('Required arguments :trigger_id missing') if options[:trigger_id].nil?
|
|
20
|
+
throw ArgumentError.new('Required arguments :view missing') if options[:view].nil?
|
|
21
|
+
+ if options.key?(:view)
|
|
22
|
+
+ view = options[:view]
|
|
23
|
+
+ view = JSON.dump(view) unless view.is_a?(String)
|
|
24
|
+
+ options = options.merge(view: view)
|
|
25
|
+
+ end
|
|
26
|
+
post('views.push', options)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
@@ -51,6 +61,11 @@ module Slack
|
|
30
|
+
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/views/views.update.json
|
|
31
|
+
def views_update(options = {})
|
|
32
|
+
throw ArgumentError.new('Required arguments :view missing') if options[:view].nil?
|
|
33
|
+
+ if options.key?(:view)
|
|
34
|
+
+ view = options[:view]
|
|
35
|
+
+ view = JSON.dump(view) unless view.is_a?(String)
|
|
36
|
+
+ options = options.merge(view: view)
|
|
37
|
+
+ end
|
|
38
|
+
post('views.update', options)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
diff --git a/lib/slack/web/api/endpoints/views.rb b/lib/slack/web/api/endpoints/views.rb
|
|
2
|
+
index 31626b9..8182a9c 100644
|
|
3
|
+
--- a/lib/slack/web/api/endpoints/views.rb
|
|
4
|
+
+++ b/lib/slack/web/api/endpoints/views.rb
|
|
5
|
+
@@ -40,6 +40,11 @@ module Slack
|
|
6
|
+
def views_publish(options = {})
|
|
7
|
+
throw ArgumentError.new('Required arguments :user_id missing') if options[:user_id].nil?
|
|
8
|
+
throw ArgumentError.new('Required arguments :view missing') if options[:view].nil?
|
|
9
|
+
+ if options.key?(:view)
|
|
10
|
+
+ view = options[:view]
|
|
11
|
+
+ view = JSON.dump(view) unless view.is_a?(String)
|
|
12
|
+
+ options = options.merge(view: view)
|
|
13
|
+
+ end
|
|
14
|
+
post('views.publish', options)
|
|
15
|
+
end
|
|
16
|
+
|
|
@@ -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
|
data/lib/slack/web/client.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Slack
|
|
2
3
|
module Web
|
|
3
4
|
class Client
|
|
@@ -9,7 +10,7 @@ module Slack
|
|
|
9
10
|
|
|
10
11
|
def initialize(options = {})
|
|
11
12
|
Slack::Web::Config::ATTRIBUTES.each do |key|
|
|
12
|
-
send("#{key}=", options
|
|
13
|
+
send("#{key}=", options.fetch(key, Slack::Web.config.send(key)))
|
|
13
14
|
end
|
|
14
15
|
@logger ||= Slack::Config.logger || Slack::Logger.default
|
|
15
16
|
@token ||= Slack.config.token
|
data/lib/slack/web/config.rb
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Slack
|
|
2
3
|
module Web
|
|
3
4
|
module Faraday
|
|
4
5
|
module Response
|
|
5
6
|
class RaiseError < ::Faraday::Response::Middleware
|
|
6
7
|
def on_complete(env)
|
|
7
|
-
if env.status == 429
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
raise Slack::Web::Api::Errors::TooManyRequestsError, env.response if env.status == 429
|
|
9
|
+
return unless (body = env.body) && !body['ok']
|
|
10
|
+
|
|
11
|
+
error_message =
|
|
12
|
+
body['error'] || body['errors'].map { |message| message['error'] }.join(',')
|
|
13
|
+
|
|
14
|
+
error_class = Slack::Web::Api::Errors::ERROR_CLASSES[error_message]
|
|
15
|
+
error_class ||= Slack::Web::Api::Errors::SlackError
|
|
16
|
+
raise error_class.new(error_message, env.response)
|
|
13
17
|
end
|
|
14
18
|
end
|
|
15
19
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Slack
|
|
2
3
|
module Web
|
|
3
4
|
module Api
|
|
@@ -28,6 +29,7 @@ module Slack
|
|
|
28
29
|
response = client.send(verb, query)
|
|
29
30
|
rescue Slack::Web::Api::Errors::TooManyRequestsError => e
|
|
30
31
|
raise e if retry_count >= max_retries
|
|
32
|
+
|
|
31
33
|
client.logger.debug("#{self.class}##{__method__}") { e.to_s }
|
|
32
34
|
retry_count += 1
|
|
33
35
|
sleep(e.retry_after.seconds)
|
|
@@ -35,8 +37,10 @@ module Slack
|
|
|
35
37
|
end
|
|
36
38
|
yield response
|
|
37
39
|
break unless response.response_metadata
|
|
40
|
+
|
|
38
41
|
next_cursor = response.response_metadata.next_cursor
|
|
39
42
|
break if next_cursor.blank?
|
|
43
|
+
|
|
40
44
|
retry_count = 0
|
|
41
45
|
sleep(sleep_interval) if sleep_interval
|
|
42
46
|
end
|
data/lib/slack_ruby_client.rb
CHANGED
data/lib/tasks/git.rake
CHANGED
data/lib/tasks/real_time.rake
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# largely from https://github.com/aki017/slack-ruby-gem
|
|
2
3
|
require 'json-schema'
|
|
3
4
|
require 'erubis'
|
|
@@ -5,22 +6,26 @@ require 'erubis'
|
|
|
5
6
|
namespace :slack do
|
|
6
7
|
namespace :real_time do
|
|
7
8
|
namespace :api do
|
|
8
|
-
REAL_TIME_EVENTS_MARKER = '### RealTime Events'
|
|
9
|
+
REAL_TIME_EVENTS_MARKER = '### RealTime Events'
|
|
9
10
|
|
|
10
|
-
desc 'Update API.'
|
|
11
|
+
desc 'Update Real Time API.'
|
|
11
12
|
task update: [:git_update] do
|
|
12
13
|
event_schema = JSON.parse(File.read('lib/slack/real_time/api/schema/event.json'))
|
|
13
|
-
|
|
14
|
+
dirglob = 'lib/slack/web/api/slack-api-ref/events/**/*.json'
|
|
15
|
+
events = Dir.glob(dirglob).each_with_object({}) do |path, result|
|
|
14
16
|
name = File.basename(path, '.json')
|
|
15
17
|
parsed = JSON.parse(File.read(path))
|
|
16
18
|
JSON::Validator.validate(event_schema, parsed, insert_defaults: true)
|
|
17
19
|
next if %w[message hello].include?(name)
|
|
20
|
+
|
|
18
21
|
result[name] = parsed
|
|
19
22
|
end
|
|
20
23
|
|
|
21
|
-
event_handler_template =
|
|
24
|
+
event_handler_template =
|
|
25
|
+
Erubis::Eruby.new(File.read('lib/slack/real_time/api/templates/event_handler.erb'))
|
|
22
26
|
Dir.glob('lib/slack/real_time/stores/**/*.rb').each do |store_file|
|
|
23
27
|
next if File.basename(store_file) == 'base.rb'
|
|
28
|
+
|
|
24
29
|
STDOUT.write "#{File.basename(store_file)}:"
|
|
25
30
|
|
|
26
31
|
store_file_contents = File.read(store_file)
|
|
@@ -35,7 +40,12 @@ namespace :slack do
|
|
|
35
40
|
desc: event_data['desc']
|
|
36
41
|
)
|
|
37
42
|
|
|
38
|
-
store_file_contents.gsub!
|
|
43
|
+
store_file_contents.gsub!(
|
|
44
|
+
REAL_TIME_EVENTS_MARKER,
|
|
45
|
+
REAL_TIME_EVENTS_MARKER +
|
|
46
|
+
"\n\n" +
|
|
47
|
+
rendered_event_handler.rstrip
|
|
48
|
+
)
|
|
39
49
|
end
|
|
40
50
|
end
|
|
41
51
|
|
data/lib/tasks/update.rake
CHANGED
data/lib/tasks/web.rake
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# largely from https://github.com/aki017/slack-ruby-gem
|
|
2
3
|
require 'json-schema'
|
|
3
4
|
require 'erubis'
|
|
@@ -7,10 +8,11 @@ require 'active_support/core_ext'
|
|
|
7
8
|
namespace :slack do
|
|
8
9
|
namespace :web do
|
|
9
10
|
namespace :api do
|
|
10
|
-
desc 'Update API.'
|
|
11
|
+
desc 'Update Web API.'
|
|
11
12
|
task update: [:git_update] do
|
|
12
13
|
group_schema = JSON.parse(File.read('lib/slack/web/api/schema/group.json'))
|
|
13
|
-
|
|
14
|
+
dirglob = 'lib/slack/web/api/slack-api-ref/groups/**/*.json'
|
|
15
|
+
groups = Dir.glob(dirglob).each_with_object({}) do |path, result|
|
|
14
16
|
name = File.basename(path, '.json')
|
|
15
17
|
parsed = JSON.parse(File.read(path))
|
|
16
18
|
parsed['undocumented'] = true if path =~ /undocumented/
|
|
@@ -34,7 +36,8 @@ namespace :slack do
|
|
|
34
36
|
end
|
|
35
37
|
|
|
36
38
|
method_template = Erubis::Eruby.new(File.read('lib/slack/web/api/templates/method.erb'))
|
|
37
|
-
method_spec_template =
|
|
39
|
+
method_spec_template =
|
|
40
|
+
Erubis::Eruby.new(File.read('lib/slack/web/api/templates/method_spec.erb'))
|
|
38
41
|
command_template = Erubis::Eruby.new(File.read('lib/slack/web/api/templates/command.erb'))
|
|
39
42
|
data.each_with_index do |(group, names), index|
|
|
40
43
|
printf "%2d/%2d %10s %s\n", index, data.size, group, names.keys
|
|
@@ -42,7 +45,8 @@ namespace :slack do
|
|
|
42
45
|
snaked_group = group.tr('.', '_')
|
|
43
46
|
rendered_method = method_template.result(group: group, names: names)
|
|
44
47
|
File.write "lib/slack/web/api/endpoints/#{snaked_group}.rb", rendered_method
|
|
45
|
-
custom_spec_exists =
|
|
48
|
+
custom_spec_exists =
|
|
49
|
+
File.exist?("spec/slack/web/api/endpoints/custom_specs/#{group}_spec.rb")
|
|
46
50
|
unless custom_spec_exists
|
|
47
51
|
rendered_method_spec = method_spec_template.result(group: group, names: names)
|
|
48
52
|
File.write "spec/slack/web/api/endpoints/#{snaked_group}_spec.rb", rendered_method_spec
|
|
@@ -53,15 +57,32 @@ namespace :slack do
|
|
|
53
57
|
end
|
|
54
58
|
# command
|
|
55
59
|
raise "Missing group #{group}" unless groups.key?(group)
|
|
60
|
+
|
|
56
61
|
rendered_command = command_template.result(group: groups[group], names: names)
|
|
57
62
|
File.write "bin/commands/#{snaked_group}.rb", rendered_command
|
|
58
63
|
end
|
|
59
64
|
|
|
60
|
-
endpoints_template =
|
|
61
|
-
|
|
65
|
+
endpoints_template =
|
|
66
|
+
Erubis::Eruby.new(File.read('lib/slack/web/api/templates/endpoints.erb'))
|
|
67
|
+
File.write(
|
|
68
|
+
'lib/slack/web/api/endpoints.rb',
|
|
69
|
+
endpoints_template.result(files: data.keys.map { |key| key.tr('.', '_') })
|
|
70
|
+
)
|
|
62
71
|
|
|
63
72
|
commands_template = Erubis::Eruby.new(File.read('lib/slack/web/api/templates/commands.erb'))
|
|
64
|
-
File.write
|
|
73
|
+
File.write(
|
|
74
|
+
'bin/commands.rb',
|
|
75
|
+
commands_template.result(files: data.keys.map { |key| key.tr('.', '_') })
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
errors_template = Erubis::Eruby.new(File.read('lib/slack/web/api/templates/errors.erb'))
|
|
79
|
+
errors = data.values.map do |names|
|
|
80
|
+
names.values.map do |d|
|
|
81
|
+
d['errors'].keys
|
|
82
|
+
end
|
|
83
|
+
end.flatten.compact.uniq.sort
|
|
84
|
+
rendered_errors = errors_template.result(errors: errors)
|
|
85
|
+
File.write('lib/slack/web/api/errors.rb', rendered_errors)
|
|
65
86
|
end
|
|
66
87
|
end
|
|
67
88
|
end
|