slack-ruby-client 0.7.2 → 1.0.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.
Files changed (383) hide show
  1. checksums.yaml +5 -5
  2. data/.github/FUNDING.yml +1 -0
  3. data/.gitignore +2 -0
  4. data/.gitmodules +1 -1
  5. data/.rubocop.yml +37 -1
  6. data/.rubocop_todo.yml +130 -47
  7. data/.travis.yml +17 -13
  8. data/CHANGELOG.md +254 -43
  9. data/CONTRIBUTING.md +26 -15
  10. data/Dangerfile +3 -0
  11. data/Gemfile +13 -2
  12. data/LICENSE.md +1 -1
  13. data/README.md +287 -63
  14. data/RELEASING.md +22 -14
  15. data/Rakefile +2 -1
  16. data/UPGRADING.md +129 -5
  17. data/bin/commands/admin_analytics.rb +16 -0
  18. data/bin/commands/admin_apps.rb +51 -0
  19. data/bin/commands/admin_apps_approved.rb +17 -0
  20. data/bin/commands/admin_apps_requests.rb +17 -0
  21. data/bin/commands/admin_apps_restricted.rb +17 -0
  22. data/bin/commands/admin_auth_policy.rb +39 -0
  23. data/bin/commands/admin_barriers.rb +47 -0
  24. data/bin/commands/admin_conversations.rb +169 -0
  25. data/bin/commands/admin_conversations_ekm.rb +17 -0
  26. data/bin/commands/admin_conversations_restrictAccess.rb +37 -0
  27. data/bin/commands/admin_conversations_whitelist.rb +37 -0
  28. data/bin/commands/admin_emoji.rb +54 -0
  29. data/bin/commands/admin_inviteRequests.rb +36 -0
  30. data/bin/commands/admin_inviteRequests_approved.rb +16 -0
  31. data/bin/commands/admin_inviteRequests_denied.rb +16 -0
  32. data/bin/commands/admin_teams.rb +27 -0
  33. data/bin/commands/admin_teams_admins.rb +16 -0
  34. data/bin/commands/admin_teams_owners.rb +16 -0
  35. data/bin/commands/admin_teams_settings.rb +64 -0
  36. data/bin/commands/admin_usergroups.rb +48 -0
  37. data/bin/commands/admin_users.rb +98 -0
  38. data/bin/commands/admin_users_session.rb +78 -0
  39. data/bin/commands/api.rb +3 -3
  40. data/bin/commands/apps.rb +15 -0
  41. data/bin/commands/apps_connections.rb +13 -0
  42. data/bin/commands/apps_event_authorizations.rb +16 -0
  43. data/bin/commands/apps_manifest.rb +51 -0
  44. data/bin/commands/apps_permissions.rb +23 -0
  45. data/bin/commands/apps_permissions_resources.rb +15 -0
  46. data/bin/commands/apps_permissions_scopes.rb +13 -0
  47. data/bin/commands/apps_permissions_users.rb +26 -0
  48. data/bin/commands/auth.rb +12 -2
  49. data/bin/commands/auth_teams.rb +16 -0
  50. data/bin/commands/bots.rb +15 -0
  51. data/bin/commands/calls.rb +52 -0
  52. data/bin/commands/calls_participants.rb +25 -0
  53. data/bin/commands/channels.rb +6 -132
  54. data/bin/commands/chat.rb +127 -20
  55. data/bin/commands/chat_scheduledMessages.rb +19 -0
  56. data/bin/commands/conversations.rb +253 -0
  57. data/bin/commands/dialog.rb +15 -0
  58. data/bin/commands/dnd.rb +12 -9
  59. data/bin/commands/emoji.rb +3 -2
  60. data/bin/commands/files.rb +47 -31
  61. data/bin/commands/files_comments.rb +3 -23
  62. data/bin/commands/files_remote.rb +78 -0
  63. data/bin/commands/groups.rb +1 -154
  64. data/bin/commands/im.rb +1 -48
  65. data/bin/commands/migration.rb +16 -0
  66. data/bin/commands/mpim.rb +1 -48
  67. data/bin/commands/oauth.rb +4 -2
  68. data/bin/commands/oauth_v2.rb +29 -0
  69. data/bin/commands/openid_connect.rb +27 -0
  70. data/bin/commands/pins.rb +9 -12
  71. data/bin/commands/reactions.rb +17 -15
  72. data/bin/commands/reminders.rb +17 -10
  73. data/bin/commands/rtm.rb +19 -4
  74. data/bin/commands/search.rb +17 -12
  75. data/bin/commands/stars.rb +12 -9
  76. data/bin/commands/team.rb +23 -8
  77. data/bin/commands/team_billing.rb +13 -0
  78. data/bin/commands/team_preferences.rb +13 -0
  79. data/bin/commands/team_profile.rb +14 -0
  80. data/bin/commands/tooling_tokens.rb +14 -0
  81. data/bin/commands/usergroups.rb +23 -17
  82. data/bin/commands/usergroups_users.rb +7 -4
  83. data/bin/commands/users.rb +83 -27
  84. data/bin/commands/users_admin.rb +29 -0
  85. data/bin/commands/users_prefs.rb +13 -0
  86. data/bin/commands/users_profile.rb +27 -0
  87. data/bin/commands/views.rb +48 -0
  88. data/bin/commands/workflows.rb +38 -0
  89. data/bin/commands.rb +47 -5
  90. data/bin/slack +3 -4
  91. data/examples/hi_real_time_and_web/Gemfile +1 -0
  92. data/examples/hi_real_time_and_web/hi.rb +8 -4
  93. data/examples/{hi_real_time_async_celluloid → hi_real_time_async_async}/Gemfile +2 -1
  94. data/examples/{hi_real_time_async_celluloid → hi_real_time_async_async}/Procfile +0 -0
  95. data/examples/{hi_real_time_async_celluloid → hi_real_time_async_async}/hi.rb +13 -8
  96. data/examples/hi_web/Gemfile +1 -0
  97. data/examples/hi_web/hi.rb +2 -1
  98. data/examples/new_ticket/Gemfile +1 -0
  99. data/examples/new_ticket/new_ticket.rb +3 -2
  100. data/lib/slack/config.rb +2 -2
  101. data/lib/slack/events/config.rb +32 -0
  102. data/lib/slack/events/request.rb +72 -0
  103. data/lib/slack/logger.rb +6 -5
  104. data/lib/slack/messages/formatting.rb +4 -4
  105. data/lib/slack/messages/message.rb +6 -4
  106. data/lib/slack/real_time/api/message.rb +3 -1
  107. data/lib/slack/real_time/api/message_id.rb +1 -0
  108. data/lib/slack/real_time/api/ping.rb +5 -2
  109. data/lib/slack/real_time/api/templates/event_handler.erb +1 -1
  110. data/lib/slack/real_time/api/typing.rb +3 -1
  111. data/lib/slack/real_time/client.rb +116 -36
  112. data/lib/slack/real_time/concurrency/async.rb +138 -0
  113. data/lib/slack/real_time/concurrency.rb +2 -2
  114. data/lib/slack/real_time/config.rb +17 -19
  115. data/lib/slack/real_time/models/base.rb +3 -3
  116. data/lib/slack/real_time/models/bot.rb +1 -0
  117. data/lib/slack/real_time/models/channel.rb +1 -0
  118. data/lib/slack/real_time/models/group.rb +1 -0
  119. data/lib/slack/real_time/models/im.rb +1 -0
  120. data/lib/slack/real_time/models/team.rb +1 -0
  121. data/lib/slack/real_time/models/user.rb +1 -0
  122. data/lib/slack/real_time/models.rb +8 -7
  123. data/lib/slack/real_time/socket.rb +51 -23
  124. data/lib/slack/real_time/stores/base.rb +6 -9
  125. data/lib/slack/real_time/stores/starter.rb +143 -69
  126. data/lib/slack/real_time/stores/store.rb +160 -82
  127. data/lib/slack/real_time/stores.rb +4 -3
  128. data/lib/slack/version.rb +2 -1
  129. data/lib/slack/web/api/endpoints/admin_analytics.rb +28 -0
  130. data/lib/slack/web/api/endpoints/admin_apps.rb +78 -0
  131. data/lib/slack/web/api/endpoints/admin_apps_approved.rb +35 -0
  132. data/lib/slack/web/api/endpoints/admin_apps_requests.rb +35 -0
  133. data/lib/slack/web/api/endpoints/admin_apps_restricted.rb +35 -0
  134. data/lib/slack/web/api/endpoints/admin_auth_policy.rb +72 -0
  135. data/lib/slack/web/api/endpoints/admin_barriers.rb +82 -0
  136. data/lib/slack/web/api/endpoints/admin_conversations.rb +260 -0
  137. data/lib/slack/web/api/endpoints/admin_conversations_ekm.rb +35 -0
  138. data/lib/slack/web/api/endpoints/admin_conversations_restrictAccess.rb +61 -0
  139. data/lib/slack/web/api/endpoints/admin_conversations_whitelist.rb +64 -0
  140. data/lib/slack/web/api/endpoints/admin_emoji.rb +88 -0
  141. data/lib/slack/web/api/endpoints/admin_inviteRequests.rb +61 -0
  142. data/lib/slack/web/api/endpoints/admin_inviteRequests_approved.rb +33 -0
  143. data/lib/slack/web/api/endpoints/admin_inviteRequests_denied.rb +33 -0
  144. data/lib/slack/web/api/endpoints/admin_teams.rb +50 -0
  145. data/lib/slack/web/api/endpoints/admin_teams_admins.rb +34 -0
  146. data/lib/slack/web/api/endpoints/admin_teams_owners.rb +34 -0
  147. data/lib/slack/web/api/endpoints/admin_teams_settings.rb +99 -0
  148. data/lib/slack/web/api/endpoints/admin_usergroups.rb +77 -0
  149. data/lib/slack/web/api/endpoints/admin_users.rb +163 -0
  150. data/lib/slack/web/api/endpoints/admin_users_session.rb +122 -0
  151. data/lib/slack/web/api/endpoints/api.rb +4 -5
  152. data/lib/slack/web/api/endpoints/apps.rb +27 -0
  153. data/lib/slack/web/api/endpoints/apps_connections.rb +21 -0
  154. data/lib/slack/web/api/endpoints/apps_event_authorizations.rb +34 -0
  155. data/lib/slack/web/api/endpoints/apps_manifest.rb +75 -0
  156. data/lib/slack/web/api/endpoints/apps_permissions.rb +36 -0
  157. data/lib/slack/web/api/endpoints/apps_permissions_resources.rb +31 -0
  158. data/lib/slack/web/api/endpoints/apps_permissions_scopes.rb +21 -0
  159. data/lib/slack/web/api/endpoints/apps_permissions_users.rb +50 -0
  160. data/lib/slack/web/api/endpoints/auth.rb +14 -2
  161. data/lib/slack/web/api/endpoints/auth_teams.rb +33 -0
  162. data/lib/slack/web/api/endpoints/bots.rb +25 -0
  163. data/lib/slack/web/api/endpoints/calls.rb +83 -0
  164. data/lib/slack/web/api/endpoints/calls_participants.rb +42 -0
  165. data/lib/slack/web/api/endpoints/channels.rb +8 -201
  166. data/lib/slack/web/api/endpoints/chat.rb +252 -42
  167. data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +40 -0
  168. data/lib/slack/web/api/endpoints/conversations.rb +422 -0
  169. data/lib/slack/web/api/endpoints/dialog.rb +33 -0
  170. data/lib/slack/web/api/endpoints/dnd.rb +17 -12
  171. data/lib/slack/web/api/endpoints/emoji.rb +3 -2
  172. data/lib/slack/web/api/endpoints/files.rb +82 -43
  173. data/lib/slack/web/api/endpoints/files_comments.rb +4 -36
  174. data/lib/slack/web/api/endpoints/files_remote.rb +127 -0
  175. data/lib/slack/web/api/endpoints/groups.rb +1 -235
  176. data/lib/slack/web/api/endpoints/im.rb +1 -73
  177. data/lib/slack/web/api/endpoints/migration.rb +28 -0
  178. data/lib/slack/web/api/endpoints/mpim.rb +1 -72
  179. data/lib/slack/web/api/endpoints/oauth.rb +9 -10
  180. data/lib/slack/web/api/endpoints/oauth_v2.rb +48 -0
  181. data/lib/slack/web/api/endpoints/openid_connect.rb +42 -0
  182. data/lib/slack/web/api/endpoints/pins.rb +14 -23
  183. data/lib/slack/web/api/endpoints/presence.rb +1 -1
  184. data/lib/slack/web/api/endpoints/reactions.rb +43 -34
  185. data/lib/slack/web/api/endpoints/reminders.rb +28 -15
  186. data/lib/slack/web/api/endpoints/rtm.rb +29 -8
  187. data/lib/slack/web/api/endpoints/search.rb +39 -24
  188. data/lib/slack/web/api/endpoints/stars.rb +30 -22
  189. data/lib/slack/web/api/endpoints/team.rb +34 -11
  190. data/lib/slack/web/api/endpoints/team_billing.rb +21 -0
  191. data/lib/slack/web/api/endpoints/team_preferences.rb +21 -0
  192. data/lib/slack/web/api/endpoints/team_profile.rb +23 -0
  193. data/lib/slack/web/api/endpoints/tooling_tokens.rb +24 -0
  194. data/lib/slack/web/api/endpoints/usergroups.rb +43 -32
  195. data/lib/slack/web/api/endpoints/usergroups_users.rb +14 -9
  196. data/lib/slack/web/api/endpoints/users.rb +104 -19
  197. data/lib/slack/web/api/endpoints/users_admin.rb +49 -0
  198. data/lib/slack/web/api/endpoints/users_prefs.rb +21 -0
  199. data/lib/slack/web/api/endpoints/users_profile.rb +44 -0
  200. data/lib/slack/web/api/endpoints/views.rb +97 -0
  201. data/lib/slack/web/api/endpoints/workflows.rb +61 -0
  202. data/lib/slack/web/api/endpoints.rb +111 -29
  203. data/lib/slack/web/api/error.rb +2 -8
  204. data/lib/slack/web/api/errors/server_error.rb +37 -0
  205. data/lib/slack/web/api/errors/slack_error.rb +29 -0
  206. data/lib/slack/web/api/errors/too_many_requests_error.rb +21 -0
  207. data/lib/slack/web/api/errors.rb +1040 -0
  208. data/lib/slack/web/api/mixins/conversations.id.rb +25 -0
  209. data/lib/slack/web/api/mixins/ids.id.rb +24 -0
  210. data/lib/slack/web/api/mixins/users.id.rb +6 -7
  211. data/lib/slack/web/api/mixins/users.search.rb +39 -36
  212. data/lib/slack/web/api/mixins.rb +4 -4
  213. data/lib/slack/web/api/patches/chat.1.patch +70 -0
  214. data/lib/slack/web/api/patches/dialog.1.open-json-support.patch +17 -0
  215. data/lib/slack/web/api/patches/views.1.view-json.patch +40 -0
  216. data/lib/slack/web/api/patches/views.1.views-published.patch +16 -0
  217. data/lib/slack/web/api/templates/command.erb +5 -3
  218. data/lib/slack/web/api/templates/commands.erb +2 -1
  219. data/lib/slack/web/api/templates/endpoints.erb +5 -5
  220. data/lib/slack/web/api/templates/errors.erb +20 -0
  221. data/lib/slack/web/api/templates/method.erb +26 -4
  222. data/lib/slack/web/api/templates/method_spec.erb +3 -2
  223. data/lib/slack/web/client.rb +2 -1
  224. data/lib/slack/web/config.rb +21 -10
  225. data/lib/slack/web/faraday/connection.rb +25 -16
  226. data/lib/slack/web/faraday/request.rb +4 -1
  227. data/lib/slack/web/faraday/response/raise_error.rb +19 -1
  228. data/lib/slack/web/faraday/response/wrap_error.rb +24 -0
  229. data/lib/slack/web/pagination/cursor.rb +48 -0
  230. data/lib/slack-ruby-client.rb +40 -26
  231. data/lib/slack.rb +1 -0
  232. data/lib/slack_ruby_client.rb +1 -0
  233. data/lib/tasks/git.rake +2 -1
  234. data/lib/tasks/real_time.rake +16 -6
  235. data/lib/tasks/update.rake +1 -0
  236. data/lib/tasks/web.rake +42 -10
  237. data/screenshots/create-app.png +0 -0
  238. data/slack-ruby-client.gemspec +11 -9
  239. data/spec/fixtures/slack/web/429_error.yml +50 -52
  240. data/spec/fixtures/slack/web/auth_test_error.yml +51 -18
  241. data/spec/fixtures/slack/web/auth_test_success.yml +50 -26
  242. data/spec/fixtures/slack/web/conversations_info.yml +167 -0
  243. data/spec/fixtures/slack/web/conversations_setTopic.yml +84 -0
  244. data/spec/fixtures/slack/web/conversations_setTopic_one_page.yml +172 -0
  245. data/spec/fixtures/slack/web/conversations_setTopic_paginated.yml +253 -0
  246. data/spec/fixtures/slack/web/paginated_users_list.yml +613 -0
  247. data/spec/fixtures/slack/web/rtm_connect.yml +307 -0
  248. data/spec/fixtures/slack/web/rtm_start.yml +771 -60
  249. data/spec/fixtures/slack/web/users_info.yml +153 -69
  250. data/spec/fixtures/slack/web/users_list.yml +102 -41
  251. data/spec/fixtures/slack/web/views_open_error.yml +83 -0
  252. data/spec/integration/integration_spec.rb +116 -48
  253. data/spec/slack/config_spec.rb +2 -0
  254. data/spec/slack/events/config_spec.rb +33 -0
  255. data/spec/slack/events/request_spec.rb +184 -0
  256. data/spec/slack/messages/formatting_spec.rb +25 -14
  257. data/spec/slack/real_time/api/message_spec.rb +6 -1
  258. data/spec/slack/real_time/api/ping_spec.rb +2 -0
  259. data/spec/slack/real_time/api/typing_spec.rb +5 -1
  260. data/spec/slack/real_time/client_spec.rb +465 -141
  261. data/spec/slack/real_time/concurrency/it_behaves_like_a_realtime_socket.rb +21 -0
  262. data/spec/slack/real_time/concurrency/with_concurrency_spec.rb +10 -0
  263. data/spec/slack/real_time/concurrency/without_concurrency_spec.rb +10 -0
  264. data/spec/slack/real_time/event_handlers/bot_spec.rb +7 -4
  265. data/spec/slack/real_time/event_handlers/channel_spec.rb +10 -7
  266. data/spec/slack/real_time/event_handlers/event_handlers_spec.rb +3 -2
  267. data/spec/slack/real_time/event_handlers/group_spec.rb +5 -4
  268. data/spec/slack/real_time/event_handlers/im_spec.rb +9 -8
  269. data/spec/slack/real_time/event_handlers/team_spec.rb +8 -4
  270. data/spec/slack/real_time/event_handlers/user_spec.rb +7 -4
  271. data/spec/slack/real_time/rtm_connect_spec.rb +14 -0
  272. data/spec/slack/real_time/rtm_start_spec.rb +2 -1
  273. data/spec/slack/real_time/store_spec.rb +2 -1
  274. data/spec/slack/slack_spec.rb +42 -8
  275. data/spec/slack/version_spec.rb +2 -1
  276. data/spec/slack/web/api/endpoints/admin_analytics_spec.rb +13 -0
  277. data/spec/slack/web/api/endpoints/admin_apps_approved_spec.rb +8 -0
  278. data/spec/slack/web/api/endpoints/admin_apps_requests_spec.rb +8 -0
  279. data/spec/slack/web/api/endpoints/admin_apps_restricted_spec.rb +8 -0
  280. data/spec/slack/web/api/endpoints/admin_apps_spec.rb +18 -0
  281. data/spec/slack/web/api/endpoints/admin_auth_policy_spec.rb +35 -0
  282. data/spec/slack/web/api/endpoints/admin_barriers_spec.rb +38 -0
  283. data/spec/slack/web/api/endpoints/admin_conversations_ekm_spec.rb +8 -0
  284. data/spec/slack/web/api/endpoints/admin_conversations_restrictAccess_spec.rb +32 -0
  285. data/spec/slack/web/api/endpoints/admin_conversations_spec.rb +98 -0
  286. data/spec/slack/web/api/endpoints/admin_emoji_spec.rb +37 -0
  287. data/spec/slack/web/api/endpoints/admin_inviteRequests_approved_spec.rb +8 -0
  288. data/spec/slack/web/api/endpoints/admin_inviteRequests_denied_spec.rb +8 -0
  289. data/spec/slack/web/api/endpoints/admin_inviteRequests_spec.rb +18 -0
  290. data/spec/slack/web/api/endpoints/admin_teams_admins_spec.rb +13 -0
  291. data/spec/slack/web/api/endpoints/admin_teams_owners_spec.rb +13 -0
  292. data/spec/slack/web/api/endpoints/admin_teams_settings_spec.rb +53 -0
  293. data/spec/slack/web/api/endpoints/admin_teams_spec.rb +16 -0
  294. data/spec/slack/web/api/endpoints/admin_usergroups_spec.rb +37 -0
  295. data/spec/slack/web/api/endpoints/admin_users_session_spec.rb +41 -0
  296. data/spec/slack/web/api/endpoints/admin_users_spec.rb +67 -0
  297. data/spec/slack/web/api/endpoints/api_spec.rb +1 -0
  298. data/spec/slack/web/api/endpoints/apps_connections_spec.rb +8 -0
  299. data/spec/slack/web/api/endpoints/apps_event_authorizations_spec.rb +13 -0
  300. data/spec/slack/web/api/endpoints/apps_manifest_spec.rb +36 -0
  301. data/spec/slack/web/api/endpoints/apps_spec.rb +16 -0
  302. data/spec/slack/web/api/endpoints/auth_teams_spec.rb +8 -0
  303. data/spec/slack/web/api/endpoints/bots_spec.rb +8 -0
  304. data/spec/slack/web/api/endpoints/calls_participants_spec.rb +24 -0
  305. data/spec/slack/web/api/endpoints/calls_spec.rb +31 -0
  306. data/spec/slack/web/api/endpoints/chat_scheduledMessages_spec.rb +8 -0
  307. data/spec/slack/web/api/endpoints/custom_specs/auth_spec.rb +11 -4
  308. data/spec/slack/web/api/endpoints/custom_specs/chat_spec.rb +140 -24
  309. data/spec/slack/web/api/endpoints/custom_specs/conversations_spec.rb +13 -0
  310. data/spec/slack/web/api/endpoints/custom_specs/dialog_spec.rb +36 -0
  311. data/spec/slack/web/api/endpoints/custom_specs/users_spec.rb +22 -7
  312. data/spec/slack/web/api/endpoints/custom_specs/views_spec.rb +95 -0
  313. data/spec/slack/web/api/endpoints/dnd_spec.rb +4 -3
  314. data/spec/slack/web/api/endpoints/emoji_spec.rb +1 -0
  315. data/spec/slack/web/api/endpoints/files_comments_spec.rb +3 -21
  316. data/spec/slack/web/api/endpoints/files_remote_spec.rb +24 -0
  317. data/spec/slack/web/api/endpoints/files_spec.rb +17 -5
  318. data/spec/slack/web/api/endpoints/migration_spec.rb +13 -0
  319. data/spec/slack/web/api/endpoints/oauth_spec.rb +1 -11
  320. data/spec/slack/web/api/endpoints/oauth_v2_spec.rb +16 -0
  321. data/spec/slack/web/api/endpoints/openid_connect_spec.rb +8 -0
  322. data/spec/slack/web/api/endpoints/pins_spec.rb +1 -0
  323. data/spec/slack/web/api/endpoints/reactions_spec.rb +8 -1
  324. data/spec/slack/web/api/endpoints/reminders_spec.rb +3 -2
  325. data/spec/slack/web/api/endpoints/rtm_spec.rb +1 -0
  326. data/spec/slack/web/api/endpoints/search_spec.rb +1 -0
  327. data/spec/slack/web/api/endpoints/stars_spec.rb +1 -0
  328. data/spec/slack/web/api/endpoints/team_billing_spec.rb +8 -0
  329. data/spec/slack/web/api/endpoints/team_preferences_spec.rb +8 -0
  330. data/spec/slack/web/api/endpoints/team_profile_spec.rb +8 -0
  331. data/spec/slack/web/api/endpoints/team_spec.rb +1 -0
  332. data/spec/slack/web/api/endpoints/tooling_tokens_spec.rb +13 -0
  333. data/spec/slack/web/api/endpoints/usergroups_spec.rb +1 -0
  334. data/spec/slack/web/api/endpoints/usergroups_users_spec.rb +3 -2
  335. data/spec/slack/web/api/endpoints/users_admin_spec.rb +18 -0
  336. data/spec/slack/web/api/endpoints/users_prefs_spec.rb +8 -0
  337. data/spec/slack/web/api/endpoints/users_profile_spec.rb +8 -0
  338. data/spec/slack/web/api/endpoints/workflows_spec.rb +26 -0
  339. data/spec/slack/web/api/error_spec.rb +7 -7
  340. data/spec/slack/web/api/errors/slack_error_spec.rb +33 -0
  341. data/spec/slack/web/api/mixins/conversations_list_spec.rb +21 -0
  342. data/spec/slack/web/api/mixins/conversations_spec.rb +43 -0
  343. data/spec/slack/web/api/mixins/users_spec.rb +30 -17
  344. data/spec/slack/web/api/pagination/cursor_spec.rb +98 -0
  345. data/spec/slack/web/client_spec.rb +211 -14
  346. data/spec/slack/web/faraday/request_spec.rb +80 -0
  347. data/spec/slack/web/faraday/response/raise_error_spec.rb +86 -0
  348. data/spec/spec_helper.rb +9 -2
  349. data/spec/support/queue_with_timeout.rb +6 -5
  350. data/spec/support/real_time/concurrency/mock.rb +2 -2
  351. data/spec/support/real_time/connected_client.rb +7 -2
  352. data/spec/support/real_time/event.rb +1 -0
  353. data/spec/support/token.rb +1 -0
  354. data/spec/support/vcr.rb +37 -1
  355. metadata +250 -130
  356. data/examples/hi_real_time/Gemfile +0 -5
  357. data/examples/hi_real_time/hi.gif +0 -0
  358. data/examples/hi_real_time/hi.rb +0 -37
  359. data/examples/hi_real_time_async/Gemfile +0 -5
  360. data/examples/hi_real_time_async/hi.rb +0 -29
  361. data/examples/hi_real_time_async_eventmachine/Gemfile +0 -6
  362. data/examples/hi_real_time_async_eventmachine/Procfile +0 -2
  363. data/examples/hi_real_time_async_eventmachine/hi.rb +0 -36
  364. data/lib/slack/real_time/concurrency/celluloid.rb +0 -100
  365. data/lib/slack/real_time/concurrency/eventmachine.rb +0 -60
  366. data/lib/slack/web/api/mixins/channels.id.json +0 -20
  367. data/lib/slack/web/api/mixins/channels.id.rb +0 -26
  368. data/lib/slack/web/api/mixins/groups.id.json +0 -20
  369. data/lib/slack/web/api/mixins/groups.id.rb +0 -26
  370. data/lib/slack/web/api/patches/chat.1.text-attachments-required.patch +0 -13
  371. data/lib/slack/web/api/patches/chat.2.attachments-json.patch +0 -17
  372. data/lib/slack/web/api/patches/chat.3.update-attachments-support.patch +0 -20
  373. data/screenshots/register-bot.png +0 -0
  374. data/spec/fixtures/slack/web/channels_info.yml +0 -46
  375. data/spec/fixtures/slack/web/groups_info.yml +0 -43
  376. data/spec/slack/real_time/concurrency/celluloid_spec.rb +0 -35
  377. data/spec/slack/real_time/concurrency/eventmachine_spec.rb +0 -50
  378. data/spec/slack/web/api/endpoints/custom_specs/channels_spec.rb +0 -11
  379. data/spec/slack/web/api/endpoints/custom_specs/groups_spec.rb +0 -11
  380. data/spec/slack/web/api/endpoints/im_spec.rb +0 -30
  381. data/spec/slack/web/api/endpoints/mpim_spec.rb +0 -30
  382. data/spec/slack/web/api/mixins/channels_spec.rb +0 -31
  383. data/spec/slack/web/api/mixins/groups_spec.rb +0 -31
@@ -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
@@ -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
- return { 'ok' => true, 'user' => { 'id' => name } } unless name[0] == '@'
15
- users_list.tap do |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
- module Slack
2
- module Web
3
- module Api
4
- module Mixins
5
- module Users
6
- Member = Struct.new :id, :name, :first_name, :last_name, :real_name, :email
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
- # This method searches for users.
10
- #
11
- # @option options [user] :user
12
- # Free-formed text to search for.
13
- def users_search(options = {})
14
- query = options[:user]
15
- throw ArgumentError.new('Required arguments :user missing') if query.nil?
16
- index = Picky::Index.new(:users) do
17
- category :name
18
- category :first_name
19
- category :last_name
20
- category :real_name
21
- category :email
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 if defined?(Picky)
46
+ end
@@ -1,4 +1,4 @@
1
- require 'slack/web/api/mixins/channels.id'
2
- require 'slack/web/api/mixins/users.id'
3
- require 'slack/web/api/mixins/users.search'
4
- require 'slack/web/api/mixins/groups.id'
1
+ # frozen_string_literal: true
2
+ require_relative 'mixins/conversations.id'
3
+ require_relative 'mixins/users.id'
4
+ require_relative 'mixins/users.search'
@@ -0,0 +1,70 @@
1
+ diff --git a/lib/slack/web/api/endpoints/chat.rb b/lib/slack/web/api/endpoints/chat.rb
2
+ index d090ae2..50186d5 100644
3
+ --- a/lib/slack/web/api/endpoints/chat.rb
4
+ +++ b/lib/slack/web/api/endpoints/chat.rb
5
+ @@ -121,10 +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 :channel missing') if options[:channel].nil?
10
+ - throw ArgumentError.new('Required arguments :text missing') if options[:text].nil?
11
+ + throw ArgumentError.new('Required arguments :text, :attachments or :blocks missing') if options[:text].nil? && options[:attachments].nil? && options[:blocks].nil?
12
+ throw ArgumentError.new('Required arguments :user missing') if options[:user].nil?
13
+ options = options.merge(user: users_id(options)['user']['id']) if options[:user]
14
+ + # attachments must be passed as an encoded JSON string
15
+ + if options.key?(:attachments)
16
+ + attachments = options[:attachments]
17
+ + attachments = JSON.dump(attachments) unless attachments.is_a?(String)
18
+ + options = options.merge(attachments: attachments)
19
+ + end
20
+ + # blocks must be passed as an encoded JSON string
21
+ + if options.key?(:blocks)
22
+ + blocks = options[:blocks]
23
+ + blocks = JSON.dump(blocks) unless blocks.is_a?(String)
24
+ + options = options.merge(blocks: blocks)
25
+ + end
26
+ post('chat.postEphemeral', options)
27
+ end
28
+
29
+ @@ -168,6 +179,19 @@ module Slack
30
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.postMessage.json
31
+ def chat_postMessage(options = {})
32
+ throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
33
+ + throw ArgumentError.new('Required arguments :text, :attachments or :blocks missing') if options[:text].nil? && options[:attachments].nil? && options[:blocks].nil?
34
+ + # attachments must be passed as an encoded JSON string
35
+ + if options.key?(:attachments)
36
+ + attachments = options[:attachments]
37
+ + attachments = JSON.dump(attachments) unless attachments.is_a?(String)
38
+ + options = options.merge(attachments: attachments)
39
+ + end
40
+ + # blocks must be passed as an encoded JSON string
41
+ + if options.key?(:blocks)
42
+ + blocks = options[:blocks]
43
+ + blocks = JSON.dump(blocks) unless blocks.is_a?(String)
44
+ + options = options.merge(blocks: blocks)
45
+ + end
46
+ post('chat.postMessage', options)
47
+ end
48
+
49
+ @@ -257,8 +281,21 @@ module Slack
50
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.update.json
51
+ def chat_update(options = {})
52
+ throw ArgumentError.new('Required arguments :channel missing') if options[:channel].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: conversations_id(options)['channel']['id']) if options[:channel]
56
+ + # attachments must be passed as an encoded JSON string
57
+ + if options.key?(:attachments)
58
+ + attachments = options[:attachments]
59
+ + attachments = JSON.dump(attachments) unless attachments.is_a?(String)
60
+ + options = options.merge(attachments: attachments)
61
+ + end
62
+ + # blocks must be passed as an encoded JSON string
63
+ + if options.key?(:blocks)
64
+ + blocks = options[:blocks]
65
+ + blocks = JSON.dump(blocks) unless blocks.is_a?(String)
66
+ + options = options.merge(blocks: blocks)
67
+ + end
68
+ post('chat.update', options)
69
+ end
70
+ 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
+
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # This file was auto-generated by lib/tasks/web.rake
2
3
 
3
4
  <% desc = group['desc'] || "#{group['name'].gsub(".", "_").camelize} methods." %>
@@ -7,11 +8,12 @@ desc "<%= desc %>"
7
8
  desc '<%= desc %>'
8
9
  <% end %>
9
10
  command '<%= group['name'].gsub(".", "_") %>' do |g|
10
- <% names.each_with_index do |(name, data), index| %>
11
+ <% names.sort.each_with_index do |(name, data), index| %>
11
12
  <% if index > 0 %>
12
13
 
13
14
  <% end %>
14
15
  <% short_desc = data["desc"].split("\n").first %>
16
+ <% short_desc += ' (undocumented)' if data['undocumented'] %>
15
17
  <% if short_desc.include?("'") %>
16
18
  g.desc "<%= short_desc %>"
17
19
  <% else %>
@@ -20,8 +22,8 @@ command '<%= group['name'].gsub(".", "_") %>' do |g|
20
22
  g.long_desc %( <%= data["desc"].split("\n").join(" ") %> )
21
23
  g.command '<%= name %>' do |c|
22
24
  <% data["args"].each do |arg_name, arg_v| %>
23
- <% if arg_v["desc"].include?("'") %>
24
- c.flag '<%= arg_name %>', desc: "<%= arg_v["desc"] %>"
25
+ <% if arg_v["desc"].include?("'") %>
26
+ c.flag '<%= arg_name %>', desc: "<%= arg_v["desc"].gsub('"', '\'') %>"
25
27
  <% else %>
26
28
  c.flag '<%= arg_name %>', desc: '<%= arg_v["desc"] %>'
27
29
  <% end %>
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
1
2
  # This file was auto-generated by lib/tasks/web.rake
2
3
 
3
- <% files.each do |f| %>
4
+ <% files.sort.each do |f| %>
4
5
  require 'commands/<%= f %>'
5
6
  <% end %>
@@ -1,18 +1,18 @@
1
+ # frozen_string_literal: true
1
2
  # This file was auto-generated by lib/tasks/web.rake
2
3
 
3
- <% files.each do |f| %>
4
- require 'slack/web/api/endpoints/<%= f %>'
4
+ <% files.sort.each do |f| %>
5
+ require_relative 'endpoints/<%= f %>'
5
6
  <% end %>
6
7
 
7
8
  module Slack
8
9
  module Web
9
10
  module Api
10
11
  module Endpoints
11
- include Slack::Web::Api::Mixins::Channels
12
+ include Slack::Web::Api::Mixins::Conversations
12
13
  include Slack::Web::Api::Mixins::Users
13
- include Slack::Web::Api::Mixins::Groups
14
14
 
15
- <% files.each do |f| %>
15
+ <% files.sort.each do |f| %>
16
16
  include <%= f.camelize %>
17
17
  <% end %>
18
18
  end
@@ -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
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # This file was auto-generated by lib/tasks/web.rake
2
3
 
3
4
  module Slack
@@ -5,13 +6,14 @@ module Slack
5
6
  module Api
6
7
  module Endpoints
7
8
  module <%= group.gsub(".", "_").camelize %>
8
- <% names.each_with_index do |(name, data), index| %>
9
+ <% names.sort.each_with_index do |(name, data), index| %>
9
10
  <% next if data['mixin'] %>
10
11
  <% if index > 0 %>
11
12
 
12
13
  <% end %>
13
14
  #
14
- <% data['desc'].split("\n").each do |line| %>
15
+ <% data['desc'].split("\n").each_with_index do |line, index| %>
16
+ <% line += ' (undocumented)' if data['undocumented'] && index == 0 %>
15
17
  # <%= line %>
16
18
  <% end %>
17
19
  #
@@ -25,8 +27,12 @@ module Slack
25
27
  <% end %>
26
28
  <% end %>
27
29
  <% end %>
30
+ <% if data['undocumented'] %>
31
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/undocumented/<%= group %>/<%= group %>.<%= name %>.json
32
+ <% else %>
28
33
  # @see https://api.slack.com/methods/<%= group %>.<%= name %>
29
- # @see https://github.com/dblock/slack-api-ref/blob/master/methods/<%= group %>/<%= group %>.<%= name %>.json
34
+ # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/<%= group %>/<%= group %>.<%= name %>.json
35
+ <% end %>
30
36
  def <%= group.gsub(".", "_") %>_<%= name %>(options = {})
31
37
  <% data['args'].select{ |k, v| v['required'] }.each do |arg_name, arg_v| %>
32
38
  throw ArgumentError.new('Required arguments :<%= arg_name %> missing') if options[:<%= arg_name %>].nil?
@@ -34,12 +40,28 @@ module Slack
34
40
  <% if data['group'] == 'groups' && data['args']['channel'] && !data['args']['channel']['desc'].include?('Can be an encoded ID, or a name.') %>
35
41
  options = options.merge(channel: groups_id(options)['group']['id']) if options[:channel]
36
42
  <% elsif data['args']['channel'] && !data['args']['channel']['desc'].include?('Can be an encoded ID, or a name.') %>
37
- options = options.merge(channel: channels_id(options)['channel']['id']) if options[:channel]
43
+ options = options.merge(channel: conversations_id(options)['channel']['id']) if options[:channel]
38
44
  <% end %>
39
45
  <% if data['args']['user'] %>
40
46
  options = options.merge(user: users_id(options)['user']['id']) if options[:user]
41
47
  <% end %>
48
+ <% if data['undocumented'] %>
49
+ logger.warn('The <%= group %>.<%= name %> method is undocumented.')
50
+ <% end %>
51
+ <% if data['deprecated'] %>
52
+ logger.warn('<%= group %>.<%= name %>: <%= data['deprecation']['deprecation_warning']%> Alternative methods: <%= data['deprecation']['alternative_methods'].join(', ')%>.')
53
+ <% end %>
54
+ <% if data['args'].keys.include?('cursor') %>
55
+ if block_given?
56
+ Pagination::Cursor.new(self, :<%= group.gsub(".", "_") %>_<%= name %>, options).each do |page|
57
+ yield page
58
+ end
59
+ else
60
+ post('<%= group %>.<%= name %>', options)
61
+ end
62
+ <% else %>
42
63
  post('<%= group %>.<%= name %>', options)
64
+ <% end %>
43
65
  end
44
66
  <% end %>
45
67
  end
@@ -1,17 +1,18 @@
1
+ # frozen_string_literal: true
1
2
  # This file was auto-generated by lib/tasks/web.rake
2
3
 
3
4
  require 'spec_helper'
4
5
 
5
6
  RSpec.describe Slack::Web::Api::Endpoints::<%= group.gsub(".", "_").camelize %> do
6
7
  let(:client) { Slack::Web::Client.new }
7
- <% names.each_with_index do |(name, data), index| %>
8
+ <% names.sort.each_with_index do |(name, data), index| %>
8
9
  <% next if data['mixin'] %>
9
10
  <% required_params = data['args'].select{ |k, v| v['required'] } %>
10
11
  <% next if required_params.none? %>
11
12
  context '<%= group %>_<%= name %>' do
12
13
  <% required_params.each do |arg_name, arg_v| %>
13
14
  it 'requires <%= arg_name %>' do
14
- <% 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(', ') %>
15
16
  expect { client.<%= group.gsub(".", "_") %>_<%= name %><%= params_except_required.empty? ? '' : "(#{params_except_required})" %> }.to raise_error ArgumentError, /Required arguments :<%= arg_name %> missing/
16
17
  end
17
18
  <% end %>
@@ -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[key] || Slack::Web.config.send(key))
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
@@ -1,16 +1,22 @@
1
+ # frozen_string_literal: true
1
2
  module Slack
2
3
  module Web
3
4
  module Config
4
5
  extend self
5
6
 
6
- ATTRIBUTES = [
7
- :proxy,
8
- :user_agent,
9
- :ca_path,
10
- :ca_file,
11
- :logger,
12
- :endpoint,
13
- :token
7
+ ATTRIBUTES = %i[
8
+ proxy
9
+ user_agent
10
+ ca_path
11
+ ca_file
12
+ logger
13
+ endpoint
14
+ token
15
+ timeout
16
+ open_timeout
17
+ default_page_size
18
+ default_max_retries
19
+ adapter
14
20
  ].freeze
15
21
 
16
22
  attr_accessor(*Config::ATTRIBUTES)
@@ -18,11 +24,16 @@ module Slack
18
24
  def reset
19
25
  self.endpoint = 'https://slack.com/api/'
20
26
  self.user_agent = "Slack Ruby Client/#{Slack::VERSION}"
21
- self.ca_path = `openssl version -a | grep OPENSSLDIR | awk '{print $2}'|sed -e 's/\"//g'`
22
- self.ca_file = "#{ca_path}/ca-certificates.crt"
27
+ self.ca_path = defined?(OpenSSL) ? OpenSSL::X509::DEFAULT_CERT_DIR : nil
28
+ self.ca_file = defined?(OpenSSL) ? OpenSSL::X509::DEFAULT_CERT_FILE : nil
23
29
  self.token = nil
24
30
  self.proxy = nil
25
31
  self.logger = nil
32
+ self.timeout = nil
33
+ self.open_timeout = nil
34
+ self.default_page_size = 100
35
+ self.default_max_retries = 100
36
+ self.adapter = ::Faraday.default_adapter
26
37
  end
27
38
  end
28
39
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Slack
2
3
  module Web
3
4
  module Faraday
@@ -5,24 +6,32 @@ module Slack
5
6
  private
6
7
 
7
8
  def connection
8
- options = {
9
- headers: { 'Accept' => 'application/json; charset=utf-8' }
10
- }
9
+ @connection ||=
10
+ begin
11
+ options = {
12
+ headers: { 'Accept' => 'application/json; charset=utf-8' }
13
+ }
11
14
 
12
- options[:headers]['User-Agent'] = user_agent if user_agent
13
- options[:proxy] = proxy if proxy
14
- options[:ssl] = { ca_path: ca_path, ca_file: ca_file }
15
+ options[:headers]['User-Agent'] = user_agent if user_agent
16
+ options[:proxy] = proxy if proxy
17
+ options[:ssl] = { ca_path: ca_path, ca_file: ca_file } if ca_path || ca_file
15
18
 
16
- ::Faraday::Connection.new(endpoint, options) do |connection|
17
- connection.use ::Faraday::Request::Multipart
18
- connection.use ::Faraday::Request::UrlEncoded
19
- connection.use ::Slack::Web::Faraday::Response::RaiseError
20
- connection.use ::FaradayMiddleware::Mashify, mash_class: Slack::Messages::Message
21
- connection.use ::FaradayMiddleware::ParseJson
22
- connection.use ::Faraday::Response::RaiseError
23
- connection.response :logger, logger if logger
24
- connection.adapter ::Faraday.default_adapter
25
- end
19
+ request_options = {}
20
+ request_options[:timeout] = timeout if timeout
21
+ request_options[:open_timeout] = open_timeout if open_timeout
22
+ options[:request] = request_options if request_options.any?
23
+
24
+ ::Faraday::Connection.new(endpoint, options) do |connection|
25
+ connection.use ::Faraday::Request::Multipart
26
+ connection.use ::Faraday::Request::UrlEncoded
27
+ connection.use ::Slack::Web::Faraday::Response::RaiseError
28
+ connection.use ::FaradayMiddleware::Mashify, mash_class: Slack::Messages::Message
29
+ connection.use ::FaradayMiddleware::ParseJson
30
+ connection.use ::Slack::Web::Faraday::Response::WrapError
31
+ connection.response :logger, logger if logger
32
+ connection.adapter adapter
33
+ end
34
+ end
26
35
  end
27
36
  end
28
37
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module Slack
2
3
  module Web
3
4
  module Faraday
@@ -21,15 +22,17 @@ module Slack
21
22
  private
22
23
 
23
24
  def request(method, path, options)
24
- options = options.merge(token: token)
25
25
  response = connection.send(method) do |request|
26
26
  case method
27
27
  when :get, :delete
28
28
  request.url(path, options)
29
29
  when :post, :put
30
30
  request.path = path
31
+ options.compact!
31
32
  request.body = options unless options.empty?
32
33
  end
34
+ request.headers['Authorization'] = "Bearer #{token}" if token
35
+ request.options.merge!(options.delete(:request)) if options.key?(:request)
33
36
  end
34
37
  response.body
35
38
  end