slack-ruby-client 0.11.1 → 1.1.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 (392) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.github/workflows/danger.yml +19 -0
  4. data/.github/workflows/integtest.yml +25 -0
  5. data/.github/workflows/rubocop.yml +13 -0
  6. data/.github/workflows/test.yml +34 -0
  7. data/.gitignore +6 -3
  8. data/.rubocop.yml +36 -2
  9. data/.rubocop_todo.yml +186 -54
  10. data/CHANGELOG.md +156 -31
  11. data/CONTRIBUTING.md +20 -9
  12. data/Dangerfile +2 -0
  13. data/Gemfile +27 -6
  14. data/Gemfile.danger +6 -0
  15. data/LICENSE.md +1 -1
  16. data/README.md +199 -52
  17. data/RELEASING.md +2 -2
  18. data/Rakefile +2 -1
  19. data/UPGRADING.md +89 -3
  20. data/bin/commands/admin_analytics.rb +16 -0
  21. data/bin/commands/admin_apps.rb +51 -0
  22. data/bin/commands/admin_apps_approved.rb +17 -0
  23. data/bin/commands/admin_apps_requests.rb +28 -0
  24. data/bin/commands/admin_apps_restricted.rb +17 -0
  25. data/bin/commands/admin_auth_policy.rb +39 -0
  26. data/bin/commands/admin_barriers.rb +47 -0
  27. data/bin/commands/admin_conversations.rb +170 -0
  28. data/bin/commands/admin_conversations_ekm.rb +17 -0
  29. data/bin/commands/admin_conversations_restrictAccess.rb +37 -0
  30. data/bin/commands/admin_conversations_whitelist.rb +37 -0
  31. data/bin/commands/admin_emoji.rb +54 -0
  32. data/bin/commands/admin_inviteRequests.rb +36 -0
  33. data/bin/commands/admin_inviteRequests_approved.rb +16 -0
  34. data/bin/commands/admin_inviteRequests_denied.rb +16 -0
  35. data/bin/commands/admin_teams.rb +27 -0
  36. data/bin/commands/admin_teams_admins.rb +16 -0
  37. data/bin/commands/admin_teams_owners.rb +16 -0
  38. data/bin/commands/admin_teams_settings.rb +64 -0
  39. data/bin/commands/admin_usergroups.rb +48 -0
  40. data/bin/commands/admin_users.rb +98 -0
  41. data/bin/commands/admin_users_session.rb +78 -0
  42. data/bin/commands/admin_users_unsupportedVersions.rb +15 -0
  43. data/bin/commands/api.rb +1 -1
  44. data/bin/commands/apps.rb +15 -0
  45. data/bin/commands/apps_connections.rb +13 -0
  46. data/bin/commands/apps_event_authorizations.rb +16 -0
  47. data/bin/commands/apps_manifest.rb +52 -0
  48. data/bin/commands/apps_permissions.rb +1 -0
  49. data/bin/commands/apps_permissions_resources.rb +15 -0
  50. data/bin/commands/apps_permissions_scopes.rb +13 -0
  51. data/bin/commands/apps_permissions_users.rb +26 -0
  52. data/bin/commands/auth.rb +1 -0
  53. data/bin/commands/auth_teams.rb +16 -0
  54. data/bin/commands/bookmarks.rb +52 -0
  55. data/bin/commands/bots.rb +2 -0
  56. data/bin/commands/calls.rb +52 -0
  57. data/bin/commands/calls_participants.rb +25 -0
  58. data/bin/commands/channels.rb +1 -153
  59. data/bin/commands/chat.rb +57 -12
  60. data/bin/commands/chat_scheduledMessages.rb +19 -0
  61. data/bin/commands/conversations.rb +75 -4
  62. data/bin/commands/dialog.rb +1 -0
  63. data/bin/commands/dnd.rb +6 -3
  64. data/bin/commands/emoji.rb +1 -0
  65. data/bin/commands/files.rb +14 -19
  66. data/bin/commands/files_comments.rb +1 -21
  67. data/bin/commands/files_remote.rb +78 -0
  68. data/bin/commands/groups.rb +1 -159
  69. data/bin/commands/im.rb +1 -62
  70. data/bin/commands/migration.rb +2 -0
  71. data/bin/commands/mpim.rb +1 -58
  72. data/bin/commands/oauth.rb +4 -15
  73. data/bin/commands/oauth_v2.rb +29 -0
  74. data/bin/commands/openid_connect.rb +27 -0
  75. data/bin/commands/pins.rb +3 -6
  76. data/bin/commands/reactions.rb +5 -3
  77. data/bin/commands/reminders.rb +7 -0
  78. data/bin/commands/rtm.rb +7 -4
  79. data/bin/commands/search.rb +8 -3
  80. data/bin/commands/stars.rb +10 -6
  81. data/bin/commands/team.rb +6 -0
  82. data/bin/commands/team_billing.rb +13 -0
  83. data/bin/commands/team_preferences.rb +13 -0
  84. data/bin/commands/team_profile.rb +1 -0
  85. data/bin/commands/tooling_tokens.rb +14 -0
  86. data/bin/commands/usergroups.rb +7 -1
  87. data/bin/commands/usergroups_users.rb +3 -0
  88. data/bin/commands/users.rb +21 -6
  89. data/bin/commands/users_admin.rb +1 -0
  90. data/bin/commands/users_prefs.rb +1 -0
  91. data/bin/commands/users_profile.rb +7 -6
  92. data/bin/commands/views.rb +48 -0
  93. data/bin/commands/workflows.rb +38 -0
  94. data/bin/commands.rb +40 -5
  95. data/bin/slack +2 -3
  96. data/examples/hi_real_time_and_web/Gemfile +1 -0
  97. data/examples/hi_real_time_and_web/hi.rb +7 -3
  98. data/examples/{hi_real_time_async_eventmachine → hi_real_time_async_async}/Gemfile +2 -1
  99. data/examples/{hi_real_time_async_celluloid → hi_real_time_async_async}/Procfile +0 -0
  100. data/examples/{hi_real_time_async_celluloid → hi_real_time_async_async}/hi.rb +12 -7
  101. data/examples/hi_web/Gemfile +1 -0
  102. data/examples/hi_web/hi.rb +1 -0
  103. data/examples/new_ticket/Gemfile +1 -0
  104. data/examples/new_ticket/new_ticket.rb +1 -0
  105. data/lib/slack/config.rb +2 -2
  106. data/lib/slack/events/config.rb +32 -0
  107. data/lib/slack/events/request.rb +72 -0
  108. data/lib/slack/logger.rb +6 -5
  109. data/lib/slack/messages/formatting.rb +1 -1
  110. data/lib/slack/messages/message.rb +1 -4
  111. data/lib/slack/real_time/api/message.rb +3 -1
  112. data/lib/slack/real_time/api/message_id.rb +1 -0
  113. data/lib/slack/real_time/api/ping.rb +5 -2
  114. data/lib/slack/real_time/api/typing.rb +3 -1
  115. data/lib/slack/real_time/client.rb +103 -34
  116. data/lib/slack/real_time/concurrency/async.rb +138 -0
  117. data/lib/slack/real_time/concurrency.rb +2 -2
  118. data/lib/slack/real_time/config.rb +6 -10
  119. data/lib/slack/real_time/models/base.rb +1 -4
  120. data/lib/slack/real_time/models/bot.rb +1 -0
  121. data/lib/slack/real_time/models/channel.rb +1 -0
  122. data/lib/slack/real_time/models/group.rb +1 -0
  123. data/lib/slack/real_time/models/im.rb +1 -0
  124. data/lib/slack/real_time/models/team.rb +1 -0
  125. data/lib/slack/real_time/models/user.rb +1 -0
  126. data/lib/slack/real_time/models.rb +1 -0
  127. data/lib/slack/real_time/socket.rb +45 -17
  128. data/lib/slack/real_time/stores/base.rb +5 -7
  129. data/lib/slack/real_time/stores/starter.rb +27 -3
  130. data/lib/slack/real_time/stores/store.rb +43 -25
  131. data/lib/slack/real_time/stores.rb +1 -0
  132. data/lib/slack/version.rb +2 -1
  133. data/lib/slack/web/api/endpoints/admin_analytics.rb +28 -0
  134. data/lib/slack/web/api/endpoints/admin_apps.rb +78 -0
  135. data/lib/slack/web/api/endpoints/admin_apps_approved.rb +35 -0
  136. data/lib/slack/web/api/endpoints/admin_apps_requests.rb +51 -0
  137. data/lib/slack/web/api/endpoints/admin_apps_restricted.rb +35 -0
  138. data/lib/slack/web/api/endpoints/admin_auth_policy.rb +72 -0
  139. data/lib/slack/web/api/endpoints/admin_barriers.rb +82 -0
  140. data/lib/slack/web/api/endpoints/admin_conversations.rb +262 -0
  141. data/lib/slack/web/api/endpoints/admin_conversations_ekm.rb +35 -0
  142. data/lib/slack/web/api/endpoints/admin_conversations_restrictAccess.rb +61 -0
  143. data/lib/slack/web/api/endpoints/admin_conversations_whitelist.rb +64 -0
  144. data/lib/slack/web/api/endpoints/admin_emoji.rb +88 -0
  145. data/lib/slack/web/api/endpoints/admin_inviteRequests.rb +61 -0
  146. data/lib/slack/web/api/endpoints/admin_inviteRequests_approved.rb +33 -0
  147. data/lib/slack/web/api/endpoints/admin_inviteRequests_denied.rb +33 -0
  148. data/lib/slack/web/api/endpoints/admin_teams.rb +50 -0
  149. data/lib/slack/web/api/endpoints/admin_teams_admins.rb +34 -0
  150. data/lib/slack/web/api/endpoints/admin_teams_owners.rb +34 -0
  151. data/lib/slack/web/api/endpoints/admin_teams_settings.rb +99 -0
  152. data/lib/slack/web/api/endpoints/admin_usergroups.rb +77 -0
  153. data/lib/slack/web/api/endpoints/admin_users.rb +163 -0
  154. data/lib/slack/web/api/endpoints/admin_users_session.rb +122 -0
  155. data/lib/slack/web/api/endpoints/admin_users_unsupportedVersions.rb +25 -0
  156. data/lib/slack/web/api/endpoints/api.rb +2 -3
  157. data/lib/slack/web/api/endpoints/apps.rb +27 -0
  158. data/lib/slack/web/api/endpoints/apps_connections.rb +21 -0
  159. data/lib/slack/web/api/endpoints/apps_event_authorizations.rb +34 -0
  160. data/lib/slack/web/api/endpoints/apps_manifest.rb +77 -0
  161. data/lib/slack/web/api/endpoints/apps_permissions.rb +1 -0
  162. data/lib/slack/web/api/endpoints/apps_permissions_resources.rb +31 -0
  163. data/lib/slack/web/api/endpoints/apps_permissions_scopes.rb +21 -0
  164. data/lib/slack/web/api/endpoints/apps_permissions_users.rb +50 -0
  165. data/lib/slack/web/api/endpoints/auth.rb +2 -1
  166. data/lib/slack/web/api/endpoints/auth_teams.rb +33 -0
  167. data/lib/slack/web/api/endpoints/bookmarks.rb +86 -0
  168. data/lib/slack/web/api/endpoints/bots.rb +4 -1
  169. data/lib/slack/web/api/endpoints/calls.rb +83 -0
  170. data/lib/slack/web/api/endpoints/calls_participants.rb +42 -0
  171. data/lib/slack/web/api/endpoints/channels.rb +2 -243
  172. data/lib/slack/web/api/endpoints/chat.rb +145 -46
  173. data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +40 -0
  174. data/lib/slack/web/api/endpoints/conversations.rb +152 -39
  175. data/lib/slack/web/api/endpoints/dialog.rb +3 -2
  176. data/lib/slack/web/api/endpoints/dnd.rb +9 -4
  177. data/lib/slack/web/api/endpoints/emoji.rb +1 -0
  178. data/lib/slack/web/api/endpoints/files.rb +35 -28
  179. data/lib/slack/web/api/endpoints/files_comments.rb +2 -34
  180. data/lib/slack/web/api/endpoints/files_remote.rb +127 -0
  181. data/lib/slack/web/api/endpoints/groups.rb +1 -243
  182. data/lib/slack/web/api/endpoints/im.rb +1 -101
  183. data/lib/slack/web/api/endpoints/migration.rb +5 -2
  184. data/lib/slack/web/api/endpoints/mpim.rb +1 -86
  185. data/lib/slack/web/api/endpoints/oauth.rb +8 -30
  186. data/lib/slack/web/api/endpoints/oauth_v2.rb +48 -0
  187. data/lib/slack/web/api/endpoints/openid_connect.rb +42 -0
  188. data/lib/slack/web/api/endpoints/pins.rb +8 -15
  189. data/lib/slack/web/api/endpoints/reactions.rb +29 -18
  190. data/lib/slack/web/api/endpoints/reminders.rb +18 -5
  191. data/lib/slack/web/api/endpoints/rtm.rb +14 -9
  192. data/lib/slack/web/api/endpoints/search.rb +30 -15
  193. data/lib/slack/web/api/endpoints/stars.rb +23 -10
  194. data/lib/slack/web/api/endpoints/team.rb +15 -4
  195. data/lib/slack/web/api/endpoints/team_billing.rb +21 -0
  196. data/lib/slack/web/api/endpoints/team_preferences.rb +21 -0
  197. data/lib/slack/web/api/endpoints/team_profile.rb +2 -1
  198. data/lib/slack/web/api/endpoints/tooling_tokens.rb +24 -0
  199. data/lib/slack/web/api/endpoints/usergroups.rb +27 -16
  200. data/lib/slack/web/api/endpoints/usergroups_users.rb +10 -5
  201. data/lib/slack/web/api/endpoints/users.rb +44 -17
  202. data/lib/slack/web/api/endpoints/users_admin.rb +1 -0
  203. data/lib/slack/web/api/endpoints/users_prefs.rb +1 -0
  204. data/lib/slack/web/api/endpoints/users_profile.rb +9 -8
  205. data/lib/slack/web/api/endpoints/views.rb +97 -0
  206. data/lib/slack/web/api/endpoints/workflows.rb +61 -0
  207. data/lib/slack/web/api/endpoints.rb +80 -12
  208. data/lib/slack/web/api/error.rb +1 -0
  209. data/lib/slack/web/api/errors/server_error.rb +37 -0
  210. data/lib/slack/web/api/errors/slack_error.rb +14 -1
  211. data/lib/slack/web/api/errors/too_many_requests_error.rb +2 -4
  212. data/lib/slack/web/api/errors.rb +1066 -0
  213. data/lib/slack/web/api/mixins/{channels.id.rb → conversations.id.rb} +4 -5
  214. data/lib/slack/web/api/mixins/ids.id.rb +3 -2
  215. data/lib/slack/web/api/mixins/users.id.rb +2 -3
  216. data/lib/slack/web/api/mixins/users.search.rb +1 -0
  217. data/lib/slack/web/api/mixins.rb +2 -2
  218. data/lib/slack/web/api/patches/chat.1.patch +70 -0
  219. data/lib/slack/web/api/patches/views.1.view-json.patch +40 -0
  220. data/lib/slack/web/api/patches/views.1.views-published.patch +16 -0
  221. data/lib/slack/web/api/templates/command.erb +1 -0
  222. data/lib/slack/web/api/templates/commands.erb +1 -0
  223. data/lib/slack/web/api/templates/endpoints.erb +2 -2
  224. data/lib/slack/web/api/templates/errors.erb +20 -0
  225. data/lib/slack/web/api/templates/method.erb +5 -1
  226. data/lib/slack/web/api/templates/method_spec.erb +2 -1
  227. data/lib/slack/web/client.rb +2 -1
  228. data/lib/slack/web/config.rb +3 -0
  229. data/lib/slack/web/faraday/connection.rb +24 -20
  230. data/lib/slack/web/faraday/request.rb +5 -1
  231. data/lib/slack/web/faraday/response/raise_error.rb +14 -7
  232. data/lib/slack/web/faraday/response/wrap_error.rb +24 -0
  233. data/lib/slack/web/pagination/cursor.rb +7 -7
  234. data/lib/slack-ruby-client.rb +12 -5
  235. data/lib/slack.rb +1 -0
  236. data/lib/slack_ruby_client.rb +1 -0
  237. data/lib/tasks/git.rake +1 -0
  238. data/lib/tasks/real_time.rake +16 -8
  239. data/lib/tasks/update.rake +1 -0
  240. data/lib/tasks/web.rake +39 -10
  241. data/screenshots/create-app.png +0 -0
  242. data/slack-ruby-client.gemspec +7 -12
  243. data/spec/fixtures/slack/web/429_error.yml +50 -54
  244. data/spec/fixtures/slack/web/auth_test_error.yml +51 -18
  245. data/spec/fixtures/slack/web/auth_test_success.yml +50 -26
  246. data/spec/fixtures/slack/web/conversations_info.yml +167 -0
  247. data/spec/fixtures/slack/web/conversations_setTopic.yml +84 -0
  248. data/spec/fixtures/slack/web/conversations_setTopic_one_page.yml +172 -0
  249. data/spec/fixtures/slack/web/conversations_setTopic_paginated.yml +253 -0
  250. data/spec/fixtures/slack/web/paginated_users_list.yml +501 -69
  251. data/spec/fixtures/slack/web/rtm_connect.yml +267 -30
  252. data/spec/fixtures/slack/web/rtm_start.yml +771 -60
  253. data/spec/fixtures/slack/web/users_info.yml +153 -69
  254. data/spec/fixtures/slack/web/users_list.yml +102 -41
  255. data/spec/fixtures/slack/web/views_open_error.yml +83 -0
  256. data/spec/integration/integration_spec.rb +116 -48
  257. data/spec/slack/config_spec.rb +2 -0
  258. data/spec/slack/events/config_spec.rb +33 -0
  259. data/spec/slack/events/request_spec.rb +184 -0
  260. data/spec/slack/messages/formatting_spec.rb +25 -14
  261. data/spec/slack/real_time/api/message_spec.rb +6 -1
  262. data/spec/slack/real_time/api/ping_spec.rb +2 -0
  263. data/spec/slack/real_time/api/typing_spec.rb +5 -1
  264. data/spec/slack/real_time/client_spec.rb +258 -62
  265. data/spec/slack/real_time/concurrency/it_behaves_like_a_realtime_socket.rb +2 -0
  266. data/spec/slack/real_time/concurrency/with_concurrency_spec.rb +10 -0
  267. data/spec/slack/real_time/concurrency/without_concurrency_spec.rb +10 -0
  268. data/spec/slack/real_time/event_handlers/bot_spec.rb +3 -2
  269. data/spec/slack/real_time/event_handlers/channel_spec.rb +14 -11
  270. data/spec/slack/real_time/event_handlers/event_handlers_spec.rb +2 -1
  271. data/spec/slack/real_time/event_handlers/group_spec.rb +6 -5
  272. data/spec/slack/real_time/event_handlers/im_spec.rb +10 -9
  273. data/spec/slack/real_time/event_handlers/team_spec.rb +3 -1
  274. data/spec/slack/real_time/event_handlers/user_spec.rb +3 -2
  275. data/spec/slack/real_time/rtm_connect_spec.rb +2 -1
  276. data/spec/slack/real_time/rtm_start_spec.rb +2 -1
  277. data/spec/slack/real_time/store_spec.rb +4 -3
  278. data/spec/slack/slack_spec.rb +42 -8
  279. data/spec/slack/version_spec.rb +2 -1
  280. data/spec/slack/web/api/endpoints/admin_analytics_spec.rb +13 -0
  281. data/spec/slack/web/api/endpoints/admin_apps_approved_spec.rb +8 -0
  282. data/spec/slack/web/api/endpoints/admin_apps_requests_spec.rb +13 -0
  283. data/spec/slack/web/api/endpoints/admin_apps_restricted_spec.rb +8 -0
  284. data/spec/slack/web/api/endpoints/admin_apps_spec.rb +18 -0
  285. data/spec/slack/web/api/endpoints/admin_auth_policy_spec.rb +35 -0
  286. data/spec/slack/web/api/endpoints/admin_barriers_spec.rb +38 -0
  287. data/spec/slack/web/api/endpoints/admin_conversations_ekm_spec.rb +8 -0
  288. data/spec/slack/web/api/endpoints/admin_conversations_restrictAccess_spec.rb +32 -0
  289. data/spec/slack/web/api/endpoints/admin_conversations_spec.rb +98 -0
  290. data/spec/slack/web/api/endpoints/admin_emoji_spec.rb +37 -0
  291. data/spec/slack/web/api/endpoints/admin_inviteRequests_approved_spec.rb +8 -0
  292. data/spec/slack/web/api/endpoints/admin_inviteRequests_denied_spec.rb +8 -0
  293. data/spec/slack/web/api/endpoints/admin_inviteRequests_spec.rb +18 -0
  294. data/spec/slack/web/api/endpoints/admin_teams_admins_spec.rb +13 -0
  295. data/spec/slack/web/api/endpoints/admin_teams_owners_spec.rb +13 -0
  296. data/spec/slack/web/api/endpoints/admin_teams_settings_spec.rb +53 -0
  297. data/spec/slack/web/api/endpoints/admin_teams_spec.rb +16 -0
  298. data/spec/slack/web/api/endpoints/admin_usergroups_spec.rb +37 -0
  299. data/spec/slack/web/api/endpoints/admin_users_session_spec.rb +41 -0
  300. data/spec/slack/web/api/endpoints/admin_users_spec.rb +67 -0
  301. data/spec/slack/web/api/endpoints/admin_users_unsupportedVersions_spec.rb +8 -0
  302. data/spec/slack/web/api/endpoints/api_spec.rb +1 -0
  303. data/spec/slack/web/api/endpoints/apps_connections_spec.rb +8 -0
  304. data/spec/slack/web/api/endpoints/apps_event_authorizations_spec.rb +13 -0
  305. data/spec/slack/web/api/endpoints/apps_manifest_spec.rb +36 -0
  306. data/spec/slack/web/api/endpoints/apps_spec.rb +16 -0
  307. data/spec/slack/web/api/endpoints/auth_teams_spec.rb +8 -0
  308. data/spec/slack/web/api/endpoints/bookmarks_spec.rb +40 -0
  309. data/spec/slack/web/api/endpoints/bots_spec.rb +1 -0
  310. data/spec/slack/web/api/endpoints/calls_participants_spec.rb +24 -0
  311. data/spec/slack/web/api/endpoints/calls_spec.rb +31 -0
  312. data/spec/slack/web/api/endpoints/chat_scheduledMessages_spec.rb +8 -0
  313. data/spec/slack/web/api/endpoints/custom_specs/auth_spec.rb +9 -7
  314. data/spec/slack/web/api/endpoints/custom_specs/chat_spec.rb +131 -39
  315. data/spec/slack/web/api/endpoints/custom_specs/conversations_spec.rb +13 -0
  316. data/spec/slack/web/api/endpoints/custom_specs/dialog_spec.rb +16 -6
  317. data/spec/slack/web/api/endpoints/custom_specs/users_spec.rb +8 -3
  318. data/spec/slack/web/api/endpoints/custom_specs/views_spec.rb +103 -0
  319. data/spec/slack/web/api/endpoints/dnd_spec.rb +4 -3
  320. data/spec/slack/web/api/endpoints/emoji_spec.rb +1 -0
  321. data/spec/slack/web/api/endpoints/files_comments_spec.rb +3 -21
  322. data/spec/slack/web/api/endpoints/files_remote_spec.rb +24 -0
  323. data/spec/slack/web/api/endpoints/files_spec.rb +5 -4
  324. data/spec/slack/web/api/endpoints/migration_spec.rb +1 -0
  325. data/spec/slack/web/api/endpoints/oauth_spec.rb +1 -22
  326. data/spec/slack/web/api/endpoints/oauth_v2_spec.rb +16 -0
  327. data/spec/slack/web/api/endpoints/openid_connect_spec.rb +8 -0
  328. data/spec/slack/web/api/endpoints/pins_spec.rb +1 -0
  329. data/spec/slack/web/api/endpoints/reactions_spec.rb +8 -1
  330. data/spec/slack/web/api/endpoints/reminders_spec.rb +3 -2
  331. data/spec/slack/web/api/endpoints/rtm_spec.rb +1 -0
  332. data/spec/slack/web/api/endpoints/search_spec.rb +1 -0
  333. data/spec/slack/web/api/endpoints/stars_spec.rb +1 -0
  334. data/spec/slack/web/api/endpoints/team_billing_spec.rb +8 -0
  335. data/spec/slack/web/api/endpoints/team_preferences_spec.rb +8 -0
  336. data/spec/slack/web/api/endpoints/team_profile_spec.rb +1 -0
  337. data/spec/slack/web/api/endpoints/team_spec.rb +1 -0
  338. data/spec/slack/web/api/endpoints/tooling_tokens_spec.rb +13 -0
  339. data/spec/slack/web/api/endpoints/usergroups_spec.rb +1 -0
  340. data/spec/slack/web/api/endpoints/usergroups_users_spec.rb +3 -2
  341. data/spec/slack/web/api/endpoints/users_admin_spec.rb +1 -0
  342. data/spec/slack/web/api/endpoints/users_prefs_spec.rb +1 -0
  343. data/spec/slack/web/api/endpoints/users_profile_spec.rb +1 -0
  344. data/spec/slack/web/api/endpoints/workflows_spec.rb +26 -0
  345. data/spec/slack/web/api/error_spec.rb +7 -7
  346. data/spec/slack/web/api/errors/slack_error_spec.rb +26 -7
  347. data/spec/slack/web/api/mixins/conversations_list_spec.rb +21 -0
  348. data/spec/slack/web/api/mixins/conversations_spec.rb +43 -0
  349. data/spec/slack/web/api/mixins/users_spec.rb +25 -14
  350. data/spec/slack/web/api/pagination/cursor_spec.rb +43 -15
  351. data/spec/slack/web/client_spec.rb +186 -19
  352. data/spec/slack/web/faraday/request_spec.rb +80 -0
  353. data/spec/slack/web/faraday/response/raise_error_spec.rb +48 -12
  354. data/spec/spec_helper.rb +9 -2
  355. data/spec/support/queue_with_timeout.rb +5 -4
  356. data/spec/support/real_time/concurrency/mock.rb +1 -0
  357. data/spec/support/real_time/connected_client.rb +6 -6
  358. data/spec/support/real_time/event.rb +1 -0
  359. data/spec/support/token.rb +1 -0
  360. data/spec/support/vcr.rb +37 -1
  361. metadata +177 -231
  362. data/.travis.yml +0 -30
  363. data/examples/hi_real_time/Gemfile +0 -5
  364. data/examples/hi_real_time/hi.gif +0 -0
  365. data/examples/hi_real_time/hi.rb +0 -37
  366. data/examples/hi_real_time_async_celluloid/Gemfile +0 -6
  367. data/examples/hi_real_time_async_eventmachine/Procfile +0 -2
  368. data/examples/hi_real_time_async_eventmachine/hi.rb +0 -36
  369. data/lib/slack/real_time/concurrency/celluloid.rb +0 -117
  370. data/lib/slack/real_time/concurrency/eventmachine.rb +0 -60
  371. data/lib/slack/web/api/mixins/channels.id.json +0 -20
  372. data/lib/slack/web/api/mixins/groups.id.json +0 -20
  373. data/lib/slack/web/api/mixins/groups.id.rb +0 -26
  374. data/lib/slack/web/api/patches/chat.1.text-attachments-required.patch +0 -13
  375. data/lib/slack/web/api/patches/chat.2.attachments-json.patch +0 -17
  376. data/lib/slack/web/api/patches/chat.3.update-attachments-support.patch +0 -21
  377. data/lib/slack/web/api/patches/chat.4.postEphemeral-attachments-support.patch +0 -17
  378. data/screenshots/register-bot.png +0 -0
  379. data/spec/fixtures/slack/web/503_error.yml +0 -14
  380. data/spec/fixtures/slack/web/channels_info.yml +0 -46
  381. data/spec/fixtures/slack/web/groups_info.yml +0 -43
  382. data/spec/slack/real_time/concurrency/celluloid_spec.rb +0 -62
  383. data/spec/slack/real_time/concurrency/eventmachine_spec.rb +0 -47
  384. data/spec/slack/web/api/endpoints/apps_permissions_spec.rb +0 -15
  385. data/spec/slack/web/api/endpoints/conversations_spec.rb +0 -100
  386. data/spec/slack/web/api/endpoints/custom_specs/channels_spec.rb +0 -11
  387. data/spec/slack/web/api/endpoints/custom_specs/groups_spec.rb +0 -11
  388. data/spec/slack/web/api/endpoints/im_spec.rb +0 -38
  389. data/spec/slack/web/api/endpoints/mpim_spec.rb +0 -38
  390. data/spec/slack/web/api/errors/service_unavailable_spec.rb +0 -14
  391. data/spec/slack/web/api/mixins/channels_spec.rb +0 -31
  392. data/spec/slack/web/api/mixins/groups_spec.rb +0 -31
data/.travis.yml DELETED
@@ -1,30 +0,0 @@
1
- language: ruby
2
-
3
- cache: bundler
4
-
5
- rvm:
6
- - 2.2
7
- - 2.1
8
- - 2.3.4
9
- - ruby-head
10
- - jruby-head
11
-
12
- matrix:
13
- include:
14
- - rvm: 2.4.1
15
- script:
16
- - bundle exec danger
17
- - rvm: 2.4.1
18
- env: CONCURRENCY=celluloid-io
19
- - rvm: 2.4.1
20
- env: CONCURRENCY=faye-websocket
21
- allow_failures:
22
- - rvm: ruby-head
23
- - rvm: jruby-head
24
-
25
- git:
26
- submodules: false
27
-
28
- before_install:
29
- - gem update bundler
30
- - gem update --system
@@ -1,5 +0,0 @@
1
- source 'http://rubygems.org'
2
-
3
- gem 'slack-ruby-client', path: '../..'
4
-
5
- gem 'celluloid-io', require: ['celluloid/current', 'celluloid/io']
Binary file
@@ -1,37 +0,0 @@
1
- require 'slack-ruby-client'
2
-
3
- Slack.configure do |config|
4
- config.token = ENV['SLACK_API_TOKEN']
5
- config.logger = Logger.new(STDOUT)
6
- config.logger.level = Logger::INFO
7
- raise 'Missing ENV[SLACK_API_TOKEN]!' unless config.token
8
- end
9
-
10
- client = Slack::RealTime::Client.new
11
-
12
- client.on :hello do
13
- puts "Successfully connected, welcome '#{client.self.name}' to the '#{client.team.name}' team at https://#{client.team.domain}.slack.com."
14
- end
15
-
16
- client.on :message do |data|
17
- puts data
18
-
19
- client.typing channel: data.channel
20
-
21
- case data.text
22
- when 'bot hi' then
23
- client.message channel: data.channel, text: "Hi <@#{data.user}>!"
24
- when /^bot/ then
25
- client.message channel: data.channel, text: "Sorry <@#{data.user}>, what?"
26
- end
27
- end
28
-
29
- client.on :close do |_data|
30
- puts 'Connection closing, exiting.'
31
- end
32
-
33
- client.on :closed do |_data|
34
- puts 'Connection has been disconnected.'
35
- end
36
-
37
- client.start!
@@ -1,6 +0,0 @@
1
- source 'http://rubygems.org'
2
-
3
- gem 'slack-ruby-client', path: '../..'
4
-
5
- gem 'celluloid-io', require: ['celluloid/current', 'celluloid/io']
6
- gem 'foreman'
@@ -1,2 +0,0 @@
1
- console: bundle exec ruby hi.rb
2
-
@@ -1,36 +0,0 @@
1
- require 'slack-ruby-client'
2
-
3
- raise 'Missing ENV[SLACK_API_TOKENS]!' unless ENV.key?('SLACK_API_TOKENS')
4
-
5
- $stdout.sync = true
6
- logger = Logger.new($stdout)
7
- logger.level = Logger::DEBUG
8
-
9
- ENV['SLACK_API_TOKENS'].split.each do |token|
10
- logger.info "Starting #{token[0..12]} ..."
11
-
12
- client = Slack::RealTime::Client.new(token: token)
13
-
14
- client.on :hello do
15
- logger.info "Successfully connected, welcome '#{client.self.name}' to the '#{client.team.name}' team at https://#{client.team.domain}.slack.com."
16
- end
17
-
18
- client.on :message do |data|
19
- logger.info data
20
-
21
- client.typing channel: data.channel
22
-
23
- case data.text
24
- when 'bot hi' then
25
- client.message channel: data.channel, text: "Hi <@#{data.user}>!"
26
- when /^bot/ then
27
- client.message channel: data.channel, text: "Sorry <@#{data.user}>, what?"
28
- end
29
- end
30
-
31
- client.start_async
32
- end
33
-
34
- loop do
35
- Thread.pass
36
- end
@@ -1,117 +0,0 @@
1
- require 'websocket/driver'
2
- require 'socket'
3
- require 'forwardable'
4
- require 'celluloid/current'
5
- require 'celluloid/io'
6
-
7
- module Slack
8
- module RealTime
9
- module Concurrency
10
- module Celluloid
11
- class Socket < Slack::RealTime::Socket
12
- include ::Celluloid::IO
13
- include ::Celluloid::Internals::Logger
14
-
15
- BLOCK_SIZE = 4096
16
-
17
- extend ::Forwardable
18
- def_delegators :driver, :text, :binary
19
-
20
- attr_reader :socket
21
-
22
- def initialize(*args)
23
- super
24
- end
25
-
26
- def connect!
27
- super
28
- run_loop
29
- end
30
-
31
- def run_loop
32
- @closing = false
33
- @socket = build_socket
34
- @connected = @socket.connect
35
- driver.start
36
- loop { read } if socket
37
- rescue EOFError, Errno::EPIPE => e
38
- logger.debug("#{self.class}##{__method__}") { e }
39
- driver.emit(:close, WebSocket::Driver::CloseEvent.new(1001, 'server closed connection')) unless @closing
40
- ensure
41
- begin
42
- current_actor.terminate if current_actor.alive?
43
- rescue
44
- nil
45
- end
46
- end
47
-
48
- def close
49
- @closing = true
50
- driver.close
51
- super
52
- end
53
-
54
- def read
55
- buffer = socket.readpartial(BLOCK_SIZE)
56
- async.handle_read(buffer)
57
- end
58
-
59
- def handle_read(buffer)
60
- logger.debug("#{self.class}##{__method__}") { buffer }
61
- driver.parse buffer
62
- end
63
-
64
- def write(data)
65
- logger.debug("#{self.class}##{__method__}") { data }
66
- socket.write(data)
67
- end
68
-
69
- def start_async(client)
70
- @client = client
71
- Actor.new(future.run_client_loop)
72
- end
73
-
74
- def run_client_loop
75
- @client.run_loop
76
- end
77
-
78
- def connected?
79
- !@connected.nil?
80
- end
81
-
82
- protected
83
-
84
- class Actor
85
- attr_reader :future
86
-
87
- def initialize(future)
88
- @future = future
89
- end
90
-
91
- def join
92
- @future.value
93
- end
94
- end
95
-
96
- def build_socket
97
- socket = ::Celluloid::IO::TCPSocket.new(addr, port)
98
- socket = ::Celluloid::IO::SSLSocket.new(socket, build_ssl_context) if secure?
99
- socket
100
- end
101
-
102
- def build_ssl_context
103
- OpenSSL::SSL::SSLContext.new(:TLSv1_2_client)
104
- end
105
-
106
- def build_driver
107
- ::WebSocket::Driver.client(self)
108
- end
109
-
110
- def connect
111
- @driver = build_driver
112
- end
113
- end
114
- end
115
- end
116
- end
117
- end
@@ -1,60 +0,0 @@
1
- require 'faye/websocket'
2
- require 'eventmachine'
3
-
4
- module Slack
5
- module RealTime
6
- module Concurrency
7
- module Eventmachine
8
- class Client < Faye::WebSocket::Client
9
- attr_reader :logger
10
- protected :logger
11
-
12
- def initialize(url, protocols = nil, options = {})
13
- @logger = options.delete(:logger) || Slack::RealTime::Config.logger || Slack::Config.logger
14
- super
15
- end
16
-
17
- def parse(data)
18
- logger.debug("#{self.class}##{__method__}") { data }
19
- super data
20
- end
21
-
22
- def write(data)
23
- logger.debug("#{self.class}##{__method__}") { data }
24
- super data
25
- end
26
- end
27
-
28
- class Socket < Slack::RealTime::Socket
29
- def start_async(client)
30
- thread = ensure_reactor_running
31
-
32
- client.run_loop
33
-
34
- thread
35
- end
36
-
37
- def send_data(message)
38
- logger.debug("#{self.class}##{__method__}") { message }
39
- driver.send(message)
40
- end
41
-
42
- protected
43
-
44
- # @return [Thread]
45
- def ensure_reactor_running
46
- return if EventMachine.reactor_running?
47
-
48
- reactor = Thread.new { EventMachine.run }
49
- Thread.pass until EventMachine.reactor_running?
50
- reactor
51
- end
52
-
53
- def connect
54
- @driver = Client.new(url, nil, options.merge(logger: logger))
55
- end
56
- end
57
- end
58
- end
59
- end
60
- end
@@ -1,20 +0,0 @@
1
- {
2
- "mixin": true,
3
- "group": "channels",
4
- "name": "channels.id",
5
- "desc": "This method returns the ID of a team channel.",
6
- "args": {
7
- "channel": {
8
- "required": true,
9
- "example": "#general",
10
- "desc": "Channel to get ID for, prefixed with #.",
11
- "type": "channel"
12
- }
13
- },
14
- "errors": {
15
- "channel_not_found": "Value passed for channel was invalid.",
16
- "not_authed": "No authentication token provided.",
17
- "invalid_auth": "Invalid authentication token.",
18
- "account_inactive": "Authentication token is for a deleted user or team."
19
- }
20
- }
@@ -1,20 +0,0 @@
1
- {
2
- "mixin": true,
3
- "group": "groups",
4
- "name": "groups.id",
5
- "desc": "This method returns the ID of a group.",
6
- "args": {
7
- "channel": {
8
- "required": true,
9
- "example": "#general",
10
- "desc": "Group channel to get ID for, prefixed with #.",
11
- "type": "group"
12
- }
13
- },
14
- "errors": {
15
- "channel_not_found": "Value passed for group was invalid.",
16
- "not_authed": "No authentication token provided.",
17
- "invalid_auth": "Invalid authentication token.",
18
- "account_inactive": "Authentication token is for a deleted user or team."
19
- }
20
- }
@@ -1,26 +0,0 @@
1
- require_relative 'ids.id'
2
-
3
- module Slack
4
- module Web
5
- module Api
6
- module Mixins
7
- module Groups
8
- include Ids
9
- #
10
- # This method returns a group ID given a group name.
11
- #
12
- # @option options [channel] :channel
13
- # Group channel to get ID for, prefixed with #.
14
- def groups_id(options = {})
15
- name = options[:channel]
16
- throw ArgumentError.new('Required arguments :channel missing') if name.nil?
17
-
18
- id_for(:group, name, '#', :groups, 'channel_not_found') do
19
- groups_list
20
- end
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,13 +0,0 @@
1
- diff --git a/lib/slack/web/api/endpoints/chat.rb b/lib/slack/web/api/endpoints/chat.rb
2
- index 1f7a8d7..2ec4bed 100644
3
- --- a/lib/slack/web/api/endpoints/chat.rb
4
- +++ b/lib/slack/web/api/endpoints/chat.rb
5
- @@ -49,7 +49,7 @@ module Slack
6
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.postMessage.json
7
- def chat_postMessage(options = {})
8
- throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
9
- - throw ArgumentError.new('Required arguments :text missing') if options[:text].nil?
10
- + throw ArgumentError.new('Required arguments :text or :attachments missing') if options[:text].nil? && options[:attachments].nil?
11
- post('chat.postMessage', options)
12
- end
13
-
@@ -1,17 +0,0 @@
1
- diff --git a/lib/slack/web/api/endpoints/chat.rb b/lib/slack/web/api/endpoints/chat.rb
2
- index 1f7a8d7..89b1562 100644
3
- --- a/lib/slack/web/api/endpoints/chat.rb
4
- +++ b/lib/slack/web/api/endpoints/chat.rb
5
- @@ -50,6 +50,12 @@ module Slack
6
- def chat_postMessage(options = {})
7
- throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
8
- throw ArgumentError.new('Required arguments :text or :attachments missing') if options[:text].nil? && options[:attachments].nil?
9
- + # attachments must be passed as an encoded JSON string
10
- + if options.key?(:attachments)
11
- + attachments = options[:attachments]
12
- + attachments = JSON.dump(attachments) unless attachments.is_a?(String)
13
- + options = options.merge(attachments: attachments)
14
- + end
15
- post('chat.postMessage', options)
16
- end
17
-
@@ -1,21 +0,0 @@
1
- diff --git a/lib/slack/web/api/endpoints/chat.rb b/lib/slack/web/api/endpoints/chat.rb
2
- index 5186416..490bc91 100644
3
- --- a/lib/slack/web/api/endpoints/chat.rb
4
- +++ b/lib/slack/web/api/endpoints/chat.rb
5
- @@ -154,9 +154,15 @@ module Slack
6
- # @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.update.json
7
- def chat_update(options = {})
8
- throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
9
- - throw ArgumentError.new('Required arguments :text missing') if options[:text].nil?
10
- + throw ArgumentError.new('Required arguments :text or :attachments missing') if options[:text].nil? && options[:attachments].nil?
11
- throw ArgumentError.new('Required arguments :ts missing') if options[:ts].nil?
12
- options = options.merge(channel: channels_id(options)['channel']['id']) if options[:channel]
13
- + # attachments must be passed as an encoded JSON string
14
- + if options.key?(:attachments)
15
- + attachments = options[:attachments]
16
- + attachments = JSON.dump(attachments) unless attachments.is_a?(String)
17
- + options = options.merge(attachments: attachments)
18
- + end
19
- post('chat.update', options)
20
- end
21
- end
@@ -1,17 +0,0 @@
1
- diff --git a/lib/slack/web/api/endpoints/chat.rb b/lib/slack/web/api/endpoints/chat.rb
2
- index 846126e..0c254c6 100644
3
- --- a/lib/slack/web/api/endpoints/chat.rb
4
- +++ b/lib/slack/web/api/endpoints/chat.rb
5
- @@ -62,6 +62,12 @@ module Slack
6
- throw ArgumentError.new('Required arguments :text missing') if options[:text].nil?
7
- throw ArgumentError.new('Required arguments :user missing') if options[:user].nil?
8
- options = options.merge(user: users_id(options)['user']['id']) if options[:user]
9
- + # attachments must be passed as an encoded JSON string
10
- + if options.key?(:attachments)
11
- + attachments = options[:attachments]
12
- + attachments = JSON.dump(attachments) unless attachments.is_a?(String)
13
- + options = options.merge(attachments: attachments)
14
- + end
15
- post('chat.postEphemeral', options)
16
- end
17
-
Binary file
@@ -1,14 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: post
5
- uri: https://slack.com/api/auth.test
6
- response:
7
- status:
8
- code: 503
9
- message: Service Unavailable
10
- body:
11
- encoding: US-ASCII
12
- string: ''
13
- http_version:
14
- recorded_at: Thu, 30 Nov 2017 14:36:26 GMT
@@ -1,46 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: post
5
- uri: https://slack.com/api/channels.list
6
- body:
7
- encoding: UTF-8
8
- string: token=token
9
- response:
10
- status:
11
- code: 200
12
- message: OK
13
- headers:
14
- Content-Type:
15
- - application/json; charset=utf-8
16
- body:
17
- encoding: UTF-8
18
- string: '{"ok":true,"channels":[{"id":"C04KB5X4D","name":"general","is_channel":true,"created":1430222230,"creator":"U04KB5WQR","is_archived":false,"is_general":true,"is_member":true,"last_read":"1435863302.000026","latest":{"type":"message","user":"U0HPMN0GY","text":"```\n{\"ok\":true,\"args\":{\"token\":\"xoxb-17803748576-H794PZkqOo4DkjYddb438F2J\"}}```","ts":"1452025068.000045"},"unread_count":321,"unread_count_display":283,"members":["U04JPQ0JS","U04JZBDQQ","U04KB5WQR"],"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This
19
- channel is for team-wide communication and announcements. All team members
20
- are in this channel.","creator":"","last_set":0}}]}'
21
- http_version:
22
- recorded_at: Fri, 22 Jan 2016 19:01:46 GMT
23
- - request:
24
- method: post
25
- uri: https://slack.com/api/channels.info
26
- body:
27
- encoding: UTF-8
28
- string: channel=C04KB5X4D&token=token
29
- headers:
30
- Content-Type:
31
- - application/x-www-form-urlencoded
32
- response:
33
- status:
34
- code: 200
35
- message: OK
36
- headers:
37
- Content-Type:
38
- - application/json; charset=utf-8
39
- body:
40
- encoding: UTF-8
41
- string: '{"ok":true,"channel":{"id":"C04KB5X4D","name":"general","is_channel":true,"created":1430222230,"creator":"U04KB5WQR","is_archived":false,"is_general":true,"is_member":true,"last_read":"1435863302.000026","latest":{"type":"message","user":"U0HPMN0GY","text":"```\n{\"ok\":true,\"args\":{\"token\":\"xoxb-17803748576-H794PZkqOo4DkjYddb438F2J\"}}```","ts":"1452025068.000045"},"unread_count":321,"unread_count_display":283,"members":["U04JPQ0JS","U04JZBDQQ","U04KB5WQR","U06JGTU5V","U07518DTL","U07KECJ77","U092BDCLV","U092V4E9L","U0EA7TZJN","U0H701CJZ","U0HLFUZLJ","U0HPMN0GY"],"topic":{"value":"","creator":"","last_set":0},"purpose":{"value":"This
42
- channel is for team-wide communication and announcements. All team members
43
- are in this channel.","creator":"","last_set":0}}}'
44
- http_version:
45
- recorded_at: Fri, 22 Jan 2016 19:01:46 GMT
46
- recorded_with: VCR 3.0.1
@@ -1,43 +0,0 @@
1
- ---
2
- http_interactions:
3
- - request:
4
- method: post
5
- uri: https://slack.com/api/groups.list
6
- body:
7
- encoding: UTF-8
8
- string: token=token
9
- response:
10
- status:
11
- code: 200
12
- message: OK
13
- headers:
14
- Content-Type:
15
- - application/json; charset=utf-8
16
- body:
17
- encoding: ASCII-8BIT
18
- string: '{"ok":true,"groups":[{"id":"G0K7EV5A7","name":"mpdm-dblock--rubybot--player1-1","is_group":true,"created":1453561861,"creator":"U04KB5WQR","is_archived":false,"is_mpim":true,"members":["U04KB5WQR","U0HLFUZLJ","U07518DTL"],"topic":{"value":"Group
19
- messaging","creator":"U04KB5WQR","last_set":1453561861},"purpose":{"value":"Group
20
- messaging with: @dblock @rubybot @player1","creator":"U04KB5WQR","last_set":1453561861}}]}'
21
- http_version:
22
- recorded_at: Sat, 23 Jan 2016 15:19:10 GMT
23
- - request:
24
- method: post
25
- uri: https://slack.com/api/groups.info
26
- body:
27
- encoding: UTF-8
28
- string: channel=G0K7EV5A7&token=token
29
- response:
30
- status:
31
- code: 200
32
- message: OK
33
- headers:
34
- Content-Type:
35
- - application/json; charset=utf-8
36
- body:
37
- encoding: ASCII-8BIT
38
- string: '{"ok":true,"group":{"id":"G0K7EV5A7","name":"mpdm-dblock--rubybot--player1-1","is_group":true,"created":1453561861,"creator":"U04KB5WQR","is_archived":false,"is_mpim":true,"is_open":false,"last_read":"0000000000.000000","latest":null,"unread_count":0,"unread_count_display":0,"members":["U04KB5WQR","U0HLFUZLJ","U07518DTL"],"topic":{"value":"Group
39
- messaging","creator":"U04KB5WQR","last_set":1453561861},"purpose":{"value":"Group
40
- messaging with: @dblock @rubybot @player1","creator":"U04KB5WQR","last_set":1453561861}}}'
41
- http_version:
42
- recorded_at: Sat, 23 Jan 2016 15:19:46 GMT
43
- recorded_with: VCR 3.0.0
@@ -1,62 +0,0 @@
1
- require 'spec_helper'
2
- require_relative './it_behaves_like_a_realtime_socket'
3
-
4
- begin
5
- RSpec.describe Slack::RealTime::Concurrency::Celluloid::Socket do
6
- it_behaves_like 'a realtime socket'
7
- context 'with url' do
8
- let(:url) { 'wss://echo.websocket.org/websocket/xyz' }
9
- let(:logger) { ::Logger.new(STDOUT) }
10
-
11
- [EOFError, Errno::EPIPE].each do |err|
12
- context "finishing run_loop with #{err}" do
13
- let(:test_socket) do
14
- Class.new(described_class) do
15
- def read
16
- raise options[:err]
17
- end
18
- end
19
- end
20
-
21
- let(:socket) do
22
- test_socket.new(url, ping: 42, logger: logger, err: err)
23
- end
24
-
25
- let(:driver) { WebSocket::Driver::Client }
26
- let(:ws) { double(driver) }
27
- subject { socket }
28
-
29
- describe '#connect!' do
30
- pending 'connects'
31
- pending 'pings every 30s'
32
- end
33
-
34
- context 'with a driver' do
35
- before do
36
- socket.instance_variable_set('@driver', ws)
37
- end
38
-
39
- describe '#disconnect!' do
40
- it 'closes and nils the websocket' do
41
- expect(ws).to receive(:close)
42
- socket.disconnect!
43
- end
44
- end
45
-
46
- context 'consumes data' do
47
- it 'runs' do
48
- expect(ws).to receive(:emit)
49
- expect(ws).to receive(:start)
50
- expect(logger).to receive(:debug).with("#{test_socket}#run_loop")
51
- socket.run_loop
52
- end
53
- end
54
- end
55
-
56
- pending 'send_data'
57
- end
58
- end
59
- end
60
- end
61
- rescue LoadError
62
- end
@@ -1,47 +0,0 @@
1
- require 'spec_helper'
2
- require_relative './it_behaves_like_a_realtime_socket'
3
-
4
- begin
5
- RSpec.describe Slack::RealTime::Concurrency::Eventmachine::Socket do
6
- it_behaves_like 'a realtime socket'
7
- context 'with url' do
8
- let(:url) { 'wss://ms174.slack-msgs.com/websocket/xyz' }
9
- let(:logger) { ::Logger.new($stdout) }
10
- let(:socket) { described_class.new(url, ping: 42, logger: logger) }
11
- let(:ws) { double(Faye::WebSocket::Client) }
12
- describe '#connect!' do
13
- before do
14
- allow(ws).to receive(:on).with(:close)
15
- end
16
- it 'connects' do
17
- allow(Faye::WebSocket::Client).to receive(:new).and_return(ws)
18
- socket.connect!
19
- expect(socket.instance_variable_get('@driver')).to eq ws
20
- end
21
- it 'pings every 30s' do
22
- expect(Faye::WebSocket::Client).to receive(:new).with(url, nil, ping: 42, logger: logger).and_return(ws)
23
- socket.connect!
24
- end
25
- end
26
- describe '#disconnect!' do
27
- it 'closes and nils the websocket' do
28
- socket.instance_variable_set('@driver', ws)
29
- expect(ws).to receive(:close)
30
- socket.disconnect!
31
- end
32
- end
33
- describe 'send_data' do
34
- before do
35
- allow(Faye::WebSocket::Client).to receive(:new).and_return(ws)
36
- allow(ws).to receive(:on)
37
- socket.connect!
38
- end
39
- it 'sends data' do
40
- expect(ws).to receive(:send).with('data')
41
- socket.send_data('data')
42
- end
43
- end
44
- end
45
- end
46
- rescue LoadError
47
- end