slack-ruby-client 0.7.9 → 0.16.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 +5 -5
- data/.github/FUNDING.yml +1 -0
- data/.gitignore +2 -0
- data/.rubocop.yml +32 -1
- data/.rubocop_todo.yml +98 -49
- data/.travis.yml +10 -14
- data/CHANGELOG.md +172 -24
- data/CONTRIBUTING.md +17 -6
- data/Dangerfile +2 -0
- data/Gemfile +10 -4
- data/LICENSE.md +1 -1
- data/README.md +276 -54
- data/RELEASING.md +19 -11
- data/Rakefile +2 -1
- data/UPGRADING.md +84 -2
- data/bin/commands.rb +43 -1
- data/bin/commands/admin_analytics.rb +15 -0
- data/bin/commands/admin_apps.rb +40 -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_barriers.rb +47 -0
- data/bin/commands/admin_conversations.rb +169 -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 +38 -0
- data/bin/commands/api.rb +3 -3
- data/bin/commands/apps.rb +15 -0
- data/bin/commands/apps_connections.rb +13 -0
- data/bin/commands/apps_event_authorizations.rb +16 -0
- data/bin/commands/apps_permissions.rb +23 -0
- data/bin/commands/apps_permissions_resources.rb +15 -0
- data/bin/commands/apps_permissions_scopes.rb +13 -0
- data/bin/commands/apps_permissions_users.rb +26 -0
- data/bin/commands/auth.rb +5 -4
- data/bin/commands/auth_teams.rb +16 -0
- data/bin/commands/bots.rb +4 -2
- data/bin/commands/calls.rb +52 -0
- data/bin/commands/calls_participants.rb +25 -0
- data/bin/commands/channels.rb +64 -43
- data/bin/commands/chat.rb +114 -24
- data/bin/commands/chat_scheduledMessages.rb +19 -0
- data/bin/commands/conversations.rb +196 -0
- data/bin/commands/dialog.rb +15 -0
- data/bin/commands/dnd.rb +9 -8
- data/bin/commands/emoji.rb +3 -2
- data/bin/commands/files.rb +45 -30
- data/bin/commands/files_comments.rb +3 -24
- data/bin/commands/files_remote.rb +78 -0
- data/bin/commands/groups.rb +53 -53
- data/bin/commands/im.rb +17 -13
- data/bin/commands/migration.rb +16 -0
- data/bin/commands/mpim.rb +16 -13
- data/bin/commands/oauth.rb +17 -2
- data/bin/commands/oauth_v2.rb +17 -0
- data/bin/commands/pins.rb +7 -10
- data/bin/commands/reactions.rb +17 -15
- data/bin/commands/reminders.rb +11 -10
- data/bin/commands/rtm.rb +19 -4
- data/bin/commands/search.rb +15 -11
- data/bin/commands/stars.rb +11 -8
- data/bin/commands/team.rb +15 -10
- data/bin/commands/team_profile.rb +3 -2
- data/bin/commands/usergroups.rb +22 -16
- data/bin/commands/usergroups_users.rb +7 -4
- data/bin/commands/users.rb +65 -37
- data/bin/commands/users_admin.rb +29 -0
- data/bin/commands/users_prefs.rb +13 -0
- data/bin/commands/users_profile.rb +8 -7
- data/bin/commands/views.rb +48 -0
- data/bin/commands/workflows.rb +38 -0
- data/bin/slack +3 -4
- data/examples/hi_real_time_and_web/Gemfile +1 -0
- data/examples/hi_real_time_and_web/hi.rb +8 -4
- data/examples/{hi_real_time_async_eventmachine → hi_real_time_async_async}/Gemfile +2 -1
- data/examples/{hi_real_time_async_celluloid → hi_real_time_async_async}/Procfile +0 -0
- data/examples/{hi_real_time_async_celluloid → hi_real_time_async_async}/hi.rb +13 -8
- data/examples/hi_web/Gemfile +1 -0
- data/examples/hi_web/hi.rb +2 -1
- data/examples/new_ticket/Gemfile +1 -0
- data/examples/new_ticket/new_ticket.rb +2 -1
- data/lib/slack-ruby-client.rb +40 -26
- 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 +70 -0
- data/lib/slack/logger.rb +6 -5
- data/lib/slack/messages/formatting.rb +4 -4
- data/lib/slack/messages/message.rb +2 -6
- 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/templates/event_handler.erb +1 -1
- data/lib/slack/real_time/api/typing.rb +3 -1
- data/lib/slack/real_time/client.rb +113 -32
- data/lib/slack/real_time/concurrency.rb +2 -2
- data/lib/slack/real_time/concurrency/async.rb +140 -0
- data/lib/slack/real_time/config.rb +20 -12
- data/lib/slack/real_time/models.rb +8 -7
- data/lib/slack/real_time/models/base.rb +2 -6
- 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 +46 -17
- data/lib/slack/real_time/stores.rb +4 -3
- data/lib/slack/real_time/stores/base.rb +5 -3
- data/lib/slack/real_time/stores/starter.rb +113 -72
- data/lib/slack/real_time/stores/store.rb +131 -88
- data/lib/slack/version.rb +2 -1
- data/lib/slack/web/api/endpoints.rb +110 -26
- data/lib/slack/web/api/endpoints/admin_analytics.rb +26 -0
- data/lib/slack/web/api/endpoints/admin_apps.rb +62 -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_barriers.rb +82 -0
- data/lib/slack/web/api/endpoints/admin_conversations.rb +260 -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 +66 -0
- data/lib/slack/web/api/endpoints/api.rb +3 -4
- data/lib/slack/web/api/endpoints/apps.rb +27 -0
- 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/apps_permissions.rb +36 -0
- data/lib/slack/web/api/endpoints/apps_permissions_resources.rb +31 -0
- data/lib/slack/web/api/endpoints/apps_permissions_scopes.rb +21 -0
- data/lib/slack/web/api/endpoints/apps_permissions_users.rb +50 -0
- data/lib/slack/web/api/endpoints/auth.rb +5 -4
- data/lib/slack/web/api/endpoints/auth_teams.rb +33 -0
- data/lib/slack/web/api/endpoints/bots.rb +5 -2
- 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 +105 -49
- data/lib/slack/web/api/endpoints/chat.rb +221 -40
- data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +40 -0
- data/lib/slack/web/api/endpoints/conversations.rb +332 -0
- data/lib/slack/web/api/endpoints/dialog.rb +33 -0
- data/lib/slack/web/api/endpoints/dnd.rb +11 -9
- data/lib/slack/web/api/endpoints/emoji.rb +3 -2
- data/lib/slack/web/api/endpoints/files.rb +75 -38
- data/lib/slack/web/api/endpoints/files_comments.rb +3 -38
- data/lib/slack/web/api/endpoints/files_remote.rb +127 -0
- data/lib/slack/web/api/endpoints/groups.rb +76 -53
- data/lib/slack/web/api/endpoints/im.rb +38 -21
- data/lib/slack/web/api/endpoints/migration.rb +28 -0
- data/lib/slack/web/api/endpoints/mpim.rb +37 -22
- data/lib/slack/web/api/endpoints/oauth.rb +25 -4
- data/lib/slack/web/api/endpoints/oauth_v2.rb +30 -0
- data/lib/slack/web/api/endpoints/pins.rb +10 -19
- data/lib/slack/web/api/endpoints/presence.rb +1 -1
- data/lib/slack/web/api/endpoints/reactions.rb +37 -28
- data/lib/slack/web/api/endpoints/reminders.rb +11 -10
- data/lib/slack/web/api/endpoints/rtm.rb +28 -7
- data/lib/slack/web/api/endpoints/search.rb +21 -14
- data/lib/slack/web/api/endpoints/stars.rb +24 -15
- data/lib/slack/web/api/endpoints/team.rb +21 -13
- data/lib/slack/web/api/endpoints/team_profile.rb +3 -2
- data/lib/slack/web/api/endpoints/usergroups.rb +33 -22
- data/lib/slack/web/api/endpoints/usergroups_users.rb +9 -4
- data/lib/slack/web/api/endpoints/users.rb +78 -29
- data/lib/slack/web/api/endpoints/users_admin.rb +49 -0
- data/lib/slack/web/api/endpoints/users_prefs.rb +21 -0
- data/lib/slack/web/api/endpoints/users_profile.rb +11 -10
- data/lib/slack/web/api/endpoints/views.rb +97 -0
- data/lib/slack/web/api/endpoints/workflows.rb +61 -0
- data/lib/slack/web/api/error.rb +2 -8
- data/lib/slack/web/api/errors.rb +850 -0
- data/lib/slack/web/api/errors/internal_error.rb +14 -0
- data/lib/slack/web/api/errors/slack_error.rb +29 -0
- data/lib/slack/web/api/errors/too_many_requests_error.rb +24 -0
- data/lib/slack/web/api/mixins.rb +6 -4
- data/lib/slack/web/api/mixins/channels.id.rb +6 -7
- data/lib/slack/web/api/mixins/conversations.id.rb +25 -0
- data/lib/slack/web/api/mixins/groups.id.rb +6 -7
- data/lib/slack/web/api/mixins/ids.id.rb +24 -0
- data/lib/slack/web/api/mixins/users.id.rb +6 -7
- data/lib/slack/web/api/mixins/users.search.rb +39 -36
- data/lib/slack/web/api/patches/chat.1.patch +72 -0
- data/lib/slack/web/api/patches/dialog.1.open-json-support.patch +17 -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 +5 -3
- data/lib/slack/web/api/templates/commands.erb +2 -1
- data/lib/slack/web/api/templates/endpoints.erb +5 -3
- data/lib/slack/web/api/templates/errors.erb +20 -0
- data/lib/slack/web/api/templates/method.erb +26 -4
- data/lib/slack/web/api/templates/method_spec.erb +3 -2
- data/lib/slack/web/client.rb +2 -1
- data/lib/slack/web/config.rb +21 -10
- data/lib/slack/web/faraday/connection.rb +25 -16
- data/lib/slack/web/faraday/request.rb +2 -0
- data/lib/slack/web/faraday/response/raise_error.rb +23 -1
- data/lib/slack/web/faraday/response/wrap_error.rb +18 -0
- data/lib/slack/web/pagination/cursor.rb +52 -0
- data/lib/slack_ruby_client.rb +1 -0
- data/lib/tasks/git.rake +2 -1
- data/lib/tasks/real_time.rake +16 -6
- data/lib/tasks/update.rake +1 -0
- data/lib/tasks/web.rake +38 -10
- data/screenshots/create-app.png +0 -0
- data/slack-ruby-client.gemspec +9 -6
- data/spec/fixtures/slack/web/429_error.yml +2 -0
- data/spec/fixtures/slack/web/503_error.yml +14 -0
- data/spec/fixtures/slack/web/channels_info.yml +108 -15
- 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/paginated_users_list.yml +181 -0
- data/spec/fixtures/slack/web/rtm_connect.yml +70 -0
- data/spec/fixtures/slack/web/rtm_start.yml +1 -1
- 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 +183 -0
- data/spec/slack/messages/formatting_spec.rb +25 -14
- 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 +462 -134
- data/spec/slack/real_time/concurrency/it_behaves_like_a_realtime_socket.rb +3 -1
- data/spec/slack/real_time/event_handlers/bot_spec.rb +6 -3
- data/spec/slack/real_time/event_handlers/channel_spec.rb +9 -6
- data/spec/slack/real_time/event_handlers/event_handlers_spec.rb +3 -2
- 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 +8 -4
- data/spec/slack/real_time/event_handlers/user_spec.rb +5 -2
- data/spec/slack/real_time/rtm_connect_spec.rb +14 -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 +39 -7
- data/spec/slack/version_spec.rb +2 -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_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 +13 -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 +98 -0
- data/spec/slack/web/api/endpoints/admin_conversations_whitelist_spec.rb +32 -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 +21 -0
- data/spec/slack/web/api/endpoints/admin_users_spec.rb +67 -0
- data/spec/slack/web/api/endpoints/api_spec.rb +1 -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_resources_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/apps_permissions_scopes_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/apps_permissions_spec.rb +16 -0
- data/spec/slack/web/api/endpoints/apps_permissions_users_spec.rb +19 -0
- data/spec/slack/web/api/endpoints/apps_spec.rb +16 -0
- data/spec/slack/web/api/endpoints/auth_teams_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/bots_spec.rb +1 -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/chat_scheduledMessages_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/conversations_spec.rb +109 -0
- data/spec/slack/web/api/endpoints/custom_specs/auth_spec.rb +13 -4
- data/spec/slack/web/api/endpoints/custom_specs/channels_spec.rb +5 -3
- data/spec/slack/web/api/endpoints/custom_specs/chat_spec.rb +140 -24
- data/spec/slack/web/api/endpoints/custom_specs/dialog_spec.rb +36 -0
- data/spec/slack/web/api/endpoints/custom_specs/groups_spec.rb +2 -0
- data/spec/slack/web/api/endpoints/custom_specs/users_spec.rb +21 -6
- 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 +3 -21
- data/spec/slack/web/api/endpoints/files_remote_spec.rb +24 -0
- data/spec/slack/web/api/endpoints/files_spec.rb +17 -5
- data/spec/slack/web/api/endpoints/im_spec.rb +5 -4
- data/spec/slack/web/api/endpoints/migration_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/mpim_spec.rb +5 -4
- data/spec/slack/web/api/endpoints/oauth_spec.rb +5 -4
- data/spec/slack/web/api/endpoints/oauth_v2_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/pins_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/reactions_spec.rb +8 -1
- data/spec/slack/web/api/endpoints/reminders_spec.rb +3 -2
- 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 +3 -2
- data/spec/slack/web/api/endpoints/users_admin_spec.rb +18 -0
- data/spec/slack/web/api/endpoints/users_prefs_spec.rb +8 -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/endpoints/workflows_spec.rb +26 -0
- data/spec/slack/web/api/error_spec.rb +5 -3
- data/spec/slack/web/api/errors/slack_error_spec.rb +38 -0
- data/spec/slack/web/api/mixins/channels_spec.rb +24 -12
- 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 +24 -12
- data/spec/slack/web/api/mixins/users_spec.rb +30 -17
- data/spec/slack/web/api/pagination/cursor_spec.rb +100 -0
- data/spec/slack/web/client_spec.rb +215 -14
- data/spec/slack/web/faraday/response/raise_error_spec.rb +85 -0
- data/spec/spec_helper.rb +8 -1
- data/spec/support/queue_with_timeout.rb +6 -5
- data/spec/support/real_time/concurrency/mock.rb +2 -2
- data/spec/support/real_time/connected_client.rb +13 -2
- data/spec/support/real_time/event.rb +1 -0
- data/spec/support/token.rb +1 -0
- data/spec/support/vcr.rb +6 -1
- metadata +280 -55
- data/examples/hi_real_time/Gemfile +0 -5
- data/examples/hi_real_time/hi.gif +0 -0
- data/examples/hi_real_time/hi.rb +0 -37
- data/examples/hi_real_time_async_celluloid/Gemfile +0 -6
- data/examples/hi_real_time_async_eventmachine/Procfile +0 -2
- data/examples/hi_real_time_async_eventmachine/hi.rb +0 -36
- data/lib/slack/real_time/concurrency/celluloid.rb +0 -113
- data/lib/slack/real_time/concurrency/eventmachine.rb +0 -60
- 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 -20
- data/screenshots/register-bot.png +0 -0
- data/spec/slack/real_time/concurrency/celluloid_spec.rb +0 -31
- data/spec/slack/real_time/concurrency/eventmachine_spec.rb +0 -47
|
@@ -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
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module Slack
|
|
3
|
+
module Web
|
|
4
|
+
module Api
|
|
5
|
+
module Errors
|
|
6
|
+
class SlackError < ::Faraday::Error
|
|
7
|
+
attr_reader :response
|
|
8
|
+
|
|
9
|
+
def initialize(message, response = nil)
|
|
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
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module Slack
|
|
3
|
+
module Web
|
|
4
|
+
module Api
|
|
5
|
+
module Errors
|
|
6
|
+
class TooManyRequestsError < ::Faraday::Error
|
|
7
|
+
attr_reader :response
|
|
8
|
+
|
|
9
|
+
def initialize(response)
|
|
10
|
+
@response = response
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def message
|
|
14
|
+
"Retry after #{retry_after} seconds"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def retry_after
|
|
18
|
+
response.headers['retry-after'].to_i
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
data/lib/slack/web/api/mixins.rb
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require_relative 'mixins/channels.id'
|
|
3
|
+
require_relative 'mixins/conversations.id'
|
|
4
|
+
require_relative 'mixins/users.id'
|
|
5
|
+
require_relative 'mixins/users.search'
|
|
6
|
+
require_relative 'mixins/groups.id'
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require_relative 'ids.id'
|
|
3
|
+
|
|
1
4
|
module Slack
|
|
2
5
|
module Web
|
|
3
6
|
module Api
|
|
4
7
|
module Mixins
|
|
5
8
|
module Channels
|
|
9
|
+
include Ids
|
|
6
10
|
#
|
|
7
11
|
# This method returns a channel ID given a channel name.
|
|
8
12
|
#
|
|
@@ -11,13 +15,8 @@ module Slack
|
|
|
11
15
|
def channels_id(options = {})
|
|
12
16
|
name = options[:channel]
|
|
13
17
|
throw ArgumentError.new('Required arguments :channel missing') if name.nil?
|
|
14
|
-
|
|
15
|
-
channels_list
|
|
16
|
-
list.channels.each do |channel|
|
|
17
|
-
return Slack::Messages::Message.new('ok' => true, 'channel' => { 'id' => channel.id }) if channel.name == name[1..-1]
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
fail Slack::Web::Api::Error, 'channel_not_found'
|
|
18
|
+
|
|
19
|
+
id_for :channel, name, '#', :channels_list, :channels, 'channel_not_found'
|
|
21
20
|
end
|
|
22
21
|
end
|
|
23
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
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require_relative 'ids.id'
|
|
3
|
+
|
|
1
4
|
module Slack
|
|
2
5
|
module Web
|
|
3
6
|
module Api
|
|
4
7
|
module Mixins
|
|
5
8
|
module Groups
|
|
9
|
+
include Ids
|
|
6
10
|
#
|
|
7
11
|
# This method returns a group ID given a group name.
|
|
8
12
|
#
|
|
@@ -11,13 +15,8 @@ module Slack
|
|
|
11
15
|
def groups_id(options = {})
|
|
12
16
|
name = options[:channel]
|
|
13
17
|
throw ArgumentError.new('Required arguments :channel missing') if name.nil?
|
|
14
|
-
|
|
15
|
-
groups_list
|
|
16
|
-
list.groups.each do |group|
|
|
17
|
-
return Slack::Messages::Message.new('ok' => true, 'group' => { 'id' => group.id }) if group.name == name[1..-1]
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
fail Slack::Web::Api::Error, 'channel_not_found'
|
|
18
|
+
|
|
19
|
+
id_for :group, name, '#', :groups_list, :groups, 'channel_not_found'
|
|
21
20
|
end
|
|
22
21
|
end
|
|
23
22
|
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
module Slack
|
|
3
|
+
module Web
|
|
4
|
+
module Api
|
|
5
|
+
module Mixins
|
|
6
|
+
module Ids
|
|
7
|
+
private
|
|
8
|
+
|
|
9
|
+
def id_for(key, name, prefix, enum_method, list_method, not_found_error)
|
|
10
|
+
return { 'ok' => true, key.to_s => { 'id' => name } } unless name[0] == prefix
|
|
11
|
+
|
|
12
|
+
public_send enum_method do |list|
|
|
13
|
+
list.public_send(list_method).each do |li|
|
|
14
|
+
return Slack::Messages::Message.new('ok' => true, key.to_s => { 'id' => li.id }) if li.name == name[1..-1]
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
raise Slack::Web::Api::Errors::SlackError, not_found_error
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require_relative 'ids.id'
|
|
3
|
+
|
|
1
4
|
module Slack
|
|
2
5
|
module Web
|
|
3
6
|
module Api
|
|
4
7
|
module Mixins
|
|
5
8
|
module Users
|
|
9
|
+
include Ids
|
|
6
10
|
#
|
|
7
11
|
# This method returns a user ID given a user name.
|
|
8
12
|
#
|
|
@@ -11,13 +15,8 @@ module Slack
|
|
|
11
15
|
def users_id(options = {})
|
|
12
16
|
name = options[:user]
|
|
13
17
|
throw ArgumentError.new('Required arguments :user missing') if name.nil?
|
|
14
|
-
|
|
15
|
-
users_list
|
|
16
|
-
list.members.each do |user|
|
|
17
|
-
return Slack::Messages::Message.new('ok' => true, 'user' => { 'id' => user.id }) if user.name == name[1..-1]
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
fail Slack::Web::Api::Error, 'user_not_found'
|
|
18
|
+
|
|
19
|
+
id_for :user, name, '@', :users_list, :members, 'user_not_found'
|
|
21
20
|
end
|
|
22
21
|
end
|
|
23
22
|
end
|
|
@@ -1,43 +1,46 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
if defined?(Picky)
|
|
3
|
+
module Slack
|
|
4
|
+
module Web
|
|
5
|
+
module Api
|
|
6
|
+
module Mixins
|
|
7
|
+
module Users
|
|
8
|
+
Member = Struct.new :id, :name, :first_name, :last_name, :real_name, :email
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
10
|
+
#
|
|
11
|
+
# This method searches for users.
|
|
12
|
+
#
|
|
13
|
+
# @option options [user] :user
|
|
14
|
+
# Free-formed text to search for.
|
|
15
|
+
def users_search(options = {})
|
|
16
|
+
query = options[:user]
|
|
17
|
+
throw ArgumentError.new('Required arguments :user missing') if query.nil?
|
|
18
|
+
index = Picky::Index.new(:users) do
|
|
19
|
+
category :name
|
|
20
|
+
category :first_name
|
|
21
|
+
category :last_name
|
|
22
|
+
category :real_name
|
|
23
|
+
category :email
|
|
24
|
+
end
|
|
25
|
+
members = users_list.members
|
|
26
|
+
members.each_with_index do |member, id|
|
|
27
|
+
user = Member.new(
|
|
28
|
+
id,
|
|
29
|
+
member.name,
|
|
30
|
+
member.profile.first_name,
|
|
31
|
+
member.profile.last_name,
|
|
32
|
+
member.profile.real_name,
|
|
33
|
+
member.profile.email
|
|
34
|
+
)
|
|
35
|
+
index.add(user)
|
|
36
|
+
end
|
|
37
|
+
ids = Picky::Search.new(index).search(query, 5, 0, unique: true).ids
|
|
38
|
+
results = ids.map { |id| members[id] }
|
|
39
|
+
Slack::Messages::Message.new('ok' => true, 'members' => results)
|
|
22
40
|
end
|
|
23
|
-
members = users_list.members
|
|
24
|
-
members.each_with_index do |member, id|
|
|
25
|
-
user = Member.new(
|
|
26
|
-
id,
|
|
27
|
-
member.name,
|
|
28
|
-
member.profile.first_name,
|
|
29
|
-
member.profile.last_name,
|
|
30
|
-
member.profile.real_name,
|
|
31
|
-
member.profile.email
|
|
32
|
-
)
|
|
33
|
-
index.add(user)
|
|
34
|
-
end
|
|
35
|
-
ids = Picky::Search.new(index).search(query, 5, 0, unique: true).ids
|
|
36
|
-
results = ids.map { |id| members[id] }
|
|
37
|
-
Slack::Messages::Message.new('ok' => true, 'members' => results)
|
|
38
41
|
end
|
|
39
42
|
end
|
|
40
43
|
end
|
|
41
44
|
end
|
|
42
45
|
end
|
|
43
|
-
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
diff --git a/lib/slack/web/api/endpoints/chat.rb b/lib/slack/web/api/endpoints/chat.rb
|
|
2
|
+
index 9de4aa9..8ed5625 100644
|
|
3
|
+
--- a/lib/slack/web/api/endpoints/chat.rb
|
|
4
|
+
+++ b/lib/slack/web/api/endpoints/chat.rb
|
|
5
|
+
@@ -121,11 +121,22 @@ module Slack
|
|
6
|
+
# @see https://api.slack.com/methods/chat.postEphemeral
|
|
7
|
+
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.postEphemeral.json
|
|
8
|
+
def chat_postEphemeral(options = {})
|
|
9
|
+
- throw ArgumentError.new('Required arguments :attachments missing') if options[:attachments].nil?
|
|
10
|
+
throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
|
|
11
|
+
- throw ArgumentError.new('Required arguments :text missing') if options[:text].nil?
|
|
12
|
+
+ throw ArgumentError.new('Required arguments :text, :attachments or :blocks missing') if options[:text].nil? && options[:attachments].nil? && options[:blocks].nil?
|
|
13
|
+
throw ArgumentError.new('Required arguments :user missing') if options[:user].nil?
|
|
14
|
+
options = options.merge(user: users_id(options)['user']['id']) if options[:user]
|
|
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
|
|
21
|
+
+ # blocks must be passed as an encoded JSON string
|
|
22
|
+
+ if options.key?(:blocks)
|
|
23
|
+
+ blocks = options[:blocks]
|
|
24
|
+
+ blocks = JSON.dump(blocks) unless blocks.is_a?(String)
|
|
25
|
+
+ options = options.merge(blocks: blocks)
|
|
26
|
+
+ end
|
|
27
|
+
post('chat.postEphemeral', options)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
@@ -166,7 +177,19 @@ module Slack
|
|
31
|
+
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.postMessage.json
|
|
32
|
+
def chat_postMessage(options = {})
|
|
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
|
+
+ throw ArgumentError.new('Required arguments :text, :attachments or :blocks missing') if options[:text].nil? && options[:attachments].nil? && options[:blocks].nil?
|
|
36
|
+
+ # attachments must be passed as an encoded JSON string
|
|
37
|
+
+ if options.key?(:attachments)
|
|
38
|
+
+ attachments = options[:attachments]
|
|
39
|
+
+ attachments = JSON.dump(attachments) unless attachments.is_a?(String)
|
|
40
|
+
+ options = options.merge(attachments: attachments)
|
|
41
|
+
+ end
|
|
42
|
+
+ # blocks must be passed as an encoded JSON string
|
|
43
|
+
+ if options.key?(:blocks)
|
|
44
|
+
+ blocks = options[:blocks]
|
|
45
|
+
+ blocks = JSON.dump(blocks) unless blocks.is_a?(String)
|
|
46
|
+
+ options = options.merge(blocks: blocks)
|
|
47
|
+
+ end
|
|
48
|
+
post('chat.postMessage', options)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
@@ -254,8 +277,21 @@ module Slack
|
|
52
|
+
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.update.json
|
|
53
|
+
def chat_update(options = {})
|
|
54
|
+
throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
|
|
55
|
+
+ throw ArgumentError.new('Required arguments :text, :attachments or :blocks missing') if options[:text].nil? && options[:attachments].nil? && options[:blocks].nil?
|
|
56
|
+
throw ArgumentError.new('Required arguments :ts missing') if options[:ts].nil?
|
|
57
|
+
options = options.merge(channel: conversations_id(options)['channel']['id']) if options[:channel]
|
|
58
|
+
+ # attachments must be passed as an encoded JSON string
|
|
59
|
+
+ if options.key?(:attachments)
|
|
60
|
+
+ attachments = options[:attachments]
|
|
61
|
+
+ attachments = JSON.dump(attachments) unless attachments.is_a?(String)
|
|
62
|
+
+ options = options.merge(attachments: attachments)
|
|
63
|
+
+ end
|
|
64
|
+
+ # blocks must be passed as an encoded JSON string
|
|
65
|
+
+ if options.key?(:blocks)
|
|
66
|
+
+ blocks = options[:blocks]
|
|
67
|
+
+ blocks = JSON.dump(blocks) unless blocks.is_a?(String)
|
|
68
|
+
+ options = options.merge(blocks: blocks)
|
|
69
|
+
+ end
|
|
70
|
+
post('chat.update', options)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
diff --git a/lib/slack/web/api/endpoints/dialog.rb b/lib/slack/web/api/endpoints/dialog.rb
|
|
2
|
+
index 01f9dfd..d017adf 100644
|
|
3
|
+
--- a/lib/slack/web/api/endpoints/dialog.rb
|
|
4
|
+
+++ b/lib/slack/web/api/endpoints/dialog.rb
|
|
5
|
+
@@ -17,6 +17,12 @@ module Slack
|
|
6
|
+
def dialog_open(options = {})
|
|
7
|
+
throw ArgumentError.new('Required arguments :dialog missing') if options[:dialog].nil?
|
|
8
|
+
throw ArgumentError.new('Required arguments :trigger_id missing') if options[:trigger_id].nil?
|
|
9
|
+
+ # dialog must be passed as an encoded JSON string
|
|
10
|
+
+ if options.key?(:dialog)
|
|
11
|
+
+ dialog = options[:dialog]
|
|
12
|
+
+ dialog = JSON.dump(dialog) unless dialog.is_a?(String)
|
|
13
|
+
+ options = options.merge(dialog: dialog)
|
|
14
|
+
+ end
|
|
15
|
+
post('dialog.open', options)
|
|
16
|
+
end
|
|
17
|
+
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
|
+
|