slack-ruby-client 0.15.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (264) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +6 -1
  3. data/.rubocop_todo.yml +75 -43
  4. data/.travis.yml +2 -4
  5. data/CHANGELOG.md +32 -0
  6. data/CONTRIBUTING.md +6 -13
  7. data/LICENSE.md +1 -1
  8. data/README.md +19 -36
  9. data/RELEASING.md +1 -1
  10. data/UPGRADING.md +56 -2
  11. data/bin/commands/admin_analytics.rb +16 -0
  12. data/bin/commands/admin_apps.rb +26 -2
  13. data/bin/commands/admin_apps_requests.rb +1 -0
  14. data/bin/commands/admin_auth_policy.rb +39 -0
  15. data/bin/commands/admin_barriers.rb +47 -0
  16. data/bin/commands/admin_conversations.rb +154 -2
  17. data/bin/commands/admin_conversations_ekm.rb +17 -0
  18. data/bin/commands/admin_conversations_restrictAccess.rb +3 -3
  19. data/bin/commands/admin_conversations_whitelist.rb +1 -1
  20. data/bin/commands/admin_emoji.rb +1 -1
  21. data/bin/commands/admin_teams.rb +1 -1
  22. data/bin/commands/admin_usergroups.rb +2 -2
  23. data/bin/commands/admin_users.rb +3 -2
  24. data/bin/commands/admin_users_session.rb +62 -0
  25. data/bin/commands/api.rb +0 -1
  26. data/bin/commands/apps_connections.rb +13 -0
  27. data/bin/commands/apps_event_authorizations.rb +16 -0
  28. data/bin/commands/apps_manifest.rb +51 -0
  29. data/bin/commands/auth_teams.rb +16 -0
  30. data/bin/commands/bots.rb +1 -0
  31. data/bin/commands/channels.rb +1 -155
  32. data/bin/commands/chat.rb +12 -7
  33. data/bin/commands/chat_scheduledMessages.rb +1 -0
  34. data/bin/commands/conversations.rb +71 -2
  35. data/bin/commands/dnd.rb +2 -0
  36. data/bin/commands/files.rb +6 -4
  37. data/bin/commands/files_remote.rb +2 -2
  38. data/bin/commands/groups.rb +1 -162
  39. data/bin/commands/im.rb +1 -63
  40. data/bin/commands/migration.rb +1 -0
  41. data/bin/commands/mpim.rb +1 -61
  42. data/bin/commands/oauth.rb +0 -13
  43. data/bin/commands/oauth_v2.rb +13 -1
  44. data/bin/commands/openid_connect.rb +27 -0
  45. data/bin/commands/pins.rb +2 -4
  46. data/bin/commands/reactions.rb +1 -0
  47. data/bin/commands/reminders.rb +6 -0
  48. data/bin/commands/rtm.rb +2 -2
  49. data/bin/commands/search.rb +4 -0
  50. data/bin/commands/stars.rb +7 -6
  51. data/bin/commands/team.rb +3 -0
  52. data/bin/commands/team_billing.rb +13 -0
  53. data/bin/commands/team_preferences.rb +13 -0
  54. data/bin/commands/tooling_tokens.rb +14 -0
  55. data/bin/commands/usergroups.rb +5 -0
  56. data/bin/commands/usergroups_users.rb +2 -0
  57. data/bin/commands/users.rb +4 -2
  58. data/bin/commands/users_profile.rb +5 -5
  59. data/bin/commands/views.rb +2 -2
  60. data/bin/commands/workflows.rb +38 -0
  61. data/bin/commands.rb +13 -9
  62. data/lib/slack/config.rb +1 -2
  63. data/lib/slack/events/request.rb +10 -4
  64. data/lib/slack/real_time/client.rb +6 -6
  65. data/lib/slack/real_time/concurrency/async.rb +6 -8
  66. data/lib/slack/real_time/concurrency.rb +0 -2
  67. data/lib/slack/real_time/config.rb +5 -14
  68. data/lib/slack/real_time/socket.rb +1 -2
  69. data/lib/slack/real_time/stores/base.rb +1 -6
  70. data/lib/slack/real_time/stores/starter.rb +6 -3
  71. data/lib/slack/real_time/stores/store.rb +5 -0
  72. data/lib/slack/version.rb +1 -1
  73. data/lib/slack/web/api/endpoints/admin_analytics.rb +28 -0
  74. data/lib/slack/web/api/endpoints/admin_apps.rb +42 -6
  75. data/lib/slack/web/api/endpoints/admin_apps_approved.rb +2 -2
  76. data/lib/slack/web/api/endpoints/admin_apps_requests.rb +4 -2
  77. data/lib/slack/web/api/endpoints/admin_apps_restricted.rb +2 -2
  78. data/lib/slack/web/api/endpoints/admin_auth_policy.rb +72 -0
  79. data/lib/slack/web/api/endpoints/admin_barriers.rb +82 -0
  80. data/lib/slack/web/api/endpoints/admin_conversations.rb +233 -3
  81. data/lib/slack/web/api/endpoints/admin_conversations_ekm.rb +35 -0
  82. data/lib/slack/web/api/endpoints/admin_conversations_restrictAccess.rb +3 -3
  83. data/lib/slack/web/api/endpoints/admin_conversations_whitelist.rb +3 -3
  84. data/lib/slack/web/api/endpoints/admin_emoji.rb +10 -10
  85. data/lib/slack/web/api/endpoints/admin_inviteRequests.rb +7 -7
  86. data/lib/slack/web/api/endpoints/admin_inviteRequests_approved.rb +3 -3
  87. data/lib/slack/web/api/endpoints/admin_inviteRequests_denied.rb +2 -2
  88. data/lib/slack/web/api/endpoints/admin_teams.rb +7 -7
  89. data/lib/slack/web/api/endpoints/admin_teams_admins.rb +2 -2
  90. data/lib/slack/web/api/endpoints/admin_teams_owners.rb +2 -2
  91. data/lib/slack/web/api/endpoints/admin_teams_settings.rb +5 -5
  92. data/lib/slack/web/api/endpoints/admin_usergroups.rb +11 -11
  93. data/lib/slack/web/api/endpoints/admin_users.rb +23 -23
  94. data/lib/slack/web/api/endpoints/admin_users_session.rb +97 -3
  95. data/lib/slack/web/api/endpoints/api.rb +1 -3
  96. data/lib/slack/web/api/endpoints/apps.rb +2 -2
  97. data/lib/slack/web/api/endpoints/apps_connections.rb +21 -0
  98. data/lib/slack/web/api/endpoints/apps_event_authorizations.rb +34 -0
  99. data/lib/slack/web/api/endpoints/apps_manifest.rb +75 -0
  100. data/lib/slack/web/api/endpoints/auth.rb +1 -1
  101. data/lib/slack/web/api/endpoints/auth_teams.rb +33 -0
  102. data/lib/slack/web/api/endpoints/bots.rb +3 -1
  103. data/lib/slack/web/api/endpoints/calls.rb +15 -15
  104. data/lib/slack/web/api/endpoints/calls_participants.rb +4 -4
  105. data/lib/slack/web/api/endpoints/channels.rb +0 -259
  106. data/lib/slack/web/api/endpoints/chat.rb +65 -55
  107. data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +4 -2
  108. data/lib/slack/web/api/endpoints/conversations.rb +134 -24
  109. data/lib/slack/web/api/endpoints/dialog.rb +2 -2
  110. data/lib/slack/web/api/endpoints/dnd.rb +6 -3
  111. data/lib/slack/web/api/endpoints/files.rb +19 -15
  112. data/lib/slack/web/api/endpoints/files_comments.rb +1 -1
  113. data/lib/slack/web/api/endpoints/files_remote.rb +22 -22
  114. data/lib/slack/web/api/endpoints/groups.rb +0 -269
  115. data/lib/slack/web/api/endpoints/im.rb +0 -107
  116. data/lib/slack/web/api/endpoints/migration.rb +4 -2
  117. data/lib/slack/web/api/endpoints/mpim.rb +0 -102
  118. data/lib/slack/web/api/endpoints/oauth.rb +5 -27
  119. data/lib/slack/web/api/endpoints/oauth_v2.rb +24 -6
  120. data/lib/slack/web/api/endpoints/openid_connect.rb +42 -0
  121. data/lib/slack/web/api/endpoints/pins.rb +4 -9
  122. data/lib/slack/web/api/endpoints/reactions.rb +13 -11
  123. data/lib/slack/web/api/endpoints/reminders.rb +17 -5
  124. data/lib/slack/web/api/endpoints/rtm.rb +10 -10
  125. data/lib/slack/web/api/endpoints/search.rb +27 -13
  126. data/lib/slack/web/api/endpoints/stars.rb +11 -9
  127. data/lib/slack/web/api/endpoints/team.rb +11 -5
  128. data/lib/slack/web/api/endpoints/team_billing.rb +21 -0
  129. data/lib/slack/web/api/endpoints/team_preferences.rb +21 -0
  130. data/lib/slack/web/api/endpoints/team_profile.rb +1 -1
  131. data/lib/slack/web/api/endpoints/tooling_tokens.rb +24 -0
  132. data/lib/slack/web/api/endpoints/usergroups.rb +26 -16
  133. data/lib/slack/web/api/endpoints/usergroups_users.rb +9 -5
  134. data/lib/slack/web/api/endpoints/users.rb +20 -18
  135. data/lib/slack/web/api/endpoints/users_profile.rb +7 -7
  136. data/lib/slack/web/api/endpoints/views.rb +13 -13
  137. data/lib/slack/web/api/endpoints/workflows.rb +61 -0
  138. data/lib/slack/web/api/endpoints.rb +26 -20
  139. data/lib/slack/web/api/errors/server_error.rb +37 -0
  140. data/lib/slack/web/api/errors/too_many_requests_error.rb +1 -4
  141. data/lib/slack/web/api/errors.rb +394 -10
  142. data/lib/slack/web/api/mixins/conversations.id.rb +1 -3
  143. data/lib/slack/web/api/mixins/ids.id.rb +2 -2
  144. data/lib/slack/web/api/mixins/users.id.rb +1 -3
  145. data/lib/slack/web/api/mixins.rb +0 -2
  146. data/lib/slack/web/api/patches/chat.1.patch +6 -8
  147. data/lib/slack/web/api/templates/endpoints.erb +1 -2
  148. data/lib/slack/web/api/templates/method_spec.erb +1 -1
  149. data/lib/slack/web/config.rb +2 -0
  150. data/lib/slack/web/faraday/connection.rb +2 -2
  151. data/lib/slack/web/faraday/request.rb +2 -1
  152. data/lib/slack/web/faraday/response/raise_error.rb +12 -1
  153. data/lib/slack/web/faraday/response/wrap_error.rb +24 -0
  154. data/lib/slack/web/pagination/cursor.rb +1 -5
  155. data/lib/slack-ruby-client.rb +2 -0
  156. data/lib/tasks/web.rake +11 -3
  157. data/slack-ruby-client.gemspec +2 -3
  158. data/spec/fixtures/slack/web/429_error.yml +50 -54
  159. data/spec/fixtures/slack/web/auth_test_error.yml +51 -18
  160. data/spec/fixtures/slack/web/auth_test_success.yml +50 -26
  161. data/spec/fixtures/slack/web/conversations_info.yml +167 -0
  162. data/spec/fixtures/slack/web/conversations_setTopic.yml +84 -0
  163. data/spec/fixtures/slack/web/conversations_setTopic_one_page.yml +172 -0
  164. data/spec/fixtures/slack/web/conversations_setTopic_paginated.yml +253 -0
  165. data/spec/fixtures/slack/web/paginated_users_list.yml +501 -69
  166. data/spec/fixtures/slack/web/rtm_connect.yml +267 -30
  167. data/spec/fixtures/slack/web/rtm_start.yml +771 -60
  168. data/spec/fixtures/slack/web/users_info.yml +153 -69
  169. data/spec/fixtures/slack/web/users_list.yml +102 -41
  170. data/spec/fixtures/slack/web/views_open_error.yml +49 -42
  171. data/spec/slack/events/request_spec.rb +13 -8
  172. data/spec/slack/real_time/client_spec.rb +35 -22
  173. data/spec/slack/real_time/concurrency/with_concurrency_spec.rb +10 -0
  174. data/spec/slack/real_time/concurrency/without_concurrency_spec.rb +10 -0
  175. data/spec/slack/real_time/event_handlers/bot_spec.rb +1 -1
  176. data/spec/slack/real_time/event_handlers/channel_spec.rb +1 -1
  177. data/spec/slack/real_time/event_handlers/im_spec.rb +5 -5
  178. data/spec/slack/real_time/event_handlers/user_spec.rb +2 -2
  179. data/spec/slack/real_time/rtm_connect_spec.rb +1 -1
  180. data/spec/slack/real_time/rtm_start_spec.rb +1 -1
  181. data/spec/slack/slack_spec.rb +3 -1
  182. data/spec/slack/web/api/endpoints/admin_analytics_spec.rb +13 -0
  183. data/spec/slack/web/api/endpoints/admin_apps_spec.rb +10 -0
  184. data/spec/slack/web/api/endpoints/admin_auth_policy_spec.rb +35 -0
  185. data/spec/slack/web/api/endpoints/admin_barriers_spec.rb +38 -0
  186. data/spec/slack/web/api/endpoints/{apps_permissions_scopes_spec.rb → admin_conversations_ekm_spec.rb} +1 -1
  187. data/spec/slack/web/api/endpoints/admin_conversations_restrictAccess_spec.rb +5 -5
  188. data/spec/slack/web/api/endpoints/admin_conversations_spec.rb +85 -0
  189. data/spec/slack/web/api/endpoints/admin_emoji_spec.rb +6 -6
  190. data/spec/slack/web/api/endpoints/admin_teams_settings_spec.rb +10 -10
  191. data/spec/slack/web/api/endpoints/admin_teams_spec.rb +2 -2
  192. data/spec/slack/web/api/endpoints/admin_usergroups_spec.rb +6 -6
  193. data/spec/slack/web/api/endpoints/admin_users_session_spec.rb +28 -0
  194. data/spec/slack/web/api/endpoints/admin_users_spec.rb +15 -23
  195. data/spec/slack/web/api/endpoints/{apps_permissions_resources_spec.rb → apps_connections_spec.rb} +1 -1
  196. data/spec/slack/web/api/endpoints/apps_event_authorizations_spec.rb +13 -0
  197. data/spec/slack/web/api/endpoints/apps_manifest_spec.rb +36 -0
  198. data/spec/slack/web/api/endpoints/apps_spec.rb +2 -2
  199. data/spec/slack/web/api/endpoints/auth_teams_spec.rb +8 -0
  200. data/spec/slack/web/api/endpoints/calls_participants_spec.rb +4 -4
  201. data/spec/slack/web/api/endpoints/calls_spec.rb +2 -2
  202. data/spec/slack/web/api/endpoints/custom_specs/auth_spec.rb +4 -6
  203. data/spec/slack/web/api/endpoints/custom_specs/conversations_spec.rb +13 -0
  204. data/spec/slack/web/api/endpoints/custom_specs/users_spec.rb +2 -2
  205. data/spec/slack/web/api/endpoints/dnd_spec.rb +0 -5
  206. data/spec/slack/web/api/endpoints/files_comments_spec.rb +2 -2
  207. data/spec/slack/web/api/endpoints/files_remote_spec.rb +3 -3
  208. data/spec/slack/web/api/endpoints/files_spec.rb +4 -4
  209. data/spec/slack/web/api/endpoints/oauth_spec.rb +0 -11
  210. data/spec/slack/web/api/endpoints/oauth_v2_spec.rb +6 -3
  211. data/spec/slack/web/api/endpoints/openid_connect_spec.rb +8 -0
  212. data/spec/slack/web/api/endpoints/pins_spec.rb +1 -4
  213. data/spec/slack/web/api/endpoints/reactions_spec.rb +3 -3
  214. data/spec/slack/web/api/endpoints/reminders_spec.rb +2 -2
  215. data/spec/slack/web/api/endpoints/team_billing_spec.rb +8 -0
  216. data/spec/slack/web/api/endpoints/team_preferences_spec.rb +8 -0
  217. data/spec/slack/web/api/endpoints/tooling_tokens_spec.rb +13 -0
  218. data/spec/slack/web/api/endpoints/usergroups_users_spec.rb +2 -2
  219. data/spec/slack/web/api/endpoints/workflows_spec.rb +26 -0
  220. data/spec/slack/web/api/error_spec.rb +5 -7
  221. data/spec/slack/web/api/errors/slack_error_spec.rb +21 -26
  222. data/spec/slack/web/api/mixins/conversations_list_spec.rb +21 -0
  223. data/spec/slack/web/api/mixins/conversations_spec.rb +11 -9
  224. data/spec/slack/web/api/mixins/users_spec.rb +1 -1
  225. data/spec/slack/web/api/pagination/cursor_spec.rb +1 -3
  226. data/spec/slack/web/client_spec.rb +112 -16
  227. data/spec/slack/web/faraday/request_spec.rb +80 -0
  228. data/spec/slack/web/faraday/response/raise_error_spec.rb +8 -6
  229. data/spec/spec_helper.rb +1 -1
  230. data/spec/support/real_time/connected_client.rb +1 -7
  231. data/spec/support/vcr.rb +36 -1
  232. metadata +58 -155
  233. data/examples/hi_real_time/Gemfile +0 -6
  234. data/examples/hi_real_time/hi.gif +0 -0
  235. data/examples/hi_real_time/hi.rb +0 -41
  236. data/examples/hi_real_time_async_celluloid/Gemfile +0 -7
  237. data/examples/hi_real_time_async_celluloid/Procfile +0 -2
  238. data/examples/hi_real_time_async_celluloid/hi.rb +0 -39
  239. data/examples/hi_real_time_async_eventmachine/Gemfile +0 -7
  240. data/examples/hi_real_time_async_eventmachine/Procfile +0 -2
  241. data/examples/hi_real_time_async_eventmachine/hi.rb +0 -39
  242. data/lib/slack/real_time/concurrency/celluloid.rb +0 -142
  243. data/lib/slack/real_time/concurrency/eventmachine.rb +0 -85
  244. data/lib/slack/web/api/mixins/channels.id.json +0 -20
  245. data/lib/slack/web/api/mixins/channels.id.rb +0 -27
  246. data/lib/slack/web/api/mixins/groups.id.json +0 -20
  247. data/lib/slack/web/api/mixins/groups.id.rb +0 -27
  248. data/spec/fixtures/slack/web/503_error.yml +0 -14
  249. data/spec/fixtures/slack/web/channels_info.yml +0 -139
  250. data/spec/fixtures/slack/web/groups_info.yml +0 -43
  251. data/spec/slack/real_time/concurrency/celluloid_spec.rb +0 -116
  252. data/spec/slack/real_time/concurrency/eventmachine_spec.rb +0 -57
  253. data/spec/slack/web/api/endpoints/admin_conversations_whitelist_spec.rb +0 -32
  254. data/spec/slack/web/api/endpoints/apps_permissions_spec.rb +0 -16
  255. data/spec/slack/web/api/endpoints/apps_permissions_users_spec.rb +0 -19
  256. data/spec/slack/web/api/endpoints/conversations_spec.rb +0 -101
  257. data/spec/slack/web/api/endpoints/custom_specs/channels_spec.rb +0 -13
  258. data/spec/slack/web/api/endpoints/custom_specs/groups_spec.rb +0 -13
  259. data/spec/slack/web/api/endpoints/im_spec.rb +0 -39
  260. data/spec/slack/web/api/endpoints/mpim_spec.rb +0 -39
  261. data/spec/slack/web/api/endpoints/views_spec.rb +0 -29
  262. data/spec/slack/web/api/errors/service_unavailable_spec.rb +0 -17
  263. data/spec/slack/web/api/mixins/channels_spec.rb +0 -43
  264. data/spec/slack/web/api/mixins/groups_spec.rb +0 -43
@@ -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(:channel, name, '#', :channels, 'channel_not_found') do
20
- conversations_list
21
- end
19
+ id_for :channel, name, '#', :conversations_list, :channels, 'channel_not_found'
22
20
  end
23
21
  end
24
22
  end
@@ -6,10 +6,10 @@ 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
- yield.tap do |list|
12
+ public_send enum_method do |list|
13
13
  list.public_send(list_method).each do |li|
14
14
  return Slack::Messages::Message.new('ok' => true, key.to_s => { 'id' => li.id }) if li.name == name[1..-1]
15
15
  end
@@ -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(:user, name, '@', :members, 'user_not_found') do
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,6 +1,4 @@
1
1
  # frozen_string_literal: true
2
- require_relative 'mixins/channels.id'
3
2
  require_relative 'mixins/conversations.id'
4
3
  require_relative 'mixins/users.id'
5
4
  require_relative 'mixins/users.search'
6
- require_relative 'mixins/groups.id'
@@ -1,12 +1,11 @@
1
1
  diff --git a/lib/slack/web/api/endpoints/chat.rb b/lib/slack/web/api/endpoints/chat.rb
2
- index 9de4aa9..8ed5625 100644
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
- @@ -121,11 +121,22 @@ module Slack
5
+ @@ -121,10 +121,22 @@ module Slack
6
6
  # @see https://api.slack.com/methods/chat.postEphemeral
7
7
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.postEphemeral.json
8
8
  def chat_postEphemeral(options = {})
9
- - throw ArgumentError.new('Required arguments :attachments missing') if options[:attachments].nil?
10
9
  throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
11
10
  - throw ArgumentError.new('Required arguments :text missing') if options[:text].nil?
12
11
  + throw ArgumentError.new('Required arguments :text, :attachments or :blocks missing') if options[:text].nil? && options[:attachments].nil? && options[:blocks].nil?
@@ -26,12 +25,11 @@ index 9de4aa9..8ed5625 100644
26
25
  + end
27
26
  post('chat.postEphemeral', options)
28
27
  end
29
-
30
- @@ -166,7 +177,19 @@ module Slack
28
+
29
+ @@ -168,6 +179,19 @@ module Slack
31
30
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.postMessage.json
32
31
  def chat_postMessage(options = {})
33
32
  throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
34
- - throw ArgumentError.new('Required arguments :text missing') if options[:text].nil?
35
33
  + throw ArgumentError.new('Required arguments :text, :attachments or :blocks missing') if options[:text].nil? && options[:attachments].nil? && options[:blocks].nil?
36
34
  + # attachments must be passed as an encoded JSON string
37
35
  + if options.key?(:attachments)
@@ -47,8 +45,8 @@ index 9de4aa9..8ed5625 100644
47
45
  + end
48
46
  post('chat.postMessage', options)
49
47
  end
50
-
51
- @@ -254,8 +277,21 @@ module Slack
48
+
49
+ @@ -257,8 +281,21 @@ module Slack
52
50
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.update.json
53
51
  def chat_update(options = {})
54
52
  throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
@@ -9,9 +9,8 @@ module Slack
9
9
  module Web
10
10
  module Api
11
11
  module Endpoints
12
- include Slack::Web::Api::Mixins::Channels
12
+ include Slack::Web::Api::Mixins::Conversations
13
13
  include Slack::Web::Api::Mixins::Users
14
- include Slack::Web::Api::Mixins::Groups
15
14
 
16
15
  <% files.sort.each do |f| %>
17
16
  include <%= f.camelize %>
@@ -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}: '#{opts['example']}'"}.join(', ') %>
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 %>
@@ -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
 
@@ -24,12 +24,12 @@ module Slack
24
24
  ::Faraday::Connection.new(endpoint, options) do |connection|
25
25
  connection.use ::Faraday::Request::Multipart
26
26
  connection.use ::Faraday::Request::UrlEncoded
27
- connection.use ::Faraday::Response::RaiseError
28
27
  connection.use ::Slack::Web::Faraday::Response::RaiseError
29
28
  connection.use ::FaradayMiddleware::Mashify, mash_class: Slack::Messages::Message
30
29
  connection.use ::FaradayMiddleware::ParseJson
30
+ connection.use ::Slack::Web::Faraday::Response::WrapError
31
31
  connection.response :logger, logger if logger
32
- connection.adapter ::Faraday.default_adapter
32
+ connection.adapter adapter
33
33
  end
34
34
  end
35
35
  end
@@ -22,15 +22,16 @@ module Slack
22
22
  private
23
23
 
24
24
  def request(method, path, options)
25
- options = options.merge(token: token)
26
25
  response = connection.send(method) do |request|
27
26
  case method
28
27
  when :get, :delete
29
28
  request.url(path, options)
30
29
  when :post, :put
31
30
  request.path = path
31
+ options.compact!
32
32
  request.body = options unless options.empty?
33
33
  end
34
+ request.headers['Authorization'] = "Bearer #{token}" if token
34
35
  request.options.merge!(options.delete(:request)) if options.key?(:request)
35
36
  end
36
37
  response.body
@@ -6,7 +6,12 @@ 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
- return unless (body = env.body) && !body['ok']
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(',')
@@ -15,6 +20,12 @@ module Slack
15
20
  error_class ||= Slack::Web::Api::Errors::SlackError
16
21
  raise error_class.new(error_message, env.response)
17
22
  end
23
+
24
+ def call(env)
25
+ super
26
+ rescue ::Faraday::ParsingError
27
+ raise Slack::Web::Api::Errors::ParsingError, env.response
28
+ end
18
29
  end
19
30
  end
20
31
  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, env.response
13
+ end
14
+
15
+ def call(env)
16
+ super
17
+ rescue ::Faraday::TimeoutError, ::Faraday::ConnectionFailed
18
+ raise Slack::Web::Api::Errors::TimeoutError, env.response
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -6,11 +6,7 @@ module Slack
6
6
  class Cursor
7
7
  include Enumerable
8
8
 
9
- attr_reader :client
10
- attr_reader :verb
11
- attr_reader :sleep_interval
12
- attr_reader :max_retries
13
- attr_reader :params
9
+ attr_reader :client, :verb, :sleep_interval, :max_retries, :params
14
10
 
15
11
  def initialize(client, verb, params = {})
16
12
  @client = client
@@ -28,7 +28,9 @@ require_relative 'slack/web/api/errors/slack_error'
28
28
  require_relative 'slack/web/api/errors/too_many_requests_error'
29
29
  require_relative 'slack/web/api/error'
30
30
  require_relative 'slack/web/api/errors'
31
+ require_relative 'slack/web/api/errors/server_error'
31
32
  require_relative 'slack/web/faraday/response/raise_error'
33
+ require_relative 'slack/web/faraday/response/wrap_error'
32
34
  require_relative 'slack/web/faraday/connection'
33
35
  require_relative 'slack/web/faraday/request'
34
36
  require_relative 'slack/web/api/mixins'
data/lib/tasks/web.rake CHANGED
@@ -32,6 +32,10 @@ namespace :slack do
32
32
  parsed = JSON.parse(File.read(path))
33
33
  parsed['undocumented'] = true if path =~ /undocumented/
34
34
  JSON::Validator.validate(method_schema, parsed, insert_defaults: true)
35
+ if parsed['deprecated'] && parsed['deprecation']['deprecation_warning'] =~ /It will stop functioning in February 2021/
36
+ next
37
+ end
38
+
35
39
  result[prefix][name] = parsed
36
40
  end
37
41
 
@@ -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
- Dir.glob("lib/slack/web/api/patches/#{group}*.patch").sort.each do |patch|
55
- puts "- patching #{patch}"
56
- system("git apply #{patch}") || raise('failed to apply patch')
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
 
@@ -12,7 +12,6 @@ Gem::Specification.new do |s|
12
12
  s.platform = Gem::Platform::RUBY
13
13
  s.required_rubygems_version = '>= 1.3.6'
14
14
  s.files = `git ls-files`.split("\n")
15
- s.test_files = `git ls-files -- spec/*`.split("\n")
16
15
  s.require_paths = ['lib']
17
16
  s.homepage = 'http://github.com/slack-ruby/slack-ruby-client'
18
17
  s.licenses = ['MIT']
@@ -25,9 +24,9 @@ Gem::Specification.new do |s|
25
24
  s.add_development_dependency 'activesupport'
26
25
  s.add_development_dependency 'erubis'
27
26
  s.add_development_dependency 'json-schema'
28
- s.add_development_dependency 'rake', '~> 10'
27
+ s.add_development_dependency 'rake', '~> 13'
29
28
  s.add_development_dependency 'rspec'
30
- s.add_development_dependency 'rubocop', '~> 0.82.0'
29
+ s.add_development_dependency 'rubocop', '~> 0.93.1'
31
30
  s.add_development_dependency 'rubocop-performance', '~> 1.5.2'
32
31
  s.add_development_dependency 'rubocop-rspec', '~> 1.39.0'
33
32
  s.add_development_dependency 'timecop'
@@ -5,47 +5,14 @@ http_interactions:
5
5
  uri: https://slack.com/api/auth.test
6
6
  body:
7
7
  encoding: UTF-8
8
- string: token=
9
- headers:
10
- Accept:
11
- - application/json; charset=utf-8
12
- User-Agent:
13
- - Slack Ruby Client 0.1.0
14
- Content-Type:
15
- - application/x-www-form-urlencoded
16
- Accept-Encoding:
17
- - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
- response:
19
- status:
20
- code: 429
21
- message: OK
22
- headers:
23
- Access-Control-Allow-Origin:
24
- - '*'
25
- Retry-After:
26
- - 3600
27
- Date:
28
- - Sat, 25 Jul 2015 14:42:07 GMT
29
- Server:
30
- - Apache
31
- Connection:
32
- - keep-alive
33
- body:
34
- encoding: US-ASCII
35
8
  string: ''
36
- http_version:
37
- recorded_at: Sat, 25 Jul 2015 14:42:08 GMT
38
- - request:
39
- method: post
40
- uri: https://slack.com/api/auth.test
41
- body:
42
- encoding: UTF-8
43
- string: token
44
9
  headers:
45
10
  Accept:
46
11
  - application/json; charset=utf-8
47
12
  User-Agent:
48
- - Slack Ruby Client/0.5.0
13
+ - Slack Ruby Client/0.18.0
14
+ Authorization:
15
+ - Bearer <SLACK_API_TOKEN>
49
16
  Content-Type:
50
17
  - application/x-www-form-urlencoded
51
18
  Accept-Encoding:
@@ -55,31 +22,60 @@ http_interactions:
55
22
  code: 200
56
23
  message: OK
57
24
  headers:
58
- Access-Control-Allow-Origin:
59
- - '*'
60
- Content-Security-Policy:
61
- - referrer no-referrer;
62
- Content-Type:
63
- - application/json; charset=utf-8
64
25
  Date:
65
- - Tue, 24 Nov 2015 20:03:05 GMT
26
+ - Sat, 04 Dec 2021 20:13:19 GMT
66
27
  Server:
67
28
  - Apache
29
+ Access-Control-Allow-Origin:
30
+ - "*"
31
+ Referrer-Policy:
32
+ - no-referrer
33
+ X-Slack-Backend:
34
+ - r
68
35
  Strict-Transport-Security:
69
36
  - max-age=31536000; includeSubDomains; preload
70
- X-Accepted-Oauth-Scopes:
71
- - identify
72
- X-Content-Type-Options:
73
- - nosniff
37
+ Access-Control-Allow-Headers:
38
+ - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid,
39
+ x-b3-sampled, x-b3-flags
40
+ Access-Control-Expose-Headers:
41
+ - x-slack-req-id, retry-after
42
+ X-Oauth-Scopes:
43
+ - identify,read,post,client,apps
44
+ Expires:
45
+ - Mon, 26 Jul 1997 05:00:00 GMT
46
+ Cache-Control:
47
+ - private, no-cache, no-store, must-revalidate
48
+ Pragma:
49
+ - no-cache
74
50
  X-Xss-Protection:
75
51
  - '0'
52
+ X-Content-Type-Options:
53
+ - nosniff
54
+ X-Slack-Req-Id:
55
+ - 19b143ea43a655dcdc6c3debd59c41c0
56
+ Vary:
57
+ - Accept-Encoding
76
58
  Content-Length:
77
- - '33'
78
- Connection:
79
- - keep-alive
59
+ - '165'
60
+ Content-Type:
61
+ - application/json; charset=utf-8
62
+ X-Envoy-Upstream-Service-Time:
63
+ - '18'
64
+ X-Backend:
65
+ - main_normal main_bedrock_normal_with_overflow main_canary_with_overflow main_bedrock_canary_with_overflow
66
+ main_control_with_overflow main_bedrock_control_with_overflow
67
+ X-Server:
68
+ - slack-www-hhvm-main-iad-d5j5
69
+ X-Slack-Shared-Secret-Outcome:
70
+ - no-match
71
+ Via:
72
+ - envoy-www-iad-tdcc, envoy-edge-iad-olsk
73
+ X-Edge-Backend:
74
+ - envoy-www
75
+ X-Slack-Edge-Shared-Secret-Outcome:
76
+ - no-match
80
77
  body:
81
78
  encoding: UTF-8
82
- string: '{"ok":false,"error":"not_authed"}'
83
- http_version:
84
- recorded_at: Tue, 24 Nov 2015 20:03:05 GMT
85
- recorded_with: VCR 2.9.3
79
+ string: '{"ok":true,"url":"https:\/\/dblockdotorg.slack.com\/","team":"dblock","user":"travis-ci","team_id":"T04KB5WQH","user_id":"U0J1GAHN1","bot_id":"B0J1L75DY","is_enterprise_install":false}'
80
+ recorded_at: Sat, 19 Jan 2019 21:25:48 GMT
81
+ recorded_with: VCR 6.0.0
@@ -5,14 +5,16 @@ http_interactions:
5
5
  uri: https://slack.com/api/auth.test
6
6
  body:
7
7
  encoding: UTF-8
8
- string: token=
8
+ string: ''
9
9
  headers:
10
10
  Accept:
11
11
  - application/json; charset=utf-8
12
12
  User-Agent:
13
- - Slack Ruby Client 0.1.0
14
- Content-Type:
15
- - application/x-www-form-urlencoded
13
+ - Slack Ruby Client/0.18.0
14
+ Authorization:
15
+ - Bearer <SLACK_API_TOKEN>
16
+ Content-Length:
17
+ - '0'
16
18
  Accept-Encoding:
17
19
  - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
18
20
  response:
@@ -20,29 +22,60 @@ http_interactions:
20
22
  code: 200
21
23
  message: OK
22
24
  headers:
23
- Access-Control-Allow-Origin:
24
- - "*"
25
- Content-Type:
26
- - application/json; charset=utf-8
27
25
  Date:
28
- - Sat, 25 Jul 2015 14:42:07 GMT
26
+ - Sat, 04 Dec 2021 20:13:18 GMT
29
27
  Server:
30
28
  - Apache
29
+ Access-Control-Allow-Origin:
30
+ - "*"
31
+ Referrer-Policy:
32
+ - no-referrer
33
+ X-Slack-Backend:
34
+ - r
31
35
  Strict-Transport-Security:
32
36
  - max-age=31536000; includeSubDomains; preload
33
- Vary:
34
- - Accept-Encoding
35
- X-Content-Type-Options:
36
- - nosniff
37
+ Access-Control-Allow-Headers:
38
+ - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid,
39
+ x-b3-sampled, x-b3-flags
40
+ Access-Control-Expose-Headers:
41
+ - x-slack-req-id, retry-after
42
+ Expires:
43
+ - Mon, 26 Jul 1997 05:00:00 GMT
44
+ Cache-Control:
45
+ - private, no-cache, no-store, must-revalidate
46
+ Pragma:
47
+ - no-cache
48
+ X-Robots-Tag:
49
+ - noindex,nofollow
37
50
  X-Xss-Protection:
38
51
  - '0'
52
+ X-Content-Type-Options:
53
+ - nosniff
54
+ X-Slack-Req-Id:
55
+ - ad5ac4ccd453f8d6e46e1cc41d6d8a7a
56
+ Vary:
57
+ - Accept-Encoding
39
58
  Content-Length:
40
59
  - '53'
41
- Connection:
42
- - keep-alive
60
+ Content-Type:
61
+ - application/json; charset=utf-8
62
+ X-Envoy-Upstream-Service-Time:
63
+ - '5'
64
+ X-Backend:
65
+ - main_normal main_bedrock_normal_with_overflow main_canary_with_overflow main_bedrock_canary_with_overflow
66
+ main_control_with_overflow main_bedrock_control_with_overflow
67
+ X-Server:
68
+ - slack-www-hhvm-main-iad-6qbu
69
+ X-Slack-Shared-Secret-Outcome:
70
+ - no-match
71
+ Via:
72
+ - envoy-www-iad-fsrl, envoy-edge-iad-m7rj
73
+ X-Edge-Backend:
74
+ - envoy-www
75
+ X-Slack-Edge-Shared-Secret-Outcome:
76
+ - no-match
43
77
  body:
44
78
  encoding: UTF-8
45
79
  string: '{"ok":false,"error":"not_authed"}'
46
- http_version:
47
- recorded_at: Sat, 25 Jul 2015 14:42:08 GMT
48
- recorded_with: VCR 2.9.3
80
+ recorded_at: Sat, 19 Jan 2019 21:25:48 GMT
81
+ recorded_with: VCR 6.0.0
@@ -5,12 +5,14 @@ http_interactions:
5
5
  uri: https://slack.com/api/auth.test
6
6
  body:
7
7
  encoding: UTF-8
8
- string: token=token
8
+ string: ''
9
9
  headers:
10
10
  Accept:
11
11
  - application/json; charset=utf-8
12
12
  User-Agent:
13
- - Slack Ruby Gem 1.1.1
13
+ - Slack Ruby Client/0.18.0
14
+ Authorization:
15
+ - Bearer <SLACK_API_TOKEN>
14
16
  Content-Type:
15
17
  - application/x-www-form-urlencoded
16
18
  Accept-Encoding:
@@ -20,38 +22,60 @@ http_interactions:
20
22
  code: 200
21
23
  message: OK
22
24
  headers:
23
- Access-Control-Allow-Origin:
24
- - '*'
25
- Cache-Control:
26
- - private, no-cache, no-store, must-revalidate
27
- Content-Type:
28
- - application/json; charset=utf-8
29
25
  Date:
30
- - Tue, 28 Apr 2015 12:55:23 GMT
31
- Expires:
32
- - Mon, 26 Jul 1997 05:00:00 GMT
33
- Pragma:
34
- - no-cache
26
+ - Sat, 04 Dec 2021 20:13:19 GMT
35
27
  Server:
36
28
  - Apache
29
+ Access-Control-Allow-Origin:
30
+ - "*"
31
+ Referrer-Policy:
32
+ - no-referrer
33
+ X-Slack-Backend:
34
+ - r
37
35
  Strict-Transport-Security:
38
36
  - max-age=31536000; includeSubDomains; preload
39
- Vary:
40
- - Accept-Encoding
41
- X-Accepted-Oauth-Scopes:
42
- - identify
43
- X-Content-Type-Options:
44
- - nosniff
37
+ Access-Control-Allow-Headers:
38
+ - slack-route, x-slack-version-ts, x-b3-traceid, x-b3-spanid, x-b3-parentspanid,
39
+ x-b3-sampled, x-b3-flags
40
+ Access-Control-Expose-Headers:
41
+ - x-slack-req-id, retry-after
45
42
  X-Oauth-Scopes:
46
- - identify,read,post,client
43
+ - identify,read,post,client,apps
44
+ Expires:
45
+ - Mon, 26 Jul 1997 05:00:00 GMT
46
+ Cache-Control:
47
+ - private, no-cache, no-store, must-revalidate
48
+ Pragma:
49
+ - no-cache
47
50
  X-Xss-Protection:
48
51
  - '0'
52
+ X-Content-Type-Options:
53
+ - nosniff
54
+ X-Slack-Req-Id:
55
+ - cf2877c6fab8f3aa7747f2e07d0b5fd5
56
+ Vary:
57
+ - Accept-Encoding
49
58
  Content-Length:
50
- - '128'
51
- Connection:
52
- - keep-alive
59
+ - '165'
60
+ Content-Type:
61
+ - application/json; charset=utf-8
62
+ X-Envoy-Upstream-Service-Time:
63
+ - '18'
64
+ X-Backend:
65
+ - main_normal main_bedrock_normal_with_overflow main_canary_with_overflow main_bedrock_canary_with_overflow
66
+ main_control_with_overflow main_bedrock_control_with_overflow
67
+ X-Server:
68
+ - slack-www-hhvm-main-iad-i2dg
69
+ X-Slack-Shared-Secret-Outcome:
70
+ - no-match
71
+ Via:
72
+ - envoy-www-iad-pwei, envoy-edge-iad-p7fn
73
+ X-Edge-Backend:
74
+ - envoy-www
75
+ X-Slack-Edge-Shared-Secret-Outcome:
76
+ - no-match
53
77
  body:
54
78
  encoding: UTF-8
55
- string: '{"ok":true,"url":"https:\/\/rubybot.slack.com\/","team":"team_name","user":"user_name","team_id":"TDEADBEEF","user_id":"UBAADFOOD"}'
56
- http_version:
57
- recorded_at: Tue, 28 Apr 2015 12:55:22 GMT
79
+ string: '{"ok":true,"url":"https:\/\/rubybot.slack.com\/","team":"team_name","user":"user_name","team_id":"TDEADBEEF","user_id":"UBAADFOOD","bot_id":"B0J1L75DY","is_enterprise_install":false}'
80
+ recorded_at: Sat, 19 Jan 2019 21:25:48 GMT
81
+ recorded_with: VCR 6.0.0