slack-ruby-client 0.13.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.gitignore +1 -0
  4. data/.rubocop.yml +24 -5
  5. data/.rubocop_todo.yml +100 -54
  6. data/.travis.yml +4 -8
  7. data/CHANGELOG.md +118 -35
  8. data/CONTRIBUTING.md +17 -6
  9. data/Dangerfile +2 -0
  10. data/Gemfile +10 -5
  11. data/LICENSE.md +1 -1
  12. data/README.md +185 -48
  13. data/Rakefile +2 -1
  14. data/UPGRADING.md +30 -2
  15. data/bin/commands.rb +32 -0
  16. data/bin/commands/admin_analytics.rb +16 -0
  17. data/bin/commands/admin_apps.rb +40 -0
  18. data/bin/commands/admin_apps_approved.rb +17 -0
  19. data/bin/commands/admin_apps_requests.rb +16 -0
  20. data/bin/commands/admin_apps_restricted.rb +17 -0
  21. data/bin/commands/admin_barriers.rb +47 -0
  22. data/bin/commands/admin_conversations.rb +159 -0
  23. data/bin/commands/admin_conversations_ekm.rb +17 -0
  24. data/bin/commands/admin_conversations_restrictAccess.rb +37 -0
  25. data/bin/commands/admin_conversations_whitelist.rb +37 -0
  26. data/bin/commands/admin_emoji.rb +54 -0
  27. data/bin/commands/admin_inviteRequests.rb +36 -0
  28. data/bin/commands/admin_inviteRequests_approved.rb +16 -0
  29. data/bin/commands/admin_inviteRequests_denied.rb +16 -0
  30. data/bin/commands/admin_teams.rb +27 -0
  31. data/bin/commands/admin_teams_admins.rb +16 -0
  32. data/bin/commands/admin_teams_owners.rb +16 -0
  33. data/bin/commands/admin_teams_settings.rb +64 -0
  34. data/bin/commands/admin_usergroups.rb +48 -0
  35. data/bin/commands/admin_users.rb +97 -0
  36. data/bin/commands/admin_users_session.rb +38 -0
  37. data/bin/commands/api.rb +1 -1
  38. data/bin/commands/apps.rb +15 -0
  39. data/bin/commands/apps_connections.rb +13 -0
  40. data/bin/commands/apps_event_authorizations.rb +16 -0
  41. data/bin/commands/apps_permissions.rb +1 -0
  42. data/bin/commands/apps_permissions_resources.rb +1 -0
  43. data/bin/commands/apps_permissions_scopes.rb +1 -0
  44. data/bin/commands/apps_permissions_users.rb +1 -0
  45. data/bin/commands/auth.rb +1 -0
  46. data/bin/commands/auth_teams.rb +16 -0
  47. data/bin/commands/bots.rb +2 -0
  48. data/bin/commands/calls.rb +52 -0
  49. data/bin/commands/calls_participants.rb +25 -0
  50. data/bin/commands/channels.rb +1 -153
  51. data/bin/commands/chat.rb +51 -10
  52. data/bin/commands/chat_scheduledMessages.rb +19 -0
  53. data/bin/commands/conversations.rb +16 -3
  54. data/bin/commands/dialog.rb +1 -0
  55. data/bin/commands/dnd.rb +5 -2
  56. data/bin/commands/emoji.rb +1 -0
  57. data/bin/commands/files.rb +8 -17
  58. data/bin/commands/files_comments.rb +1 -21
  59. data/bin/commands/files_remote.rb +78 -0
  60. data/bin/commands/groups.rb +1 -161
  61. data/bin/commands/im.rb +1 -62
  62. data/bin/commands/migration.rb +2 -0
  63. data/bin/commands/mpim.rb +1 -60
  64. data/bin/commands/oauth.rb +2 -1
  65. data/bin/commands/oauth_v2.rb +17 -0
  66. data/bin/commands/pins.rb +1 -4
  67. data/bin/commands/reactions.rb +3 -3
  68. data/bin/commands/reminders.rb +1 -0
  69. data/bin/commands/rtm.rb +1 -0
  70. data/bin/commands/search.rb +4 -0
  71. data/bin/commands/stars.rb +1 -0
  72. data/bin/commands/team.rb +5 -0
  73. data/bin/commands/team_profile.rb +1 -0
  74. data/bin/commands/usergroups.rb +6 -0
  75. data/bin/commands/usergroups_users.rb +3 -0
  76. data/bin/commands/users.rb +5 -3
  77. data/bin/commands/users_admin.rb +1 -0
  78. data/bin/commands/users_prefs.rb +1 -0
  79. data/bin/commands/users_profile.rb +6 -5
  80. data/bin/commands/views.rb +48 -0
  81. data/bin/commands/workflows.rb +38 -0
  82. data/bin/slack +2 -3
  83. data/examples/hi_real_time_and_web/Gemfile +1 -0
  84. data/examples/hi_real_time_and_web/hi.rb +7 -3
  85. data/examples/hi_real_time_async_async/Gemfile +1 -0
  86. data/examples/hi_real_time_async_async/hi.rb +6 -2
  87. data/examples/hi_web/Gemfile +1 -0
  88. data/examples/hi_web/hi.rb +1 -0
  89. data/examples/new_ticket/Gemfile +1 -0
  90. data/examples/new_ticket/new_ticket.rb +1 -0
  91. data/lib/slack-ruby-client.rb +10 -4
  92. data/lib/slack.rb +1 -0
  93. data/lib/slack/config.rb +1 -0
  94. data/lib/slack/events/config.rb +32 -0
  95. data/lib/slack/events/request.rb +70 -0
  96. data/lib/slack/logger.rb +6 -5
  97. data/lib/slack/messages/formatting.rb +1 -0
  98. data/lib/slack/messages/message.rb +1 -4
  99. data/lib/slack/real_time/api/message.rb +3 -1
  100. data/lib/slack/real_time/api/message_id.rb +1 -0
  101. data/lib/slack/real_time/api/ping.rb +5 -2
  102. data/lib/slack/real_time/api/typing.rb +3 -1
  103. data/lib/slack/real_time/client.rb +98 -28
  104. data/lib/slack/real_time/concurrency.rb +1 -2
  105. data/lib/slack/real_time/concurrency/async.rb +79 -6
  106. data/lib/slack/real_time/config.rb +6 -10
  107. data/lib/slack/real_time/models.rb +1 -0
  108. data/lib/slack/real_time/models/base.rb +1 -4
  109. data/lib/slack/real_time/models/bot.rb +1 -0
  110. data/lib/slack/real_time/models/channel.rb +1 -0
  111. data/lib/slack/real_time/models/group.rb +1 -0
  112. data/lib/slack/real_time/models/im.rb +1 -0
  113. data/lib/slack/real_time/models/team.rb +1 -0
  114. data/lib/slack/real_time/models/user.rb +1 -0
  115. data/lib/slack/real_time/socket.rb +44 -15
  116. data/lib/slack/real_time/stores.rb +1 -0
  117. data/lib/slack/real_time/stores/base.rb +4 -1
  118. data/lib/slack/real_time/stores/starter.rb +11 -0
  119. data/lib/slack/real_time/stores/store.rb +28 -25
  120. data/lib/slack/version.rb +2 -1
  121. data/lib/slack/web/api/endpoints.rb +64 -0
  122. data/lib/slack/web/api/endpoints/admin_analytics.rb +28 -0
  123. data/lib/slack/web/api/endpoints/admin_apps.rb +62 -0
  124. data/lib/slack/web/api/endpoints/admin_apps_approved.rb +35 -0
  125. data/lib/slack/web/api/endpoints/admin_apps_requests.rb +33 -0
  126. data/lib/slack/web/api/endpoints/admin_apps_restricted.rb +35 -0
  127. data/lib/slack/web/api/endpoints/admin_barriers.rb +82 -0
  128. data/lib/slack/web/api/endpoints/admin_conversations.rb +246 -0
  129. data/lib/slack/web/api/endpoints/admin_conversations_ekm.rb +35 -0
  130. data/lib/slack/web/api/endpoints/admin_conversations_restrictAccess.rb +61 -0
  131. data/lib/slack/web/api/endpoints/admin_conversations_whitelist.rb +64 -0
  132. data/lib/slack/web/api/endpoints/admin_emoji.rb +88 -0
  133. data/lib/slack/web/api/endpoints/admin_inviteRequests.rb +61 -0
  134. data/lib/slack/web/api/endpoints/admin_inviteRequests_approved.rb +33 -0
  135. data/lib/slack/web/api/endpoints/admin_inviteRequests_denied.rb +33 -0
  136. data/lib/slack/web/api/endpoints/admin_teams.rb +50 -0
  137. data/lib/slack/web/api/endpoints/admin_teams_admins.rb +34 -0
  138. data/lib/slack/web/api/endpoints/admin_teams_owners.rb +34 -0
  139. data/lib/slack/web/api/endpoints/admin_teams_settings.rb +99 -0
  140. data/lib/slack/web/api/endpoints/admin_usergroups.rb +77 -0
  141. data/lib/slack/web/api/endpoints/admin_users.rb +161 -0
  142. data/lib/slack/web/api/endpoints/admin_users_session.rb +66 -0
  143. data/lib/slack/web/api/endpoints/api.rb +1 -2
  144. data/lib/slack/web/api/endpoints/apps.rb +27 -0
  145. data/lib/slack/web/api/endpoints/apps_connections.rb +21 -0
  146. data/lib/slack/web/api/endpoints/apps_event_authorizations.rb +34 -0
  147. data/lib/slack/web/api/endpoints/apps_permissions.rb +1 -0
  148. data/lib/slack/web/api/endpoints/apps_permissions_resources.rb +1 -0
  149. data/lib/slack/web/api/endpoints/apps_permissions_scopes.rb +1 -0
  150. data/lib/slack/web/api/endpoints/apps_permissions_users.rb +1 -0
  151. data/lib/slack/web/api/endpoints/auth.rb +1 -0
  152. data/lib/slack/web/api/endpoints/auth_teams.rb +33 -0
  153. data/lib/slack/web/api/endpoints/bots.rb +3 -0
  154. data/lib/slack/web/api/endpoints/calls.rb +83 -0
  155. data/lib/slack/web/api/endpoints/calls_participants.rb +42 -0
  156. data/lib/slack/web/api/endpoints/channels.rb +2 -243
  157. data/lib/slack/web/api/endpoints/chat.rb +112 -21
  158. data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +40 -0
  159. data/lib/slack/web/api/endpoints/conversations.rb +40 -19
  160. data/lib/slack/web/api/endpoints/dialog.rb +1 -0
  161. data/lib/slack/web/api/endpoints/dnd.rb +7 -1
  162. data/lib/slack/web/api/endpoints/emoji.rb +1 -0
  163. data/lib/slack/web/api/endpoints/files.rb +10 -17
  164. data/lib/slack/web/api/endpoints/files_comments.rb +1 -33
  165. data/lib/slack/web/api/endpoints/files_remote.rb +127 -0
  166. data/lib/slack/web/api/endpoints/groups.rb +1 -253
  167. data/lib/slack/web/api/endpoints/im.rb +1 -101
  168. data/lib/slack/web/api/endpoints/migration.rb +3 -0
  169. data/lib/slack/web/api/endpoints/mpim.rb +1 -96
  170. data/lib/slack/web/api/endpoints/oauth.rb +2 -4
  171. data/lib/slack/web/api/endpoints/oauth_v2.rb +30 -0
  172. data/lib/slack/web/api/endpoints/pins.rb +4 -11
  173. data/lib/slack/web/api/endpoints/reactions.rb +10 -9
  174. data/lib/slack/web/api/endpoints/reminders.rb +1 -0
  175. data/lib/slack/web/api/endpoints/rtm.rb +1 -0
  176. data/lib/slack/web/api/endpoints/search.rb +7 -0
  177. data/lib/slack/web/api/endpoints/stars.rb +3 -2
  178. data/lib/slack/web/api/endpoints/team.rb +9 -0
  179. data/lib/slack/web/api/endpoints/team_profile.rb +1 -0
  180. data/lib/slack/web/api/endpoints/usergroups.rb +11 -0
  181. data/lib/slack/web/api/endpoints/usergroups_users.rb +5 -0
  182. data/lib/slack/web/api/endpoints/users.rb +8 -7
  183. data/lib/slack/web/api/endpoints/users_admin.rb +1 -0
  184. data/lib/slack/web/api/endpoints/users_prefs.rb +1 -0
  185. data/lib/slack/web/api/endpoints/users_profile.rb +4 -3
  186. data/lib/slack/web/api/endpoints/views.rb +97 -0
  187. data/lib/slack/web/api/endpoints/workflows.rb +61 -0
  188. data/lib/slack/web/api/error.rb +1 -0
  189. data/lib/slack/web/api/errors.rb +848 -0
  190. data/lib/slack/web/api/errors/internal_error.rb +14 -0
  191. data/lib/slack/web/api/errors/slack_error.rb +14 -1
  192. data/lib/slack/web/api/errors/too_many_requests_error.rb +1 -0
  193. data/lib/slack/web/api/mixins.rb +2 -0
  194. data/lib/slack/web/api/mixins/channels.id.rb +2 -3
  195. data/lib/slack/web/api/mixins/conversations.id.rb +25 -0
  196. data/lib/slack/web/api/mixins/groups.id.rb +2 -3
  197. data/lib/slack/web/api/mixins/ids.id.rb +3 -2
  198. data/lib/slack/web/api/mixins/users.id.rb +2 -3
  199. data/lib/slack/web/api/mixins/users.search.rb +1 -0
  200. data/lib/slack/web/api/patches/chat.1.patch +71 -0
  201. data/lib/slack/web/api/patches/views.1.view-json.patch +40 -0
  202. data/lib/slack/web/api/patches/views.1.views-published.patch +16 -0
  203. data/lib/slack/web/api/templates/command.erb +1 -0
  204. data/lib/slack/web/api/templates/commands.erb +1 -0
  205. data/lib/slack/web/api/templates/endpoints.erb +2 -0
  206. data/lib/slack/web/api/templates/errors.erb +20 -0
  207. data/lib/slack/web/api/templates/method.erb +5 -1
  208. data/lib/slack/web/api/templates/method_spec.erb +2 -1
  209. data/lib/slack/web/client.rb +2 -1
  210. data/lib/slack/web/config.rb +3 -0
  211. data/lib/slack/web/faraday/connection.rb +24 -20
  212. data/lib/slack/web/faraday/request.rb +1 -0
  213. data/lib/slack/web/faraday/response/raise_error.rb +21 -6
  214. data/lib/slack/web/faraday/response/wrap_error.rb +24 -0
  215. data/lib/slack/web/pagination/cursor.rb +6 -2
  216. data/lib/slack_ruby_client.rb +1 -0
  217. data/lib/tasks/git.rake +1 -0
  218. data/lib/tasks/real_time.rake +15 -5
  219. data/lib/tasks/update.rake +1 -0
  220. data/lib/tasks/web.rake +39 -10
  221. data/screenshots/create-app.png +0 -0
  222. data/slack-ruby-client.gemspec +8 -4
  223. data/spec/fixtures/slack/web/channels_info.yml +108 -15
  224. data/spec/fixtures/slack/web/{groups_info.yml → conversations_info.yml} +4 -4
  225. data/spec/fixtures/slack/web/conversations_setTopic.yml +69 -0
  226. data/spec/fixtures/slack/web/conversations_setTopic_one_page.yml +142 -0
  227. data/spec/fixtures/slack/web/conversations_setTopic_paginated.yml +208 -0
  228. data/spec/fixtures/slack/web/views_open_error.yml +76 -0
  229. data/spec/integration/integration_spec.rb +116 -49
  230. data/spec/slack/config_spec.rb +2 -0
  231. data/spec/slack/events/config_spec.rb +33 -0
  232. data/spec/slack/events/request_spec.rb +184 -0
  233. data/spec/slack/messages/formatting_spec.rb +25 -13
  234. data/spec/slack/real_time/api/message_spec.rb +6 -1
  235. data/spec/slack/real_time/api/ping_spec.rb +2 -0
  236. data/spec/slack/real_time/api/typing_spec.rb +5 -1
  237. data/spec/slack/real_time/client_spec.rb +228 -30
  238. data/spec/slack/real_time/concurrency/it_behaves_like_a_realtime_socket.rb +2 -0
  239. data/spec/slack/real_time/concurrency/with_concurrency_spec.rb +10 -0
  240. data/spec/slack/real_time/concurrency/without_concurrency_spec.rb +10 -0
  241. data/spec/slack/real_time/event_handlers/bot_spec.rb +2 -1
  242. data/spec/slack/real_time/event_handlers/channel_spec.rb +9 -6
  243. data/spec/slack/real_time/event_handlers/event_handlers_spec.rb +2 -1
  244. data/spec/slack/real_time/event_handlers/group_spec.rb +5 -4
  245. data/spec/slack/real_time/event_handlers/im_spec.rb +4 -3
  246. data/spec/slack/real_time/event_handlers/team_spec.rb +3 -1
  247. data/spec/slack/real_time/event_handlers/user_spec.rb +1 -0
  248. data/spec/slack/real_time/rtm_connect_spec.rb +2 -1
  249. data/spec/slack/real_time/rtm_start_spec.rb +2 -1
  250. data/spec/slack/real_time/store_spec.rb +2 -1
  251. data/spec/slack/slack_spec.rb +37 -5
  252. data/spec/slack/version_spec.rb +2 -1
  253. data/spec/slack/web/api/endpoints/admin_analytics_spec.rb +13 -0
  254. data/spec/slack/web/api/endpoints/admin_apps_approved_spec.rb +8 -0
  255. data/spec/slack/web/api/endpoints/admin_apps_requests_spec.rb +8 -0
  256. data/spec/slack/web/api/endpoints/admin_apps_restricted_spec.rb +8 -0
  257. data/spec/slack/web/api/endpoints/admin_apps_spec.rb +13 -0
  258. data/spec/slack/web/api/endpoints/admin_barriers_spec.rb +38 -0
  259. data/spec/slack/web/api/endpoints/admin_conversations_ekm_spec.rb +8 -0
  260. data/spec/slack/web/api/endpoints/admin_conversations_restrictAccess_spec.rb +32 -0
  261. data/spec/slack/web/api/endpoints/admin_conversations_spec.rb +93 -0
  262. data/spec/slack/web/api/endpoints/admin_emoji_spec.rb +37 -0
  263. data/spec/slack/web/api/endpoints/admin_inviteRequests_approved_spec.rb +8 -0
  264. data/spec/slack/web/api/endpoints/admin_inviteRequests_denied_spec.rb +8 -0
  265. data/spec/slack/web/api/endpoints/admin_inviteRequests_spec.rb +18 -0
  266. data/spec/slack/web/api/endpoints/admin_teams_admins_spec.rb +13 -0
  267. data/spec/slack/web/api/endpoints/admin_teams_owners_spec.rb +13 -0
  268. data/spec/slack/web/api/endpoints/admin_teams_settings_spec.rb +53 -0
  269. data/spec/slack/web/api/endpoints/admin_teams_spec.rb +16 -0
  270. data/spec/slack/web/api/endpoints/admin_usergroups_spec.rb +37 -0
  271. data/spec/slack/web/api/endpoints/admin_users_session_spec.rb +21 -0
  272. data/spec/slack/web/api/endpoints/admin_users_spec.rb +67 -0
  273. data/spec/slack/web/api/endpoints/api_spec.rb +1 -0
  274. data/spec/slack/web/api/endpoints/apps_connections_spec.rb +8 -0
  275. data/spec/slack/web/api/endpoints/apps_event_authorizations_spec.rb +13 -0
  276. data/spec/slack/web/api/endpoints/apps_permissions_resources_spec.rb +1 -0
  277. data/spec/slack/web/api/endpoints/apps_permissions_scopes_spec.rb +1 -0
  278. data/spec/slack/web/api/endpoints/apps_permissions_spec.rb +3 -2
  279. data/spec/slack/web/api/endpoints/apps_permissions_users_spec.rb +4 -3
  280. data/spec/slack/web/api/endpoints/apps_spec.rb +16 -0
  281. data/spec/slack/web/api/endpoints/auth_teams_spec.rb +8 -0
  282. data/spec/slack/web/api/endpoints/bots_spec.rb +1 -0
  283. data/spec/slack/web/api/endpoints/calls_participants_spec.rb +24 -0
  284. data/spec/slack/web/api/endpoints/calls_spec.rb +31 -0
  285. data/spec/slack/web/api/endpoints/chat_scheduledMessages_spec.rb +8 -0
  286. data/spec/slack/web/api/endpoints/conversations_spec.rb +21 -12
  287. data/spec/slack/web/api/endpoints/custom_specs/auth_spec.rb +5 -1
  288. data/spec/slack/web/api/endpoints/custom_specs/chat_spec.rb +112 -36
  289. data/spec/slack/web/api/endpoints/custom_specs/conversations_spec.rb +13 -0
  290. data/spec/slack/web/api/endpoints/custom_specs/dialog_spec.rb +12 -4
  291. data/spec/slack/web/api/endpoints/custom_specs/users_spec.rb +6 -1
  292. data/spec/slack/web/api/endpoints/custom_specs/views_spec.rb +95 -0
  293. data/spec/slack/web/api/endpoints/dnd_spec.rb +6 -0
  294. data/spec/slack/web/api/endpoints/emoji_spec.rb +1 -0
  295. data/spec/slack/web/api/endpoints/files_comments_spec.rb +3 -21
  296. data/spec/slack/web/api/endpoints/files_remote_spec.rb +24 -0
  297. data/spec/slack/web/api/endpoints/files_spec.rb +5 -4
  298. data/spec/slack/web/api/endpoints/im_spec.rb +1 -31
  299. data/spec/slack/web/api/endpoints/migration_spec.rb +1 -0
  300. data/spec/slack/web/api/endpoints/mpim_spec.rb +1 -31
  301. data/spec/slack/web/api/endpoints/oauth_spec.rb +4 -14
  302. data/spec/slack/web/api/endpoints/oauth_v2_spec.rb +13 -0
  303. data/spec/slack/web/api/endpoints/pins_spec.rb +1 -0
  304. data/spec/slack/web/api/endpoints/reactions_spec.rb +8 -1
  305. data/spec/slack/web/api/endpoints/reminders_spec.rb +3 -2
  306. data/spec/slack/web/api/endpoints/rtm_spec.rb +1 -0
  307. data/spec/slack/web/api/endpoints/search_spec.rb +1 -0
  308. data/spec/slack/web/api/endpoints/stars_spec.rb +1 -0
  309. data/spec/slack/web/api/endpoints/team_profile_spec.rb +1 -0
  310. data/spec/slack/web/api/endpoints/team_spec.rb +1 -0
  311. data/spec/slack/web/api/endpoints/usergroups_spec.rb +1 -0
  312. data/spec/slack/web/api/endpoints/usergroups_users_spec.rb +3 -2
  313. data/spec/slack/web/api/endpoints/users_admin_spec.rb +1 -0
  314. data/spec/slack/web/api/endpoints/users_prefs_spec.rb +1 -0
  315. data/spec/slack/web/api/endpoints/users_profile_spec.rb +1 -0
  316. data/spec/slack/web/api/endpoints/workflows_spec.rb +26 -0
  317. data/spec/slack/web/api/error_spec.rb +4 -2
  318. data/spec/slack/web/api/errors/slack_error_spec.rb +26 -2
  319. data/spec/slack/web/api/mixins/channels_spec.rb +17 -7
  320. data/spec/slack/web/api/mixins/conversations_list_spec.rb +21 -0
  321. data/spec/slack/web/api/mixins/conversations_spec.rb +43 -0
  322. data/spec/slack/web/api/mixins/groups_spec.rb +17 -7
  323. data/spec/slack/web/api/mixins/users_spec.rb +17 -8
  324. data/spec/slack/web/api/pagination/cursor_spec.rb +40 -10
  325. data/spec/slack/web/client_spec.rb +166 -18
  326. data/spec/slack/web/faraday/response/raise_error_spec.rb +47 -12
  327. data/spec/spec_helper.rb +8 -1
  328. data/spec/support/queue_with_timeout.rb +5 -4
  329. data/spec/support/real_time/concurrency/mock.rb +1 -0
  330. data/spec/support/real_time/connected_client.rb +9 -3
  331. data/spec/support/real_time/event.rb +1 -0
  332. data/spec/support/token.rb +1 -0
  333. data/spec/support/vcr.rb +5 -0
  334. metadata +226 -52
  335. data/examples/hi_real_time/Gemfile +0 -5
  336. data/examples/hi_real_time/hi.gif +0 -0
  337. data/examples/hi_real_time/hi.rb +0 -37
  338. data/examples/hi_real_time_async_celluloid/Gemfile +0 -6
  339. data/examples/hi_real_time_async_celluloid/Procfile +0 -2
  340. data/examples/hi_real_time_async_celluloid/hi.rb +0 -35
  341. data/examples/hi_real_time_async_eventmachine/Gemfile +0 -6
  342. data/examples/hi_real_time_async_eventmachine/Procfile +0 -2
  343. data/examples/hi_real_time_async_eventmachine/hi.rb +0 -35
  344. data/lib/slack/real_time/concurrency/celluloid.rb +0 -103
  345. data/lib/slack/real_time/concurrency/eventmachine.rb +0 -66
  346. data/lib/slack/web/api/patches/chat.1.text-attachments-required.patch +0 -13
  347. data/lib/slack/web/api/patches/chat.2.attachments-json.patch +0 -17
  348. data/lib/slack/web/api/patches/chat.3.update-attachments-support.patch +0 -21
  349. data/lib/slack/web/api/patches/chat.4.postEphemeral-attachments-support.patch +0 -17
  350. data/lib/slack/web/api/patches/chat.5.postEphemeral-text-or-attachments.patch +0 -13
  351. data/screenshots/register-bot.png +0 -0
  352. data/spec/slack/real_time/concurrency/celluloid_spec.rb +0 -106
  353. data/spec/slack/real_time/concurrency/eventmachine_spec.rb +0 -47
  354. data/spec/slack/web/api/endpoints/custom_specs/channels_spec.rb +0 -11
  355. data/spec/slack/web/api/endpoints/custom_specs/groups_spec.rb +0 -11
  356. data/spec/slack/web/api/errors/service_unavailable_spec.rb +0 -14
@@ -1,11 +1,14 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  RSpec.describe Slack::Web::Client do
4
5
  before do
5
6
  Slack::Config.reset
6
7
  end
8
+
7
9
  context 'with defaults' do
8
- let(:client) { Slack::Web::Client.new }
10
+ let(:client) { described_class.new }
11
+
9
12
  describe '#initialize' do
10
13
  it 'sets user-agent' do
11
14
  expect(client.user_agent).to eq Slack::Web::Config.user_agent
@@ -18,30 +21,36 @@ RSpec.describe Slack::Web::Client do
18
21
  end
19
22
  end
20
23
  end
24
+
21
25
  context 'with custom settings' do
22
26
  describe '#initialize' do
23
27
  Slack::Web::Config::ATTRIBUTES.each do |key|
24
- context key do
25
- let(:client) { Slack::Web::Client.new(key => 'custom') }
28
+ context key.to_s do
29
+ let(:client) { described_class.new(key => 'custom') }
30
+
26
31
  it "sets #{key}" do
27
- expect(client.send(key)).to_not eq Slack::Web::Config.send(key)
32
+ expect(client.send(key)).not_to eq Slack::Web::Config.send(key)
28
33
  expect(client.send(key)).to eq 'custom'
29
34
  end
30
35
  end
31
36
  end
32
37
  end
33
38
  end
39
+
34
40
  context 'global config' do
35
41
  after do
36
- Slack::Web::Client.config.reset
42
+ described_class.config.reset
37
43
  end
38
- let(:client) { Slack::Web::Client.new }
44
+
45
+ let(:client) { described_class.new }
46
+
39
47
  context 'user-agent' do
40
48
  before do
41
- Slack::Web::Client.configure do |config|
49
+ described_class.configure do |config|
42
50
  config.user_agent = 'custom/user-agent'
43
51
  end
44
52
  end
53
+
45
54
  describe '#initialize' do
46
55
  it 'sets user-agent' do
47
56
  expect(client.user_agent).to eq 'custom/user-agent'
@@ -54,38 +63,43 @@ RSpec.describe Slack::Web::Client do
54
63
  end
55
64
  end
56
65
  end
66
+
57
67
  context 'token' do
58
68
  before do
59
69
  Slack.configure do |config|
60
70
  config.token = 'global default'
61
71
  end
62
72
  end
73
+
63
74
  it 'defaults token to global default' do
64
- client = Slack::Web::Client.new
75
+ client = described_class.new
65
76
  expect(client.token).to eq 'global default'
66
77
  end
67
78
  context 'with web config' do
68
79
  before do
69
- Slack::Web::Client.configure do |config|
80
+ described_class.configure do |config|
70
81
  config.token = 'custom web token'
71
82
  end
72
83
  end
84
+
73
85
  it 'overrides token to web config' do
74
- client = Slack::Web::Client.new
86
+ client = described_class.new
75
87
  expect(client.token).to eq 'custom web token'
76
88
  end
77
89
  it 'overrides token to specific token' do
78
- client = Slack::Web::Client.new(token: 'local token')
90
+ client = described_class.new(token: 'local token')
79
91
  expect(client.token).to eq 'local token'
80
92
  end
81
93
  end
82
94
  end
95
+
83
96
  context 'proxy' do
84
97
  before do
85
- Slack::Web::Client.configure do |config|
98
+ described_class.configure do |config|
86
99
  config.proxy = 'http://localhost:8080'
87
100
  end
88
101
  end
102
+
89
103
  describe '#initialize' do
90
104
  it 'sets proxy' do
91
105
  expect(client.proxy).to eq 'http://localhost:8080'
@@ -95,13 +109,15 @@ RSpec.describe Slack::Web::Client do
95
109
  end
96
110
  end
97
111
  end
112
+
98
113
  context 'SSL options' do
99
114
  before do
100
- Slack::Web::Client.configure do |config|
115
+ described_class.configure do |config|
101
116
  config.ca_path = '/ca_path'
102
117
  config.ca_file = '/ca_file'
103
118
  end
104
119
  end
120
+
105
121
  describe '#initialize' do
106
122
  it 'sets ca_path and ca_file' do
107
123
  expect(client.ca_path).to eq '/ca_path'
@@ -114,13 +130,16 @@ RSpec.describe Slack::Web::Client do
114
130
  end
115
131
  end
116
132
  end
133
+
117
134
  context 'logger option' do
118
135
  let(:logger) { Logger.new(STDOUT) }
136
+
119
137
  before do
120
- Slack::Web::Client.configure do |config|
138
+ described_class.configure do |config|
121
139
  config.logger = logger
122
140
  end
123
141
  end
142
+
124
143
  describe '#initialize' do
125
144
  it 'sets logger' do
126
145
  expect(client.logger).to eq logger
@@ -130,13 +149,59 @@ RSpec.describe Slack::Web::Client do
130
149
  end
131
150
  end
132
151
  end
152
+
153
+ context 'adapter option' do
154
+ let(:adapter) { Faraday.default_adapter }
155
+ let(:adapter_class) { Faraday::Adapter::NetHttp }
156
+
157
+ around do |ex|
158
+ previous_adapter = Faraday.default_adapter
159
+ # ensure default adapter is set for this spec
160
+ Faraday.default_adapter = :net_http
161
+ ex.run
162
+ Faraday.default_adapter = previous_adapter
163
+ end
164
+
165
+ context 'default adapter' do
166
+ describe '#initialize' do
167
+ it 'sets adapter' do
168
+ expect(client.adapter).to eq adapter
169
+ end
170
+ it 'creates a connection with an adapter' do
171
+ expect(client.send(:connection).adapter).to eq adapter_class
172
+ end
173
+ end
174
+ end
175
+
176
+ context 'non default adapter' do
177
+ let(:adapter) { :typhoeus }
178
+ let(:adapter_class) { Faraday::Adapter::Typhoeus }
179
+
180
+ before do
181
+ described_class.configure do |config|
182
+ config.adapter = adapter
183
+ end
184
+ end
185
+
186
+ describe '#initialize' do
187
+ it 'sets adapter' do
188
+ expect(client.adapter).to eq adapter
189
+ end
190
+ it 'creates a connection with an adapter' do
191
+ expect(client.send(:connection).adapter).to eq adapter_class
192
+ end
193
+ end
194
+ end
195
+ end
196
+
133
197
  context 'timeout options' do
134
198
  before do
135
- Slack::Web::Client.configure do |config|
199
+ described_class.configure do |config|
136
200
  config.timeout = 10
137
201
  config.open_timeout = 15
138
202
  end
139
203
  end
204
+
140
205
  describe '#initialize' do
141
206
  it 'sets timeout and open_timeout' do
142
207
  expect(client.timeout).to eq 10
@@ -149,13 +214,15 @@ RSpec.describe Slack::Web::Client do
149
214
  end
150
215
  end
151
216
  end
217
+
152
218
  context 'per-request options' do
153
219
  it 'applies timeout', vcr: { cassette_name: 'web/rtm_start', allow_playback_repeats: true } do
154
220
  # reuse the same connection for the test, otherwise it creates a new one every time
155
221
  conn = client.send(:connection)
156
222
  expect(client).to receive(:connection).and_return(conn)
157
223
 
158
- # get the yielded request to reuse in the next call to rtm_start so that we can examine request.options later
224
+ # get the yielded request to reuse in the next call to
225
+ # rtm_start so that we can examine request.options later
159
226
  request = nil
160
227
  response = conn.post do |r|
161
228
  r.path = 'rtm.start'
@@ -170,13 +237,94 @@ RSpec.describe Slack::Web::Client do
170
237
  expect(request.options.timeout).to eq 3
171
238
  end
172
239
  end
240
+
173
241
  context 'calling undocumented methods' do
174
- let(:client) { Slack::Web::Client.new }
242
+ let(:client) { described_class.new }
243
+
175
244
  it 'produces a warning' do
176
- expect(client.logger).to receive(:warn).with('The users.admin.setInactive method is undocumented.')
245
+ expect(client.logger).to(
246
+ receive(:warn).with('The users.admin.setInactive method is undocumented.')
247
+ )
177
248
  expect(client).to receive(:post)
178
249
  client.users_admin_setInactive(user: 'U092BDCLV')
179
250
  end
180
251
  end
252
+
253
+ context 'persistent capability' do
254
+ describe '#initialize' do
255
+ it 'caches the Faraday connection to allow persistent adapters' do
256
+ first = client.send(:connection)
257
+ second = client.send(:connection)
258
+
259
+ expect(first).to equal second
260
+ end
261
+ end
262
+ end
263
+
264
+ context 'server failures' do
265
+ subject(:request) { client.api_test }
266
+
267
+ let(:stub_slack_request) { stub_request(:post, 'https://slack.com/api/api.test') }
268
+ let(:exception) do
269
+ begin
270
+ request
271
+ rescue Slack::Web::Api::Errors::ServerError => e
272
+ return e
273
+ end
274
+ end
275
+
276
+ context 'parsing error' do
277
+ before { stub_slack_request.to_return(body: '<html></html>') }
278
+
279
+ it 'raises ParsingError' do
280
+ expect { request }.to raise_error(Slack::Web::Api::Errors::ParsingError).with_message('parsing_error')
281
+ expect(exception.response.body).to eq('<html></html>')
282
+ expect(exception.cause).to be_a(Faraday::ParsingError)
283
+ expect(exception.cause.cause.cause).to be_a(JSON::ParserError)
284
+ end
285
+ end
286
+
287
+ context 'timeout' do
288
+ context 'open timeout' do
289
+ before { stub_slack_request.to_timeout }
290
+
291
+ it 'raises TimoutError' do
292
+ expect { request }.to raise_error(Slack::Web::Api::Errors::TimeoutError).with_message('timeout_error')
293
+ expect(exception.cause).to be_a(Faraday::ConnectionFailed)
294
+ expect(exception.cause.cause).to be_a(Net::OpenTimeout)
295
+ end
296
+ end
297
+
298
+ context 'read timeout' do
299
+ before { stub_slack_request.to_raise(Net::ReadTimeout) }
300
+
301
+ it 'raises TimeoutError' do
302
+ expect { request }.to raise_error(Slack::Web::Api::Errors::TimeoutError).with_message('timeout_error')
303
+ expect(exception.cause).to be_a(Faraday::TimeoutError)
304
+ expect(exception.cause.cause).to be_a(Net::ReadTimeout)
305
+ end
306
+ end
307
+ end
308
+
309
+ context '5xx response' do
310
+ context 'with a JSON body' do
311
+ before { stub_slack_request.to_return(status: 500, body: '{}') }
312
+
313
+ it 'raises UnavailableError' do
314
+ expect { request }.to raise_error(Slack::Web::Api::Errors::UnavailableError).with_message('unavailable_error')
315
+ expect(exception.response.status).to eq(500)
316
+ end
317
+ end
318
+
319
+ context 'with a HTML response' do
320
+ before { stub_slack_request.to_return(status: 500, body: '<html></html>') }
321
+
322
+ it 'raises UnavailableError' do
323
+ expect { request }.to raise_error(Slack::Web::Api::Errors::UnavailableError).with_message('unavailable_error')
324
+ expect(exception.response.status).to eq(500)
325
+ end
326
+ end
327
+ end
328
+ end
181
329
  end
182
330
  end
@@ -1,18 +1,23 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  RSpec.describe Slack::Web::Faraday::Response::RaiseError do
4
- describe '#on_complete' do
5
- let(:subject) { described_class.new }
6
- let(:status) { 200 }
7
- let(:response) { nil }
8
- let(:body) { {} }
9
- let(:env) { double status: status, response: response, body: body }
5
+ subject(:raise_error_obj) { described_class.new(app) }
6
+
7
+ let(:app) { proc {} }
8
+ let(:status) { 200 }
9
+ let(:response) { nil }
10
+ let(:body) { {} }
11
+ let(:env) { double status: status, response: response, body: body, success?: true }
10
12
 
13
+ describe '#on_complete' do
11
14
  context 'with status of 429' do
12
15
  let(:status) { 429 }
13
16
 
14
17
  it 'raises a TooManyRequestsError' do
15
- expect { subject.on_complete(env) }.to raise_error(Slack::Web::Api::Errors::TooManyRequestsError)
18
+ expect { raise_error_obj.on_complete(env) }.to(
19
+ raise_error(Slack::Web::Api::Errors::TooManyRequestsError)
20
+ )
16
21
  end
17
22
  end
18
23
 
@@ -20,21 +25,46 @@ RSpec.describe Slack::Web::Faraday::Response::RaiseError do
20
25
  let(:body) { { 'ok' => 'true' } }
21
26
 
22
27
  it 'is nil' do
23
- expect(subject.on_complete(env)).to eq nil
28
+ expect(raise_error_obj.on_complete(env)).to eq nil
24
29
  end
25
30
  end
26
31
 
27
- context 'with a single error in the body' do
28
- let(:body) { { 'error' => 'already_in_channel' } }
32
+ context 'with a single known error in the body' do
33
+ let(:body) do
34
+ {
35
+ 'ok' => false,
36
+ 'error' => 'already_in_channel',
37
+ 'response_metadata' => { 'messages' => [] }
38
+ }
39
+ end
40
+
41
+ it 'raises an error of the matching type with the error message' do
42
+ expect { raise_error_obj.on_complete(env) }.to(
43
+ raise_error(Slack::Web::Api::Errors::AlreadyInChannel, 'already_in_channel')
44
+ )
45
+ end
46
+ end
47
+
48
+ context 'with a single unknown error in the body' do
49
+ let(:body) do
50
+ {
51
+ 'ok' => false,
52
+ 'error' => 'unknown_error',
53
+ 'response_metadata' => { 'messages' => [] }
54
+ }
55
+ end
29
56
 
30
57
  it 'raises a SlackError with the error message' do
31
- expect { subject.on_complete(env) }.to raise_error(Slack::Web::Api::Errors::SlackError, 'already_in_channel')
58
+ expect { raise_error_obj.on_complete(env) }.to(
59
+ raise_error(Slack::Web::Api::Errors::SlackError, 'unknown_error')
60
+ )
32
61
  end
33
62
  end
34
63
 
35
64
  context 'with multiple errors in the body' do
36
65
  let(:body) do
37
66
  {
67
+ 'ok' => false,
38
68
  'errors' => [
39
69
  { 'error' => 'already_in_channel' },
40
70
  { 'error' => 'something_else_terrible' }
@@ -43,7 +73,12 @@ RSpec.describe Slack::Web::Faraday::Response::RaiseError do
43
73
  end
44
74
 
45
75
  it 'raises a SlackError with the concatenated error messages' do
46
- expect { subject.on_complete(env) }.to raise_error(Slack::Web::Api::Errors::SlackError, 'already_in_channel,something_else_terrible')
76
+ expect { raise_error_obj.on_complete(env) }.to(
77
+ raise_error(
78
+ Slack::Web::Api::Errors::SlackError,
79
+ 'already_in_channel,something_else_terrible'
80
+ )
81
+ )
47
82
  end
48
83
  end
49
84
  end
data/spec/spec_helper.rb CHANGED
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
1
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..'))
2
3
 
3
4
  require 'rubygems'
4
5
  require 'rspec'
6
+ require 'timecop'
5
7
 
6
- require 'slack-ruby-client'
8
+ require 'slack_ruby_client'
7
9
 
8
10
  Dir[File.join(File.dirname(__FILE__), 'support', '**/*.rb')].each do |file|
9
11
  require file
@@ -12,3 +14,8 @@ end
12
14
  Slack.configure do |config|
13
15
  config.token = ENV['SLACK_API_TOKEN']
14
16
  end
17
+
18
+ RSpec.configure do |config|
19
+ # Enable flags like --only-failures and --next-failure
20
+ config.example_status_persistence_file_path = '.rspec_status'
21
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # http://spin.atomicobject.com/2014/07/07/ruby-queue-pop-timeout/
2
3
  class QueueWithTimeout
3
4
  def initialize
@@ -6,15 +7,15 @@ class QueueWithTimeout
6
7
  @recieved = ConditionVariable.new
7
8
  end
8
9
 
9
- def push(x)
10
+ def push(item)
10
11
  @mutex.synchronize do
11
- @queue << x
12
+ @queue << item
12
13
  @recieved.signal
13
14
  end
14
15
  end
15
16
 
16
- def <<(x)
17
- push(x)
17
+ def <<(item)
18
+ push(item)
18
19
  end
19
20
 
20
21
  def pop(non_block = false)