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,42 +1,54 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  describe Slack::Messages::Formatting do
4
- subject do
5
- Slack::Messages::Formatting
5
+ subject(:formatting) do
6
+ described_class
6
7
  end
8
+
7
9
  context '#unescape' do
8
10
  it 'plain text' do
9
- expect(subject.unescape('plain text')).to eq 'plain text'
11
+ expect(formatting.unescape('plain text')).to eq 'plain text'
10
12
  end
11
13
  it 'decodes an HTML-encoded message' do
12
- expect(subject.unescape('Hello &amp; &lt;world&gt;')).to eq 'Hello & <world>'
14
+ expect(formatting.unescape('Hello &amp; &lt;world&gt;')).to eq 'Hello & <world>'
13
15
  end
14
16
  it 'unescapes a user reference' do
15
- expect(subject.unescape('Hey <@U024BE7LH|bob>, did you see my file?')).to eq 'Hey @bob, did you see my file?'
17
+ expect(formatting.unescape('Hey <@U024BE7LH|bob>, did you see my file?')).to(
18
+ eq('Hey @bob, did you see my file?')
19
+ )
16
20
  end
17
21
  it 'unescapes a user reference without a name' do
18
- expect(subject.unescape('<@U02BEFY4U> ^^^')).to eq '@U02BEFY4U ^^^'
22
+ expect(formatting.unescape('<@U02BEFY4U> ^^^')).to eq '@U02BEFY4U ^^^'
19
23
  end
20
24
  it 'unescapes a URL without text' do
21
- expect(subject.unescape('This message contains a URL <http://foo.com/>')).to eq 'This message contains a URL http://foo.com/'
25
+ expect(formatting.unescape('This message contains a URL <http://foo.com/>')).to(
26
+ eq('This message contains a URL http://foo.com/')
27
+ )
22
28
  end
23
29
  it 'unescapes a URL with text' do
24
- expect(subject.unescape('So does this one: <http://www.foo.com|www.foo.com>')).to eq 'So does this one: www.foo.com'
30
+ expect(formatting.unescape('So does this one: <http://www.foo.com|www.foo.com>')).to(
31
+ eq('So does this one: www.foo.com')
32
+ )
25
33
  end
26
34
  it 'removes mailto' do
27
- expect(subject.unescape('<mailto:bob@example.com|Bob>')).to eq 'Bob'
35
+ expect(formatting.unescape('<mailto:bob@example.com|Bob>')).to eq 'Bob'
28
36
  end
29
37
  it 'unlinkifies references' do
30
- expect(subject.unescape('Hello <@U123|bob>, say hi to <!everyone> in <#C1234|general>')).to eq 'Hello @bob, say hi to @everyone in #general'
38
+ expect(
39
+ formatting.unescape('Hello <@U123|bob>, say hi to <!everyone> in <#C1234|general>')
40
+ ).to(
41
+ eq('Hello @bob, say hi to @everyone in #general')
42
+ )
31
43
  end
32
44
  it 'can handle a lone &gt;' do
33
- expect(subject.unescape('Hello <@U123|bob> &gt; file.txt')).to eq 'Hello @bob > file.txt'
45
+ expect(formatting.unescape('Hello <@U123|bob> &gt; file.txt')).to eq 'Hello @bob > file.txt'
34
46
  end
35
47
  it 'unescapes a double smart quote' do
36
- expect(subject.unescape('“hello”')).to eq '"hello"'
48
+ expect(formatting.unescape('“hello”')).to eq '"hello"'
37
49
  end
38
50
  it 'unescapes a single smart quote' do
39
- expect(subject.unescape('‘hello’')).to eq "'hello'"
51
+ expect(formatting.unescape('‘hello’')).to eq "'hello'"
40
52
  end
41
53
  end
42
54
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' } do
@@ -7,8 +8,12 @@ RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' }
7
8
  before do
8
9
  allow(client).to receive(:next_id).and_return(42)
9
10
  end
11
+
10
12
  it 'sends message' do
11
- expect(socket).to receive(:send_data).with({ type: 'message', id: 42, text: 'hello world', channel: 'channel' }.to_json)
13
+ expect(socket).to(
14
+ receive(:send_data)
15
+ .with({ type: 'message', id: 42, text: 'hello world', channel: 'channel' }.to_json)
16
+ )
12
17
  client.message(text: 'hello world', channel: 'channel')
13
18
  end
14
19
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' } do
@@ -7,6 +8,7 @@ RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' }
7
8
  before do
8
9
  allow(client).to receive(:next_id).and_return(42)
9
10
  end
11
+
10
12
  it 'sends message' do
11
13
  expect(socket).to receive(:send_data).with({ type: 'ping', id: 42 }.to_json)
12
14
  client.ping
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' } do
@@ -7,8 +8,11 @@ RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' }
7
8
  before do
8
9
  allow(client).to receive(:next_id).and_return(42)
9
10
  end
11
+
10
12
  it 'sends a typing indicator' do
11
- expect(socket).to receive(:send_data).with({ type: 'typing', id: 42, channel: 'channel' }.to_json)
13
+ expect(socket).to(
14
+ receive(:send_data).with({ type: 'typing', id: 42, channel: 'channel' }.to_json)
15
+ )
12
16
  client.typing(channel: 'channel')
13
17
  end
14
18
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  RSpec.describe Slack::RealTime::Client do
4
5
  let(:ws) { double(Slack::RealTime::Concurrency::Mock::WebSocket, on: true) }
6
+
5
7
  before do
6
8
  @token = ENV.delete('SLACK_API_TOKEN')
7
9
  Slack::Config.reset
@@ -10,49 +12,78 @@ RSpec.describe Slack::RealTime::Client do
10
12
  config.concurrency = Slack::RealTime::Concurrency::Mock
11
13
  end
12
14
  end
15
+
13
16
  after do
14
17
  ENV['SLACK_API_TOKEN'] = @token if @token
15
18
  end
19
+
16
20
  context 'token' do
17
21
  before do
18
22
  Slack.configure do |config|
19
23
  config.token = 'global default'
20
24
  end
21
25
  end
26
+
22
27
  it 'defaults token to global default' do
23
- client = Slack::RealTime::Client.new
28
+ client = described_class.new
24
29
  expect(client.token).to eq 'global default'
25
30
  expect(client.web_client.token).to eq 'global default'
26
31
  end
27
32
  context 'with real time config' do
28
33
  before do
29
- Slack::RealTime::Client.configure do |config|
34
+ described_class.configure do |config|
30
35
  config.token = 'custom real time token'
31
36
  end
32
37
  end
38
+
33
39
  it 'overrides token to real time config' do
34
- client = Slack::RealTime::Client.new
40
+ client = described_class.new
35
41
  expect(client.token).to eq 'custom real time token'
36
42
  expect(client.web_client.token).to eq 'custom real time token'
37
43
  end
38
44
  it 'overrides token to specific token' do
39
- client = Slack::RealTime::Client.new(token: 'local token')
45
+ client = described_class.new(token: 'local token')
40
46
  expect(client.token).to eq 'local token'
41
47
  expect(client.web_client.token).to eq 'local token'
42
48
  end
43
49
  end
44
50
  end
45
- context 'client with a full store', vcr: { cassette_name: 'web/rtm_start' } do
46
- let(:client) { Slack::RealTime::Client.new(store_class: Slack::RealTime::Stores::Store) }
51
+
52
+ context 'websocket_ping_timer' do
53
+ context 'with defaults' do
54
+ let(:client) { described_class.new }
55
+
56
+ it 'defaults to websocket_ping / 2' do
57
+ expect(client.websocket_ping_timer).to eq 15
58
+ end
59
+ end
60
+
61
+ context 'with websocket_ping value changed' do
62
+ let(:client) { described_class.new(websocket_ping: 22) }
63
+
64
+ it 'defaults to websocket_ping / 2' do
65
+ expect(client.websocket_ping_timer).to eq 11
66
+ end
67
+ end
68
+ end
69
+
70
+ context 'client with a full store',
71
+ vcr: { cassette_name: 'web/rtm_start', allow_playback_repeats: true } do
72
+ let(:client) { described_class.new(store_class: Slack::RealTime::Stores::Store) }
47
73
  let(:url) { 'wss://ms173.slack-msgs.com/websocket/lqcUiAvrKTP-uuid=' }
74
+
48
75
  describe '#start!' do
49
76
  let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
77
+
50
78
  before do
51
- allow(Slack::RealTime::Socket).to receive(:new).with(url, ping: 30, logger: Slack::Logger.default).and_return(socket)
79
+ allow(Slack::RealTime::Socket).to(
80
+ receive(:new).with(url, ping: 30, logger: Slack::Logger.default).and_return(socket)
81
+ )
52
82
  allow(socket).to receive(:connect!)
53
83
  allow(socket).to receive(:start_sync)
54
84
  client.start!
55
85
  end
86
+
56
87
  describe 'properties provided upon connection' do
57
88
  it 'sets url' do
58
89
  expect(client.url).to eq url
@@ -86,7 +117,13 @@ RSpec.describe Slack::RealTime::Client do
86
117
  it 'sets groups' do
87
118
  expect(client.groups.count).to eq 1
88
119
  end
120
+ it 'includes team name in to_s' do
121
+ expect(client.to_s).to eq(
122
+ "id=#{client.team.id}, name=#{client.team.name}, domain=#{client.team.domain}"
123
+ )
124
+ end
89
125
  end
126
+
90
127
  it 'uses web client to fetch url' do
91
128
  expect(client.web_client).to be_a Slack::Web::Client
92
129
  end
@@ -100,9 +137,10 @@ RSpec.describe Slack::RealTime::Client do
100
137
  end
101
138
  describe '#stop!' do
102
139
  before do
103
- expect(socket).to receive(:disconnect!)
140
+ allow(socket).to receive(:disconnect!)
104
141
  client.stop!
105
142
  end
143
+
106
144
  it 'cannot be invoked twice' do
107
145
  client.instance_variable_set('@socket', nil) # caused by a :close callback
108
146
  expect do
@@ -110,12 +148,14 @@ RSpec.describe Slack::RealTime::Client do
110
148
  end.to raise_error Slack::RealTime::Client::ClientNotStartedError
111
149
  end
112
150
  end
151
+
113
152
  describe '#next_id' do
114
153
  it 'increments' do
115
154
  previous_id = client.send(:next_id)
116
155
  expect(client.send(:next_id)).to eq previous_id + 1
117
156
  end
118
157
  end
158
+
119
159
  context 'subclassed' do
120
160
  it 'runs event handlers' do
121
161
  event = Slack::RealTime::Event.new(
@@ -126,19 +166,106 @@ RSpec.describe Slack::RealTime::Client do
126
166
  expect(client.store.team.name).to eq 'New Team Name Inc.'
127
167
  end
128
168
  end
169
+
170
+ describe '#run_handlers' do
171
+ describe 'empty events' do
172
+ before do
173
+ @e = client.store.class.events
174
+ client.store.class.events = nil
175
+ end
176
+
177
+ after do
178
+ client.store.class.events = @e
179
+ end
180
+
181
+ it 'returns false when event is nil' do
182
+ expect(client.send(:run_handlers, 'example', {})).to be nil
183
+ end
184
+ end
185
+ end
186
+ end
187
+
188
+ describe '#start_async' do
189
+ let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
190
+
191
+ before do
192
+ allow(Slack::RealTime::Socket).to(
193
+ receive(:new).with(url, ping: 30, logger: Slack::Logger.default).and_return(socket)
194
+ )
195
+ allow(socket).to receive(:connect!)
196
+ allow(socket).to receive(:start_async)
197
+ client.start_async
198
+ end
199
+
200
+ describe '#run_ping!' do
201
+ it 'sends ping messages when the websocket connection is idle' do
202
+ allow(socket).to receive(:time_since_last_message).and_return(30)
203
+ expect(socket).to receive(:send_data).with('{"type":"ping","id":1}')
204
+ client.run_ping!
205
+ end
206
+ it 'reconnects the websocket if it has been idle for too long' do
207
+ allow(socket).to receive(:time_since_last_message).and_return(75)
208
+ allow(socket).to receive(:connected?).and_return(true)
209
+ expect(socket).to receive(:close)
210
+ expect(socket).to receive(:restart_async)
211
+ client.run_ping!
212
+ end
213
+ [
214
+ EOFError,
215
+ Errno::ECONNRESET,
216
+ Errno::EPIPE,
217
+ Faraday::ClientError,
218
+ Slack::Web::Api::Errors::SlackError
219
+ ].each do |err|
220
+ context "raising #{err}" do
221
+ it 'does not terminate the ping worker' do
222
+ allow(socket).to receive(:time_since_last_message) { raise err }
223
+ expect(socket).not_to receive(:send_data)
224
+ client.run_ping!
225
+ end
226
+ end
227
+ end
228
+ context 'raising Slack::Web::Api::Errors::SlackError' do
229
+ %w[invalid_auth account_inactive].each do |code|
230
+ context code do
231
+ it 'does not terminate the ping worker' do
232
+ allow(socket).to receive(:time_since_last_message) {
233
+ raise Slack::Web::Api::Errors::SlackError, code
234
+ }
235
+ expect(socket).not_to receive(:send_data)
236
+ expect do
237
+ client.run_ping!
238
+ end.to raise_error Slack::Web::Api::Errors::SlackError, code
239
+ end
240
+ end
241
+ end
242
+ end
243
+ end
244
+ end
245
+
246
+ describe 'to_s' do
247
+ it 'defaults to class instance' do
248
+ expect(client.to_s).to match(/^#<Slack::RealTime::Client:0x\h+>$/)
249
+ end
129
250
  end
130
251
  end
252
+
131
253
  context 'client with starter store', vcr: { cassette_name: 'web/rtm_connect' } do
132
- let(:client) { Slack::RealTime::Client.new(store_class: Slack::RealTime::Stores::Starter) }
254
+ let(:client) { described_class.new(store_class: Slack::RealTime::Stores::Starter) }
133
255
  let(:url) { 'wss://mpmulti-w5tz.slack-msgs.com/websocket/uid' }
256
+
134
257
  describe '#start!' do
135
258
  let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
259
+
136
260
  before do
137
- allow(Slack::RealTime::Socket).to receive(:new).with(url, ping: 30, logger: Slack::Logger.default).and_return(socket)
261
+ allow(Slack::RealTime::Socket).to(
262
+ receive(:new).with(url, ping: 30, logger: Slack::Logger.default).and_return(socket)
263
+ )
138
264
  allow(socket).to receive(:connect!)
139
265
  allow(socket).to receive(:start_sync)
140
266
  client.start!
141
267
  end
268
+
142
269
  describe 'properties provided upon connection' do
143
270
  it 'sets url' do
144
271
  expect(client.url).to eq url
@@ -167,7 +294,13 @@ RSpec.describe Slack::RealTime::Client do
167
294
  it 'no groups' do
168
295
  expect(client.groups).to be_nil
169
296
  end
297
+ it 'includes team name in to_s' do
298
+ expect(client.to_s).to eq(
299
+ "id=#{client.team.id}, name=#{client.team.name}, domain=#{client.team.domain}"
300
+ )
301
+ end
170
302
  end
303
+
171
304
  it 'uses web client to fetch url' do
172
305
  expect(client.web_client).to be_a Slack::Web::Client
173
306
  end
@@ -181,9 +314,10 @@ RSpec.describe Slack::RealTime::Client do
181
314
  end
182
315
  describe '#stop!' do
183
316
  before do
184
- expect(socket).to receive(:disconnect!)
317
+ allow(socket).to receive(:disconnect!)
185
318
  client.stop!
186
319
  end
320
+
187
321
  it 'cannot be invoked twice' do
188
322
  client.instance_variable_set('@socket', nil) # caused by a :close callback
189
323
  expect do
@@ -191,6 +325,7 @@ RSpec.describe Slack::RealTime::Client do
191
325
  end.to raise_error Slack::RealTime::Client::ClientNotStartedError
192
326
  end
193
327
  end
328
+
194
329
  describe '#next_id' do
195
330
  it 'increments' do
196
331
  previous_id = client.send(:next_id)
@@ -199,9 +334,11 @@ RSpec.describe Slack::RealTime::Client do
199
334
  end
200
335
  end
201
336
  end
337
+
202
338
  context 'client with nil store', vcr: { cassette_name: 'web/rtm_connect' } do
203
- let(:client) { Slack::RealTime::Client.new(store_class: nil) }
339
+ let(:client) { described_class.new(store_class: nil) }
204
340
  let(:url) { 'wss://mpmulti-w5tz.slack-msgs.com/websocket/uid' }
341
+
205
342
  it 'sets store to nil' do
206
343
  expect(client.store).to be nil
207
344
  end
@@ -210,7 +347,7 @@ RSpec.describe Slack::RealTime::Client do
210
347
  'type' => 'team_rename',
211
348
  'name' => 'New Team Name Inc.'
212
349
  )
213
- expect(client).to_not receive(:run_handlers)
350
+ expect(client).not_to receive(:run_handlers)
214
351
  client.send(:dispatch, event)
215
352
  end
216
353
  it 'self' do
@@ -219,9 +356,16 @@ RSpec.describe Slack::RealTime::Client do
219
356
  it 'team' do
220
357
  expect(client.team).to be nil
221
358
  end
359
+ describe 'to_s' do
360
+ it 'defaults to class instance' do
361
+ expect(client.to_s).to match(/^#<Slack::RealTime::Client:0x\h+>$/)
362
+ end
363
+ end
222
364
  end
365
+
223
366
  context 'client with defaults' do
224
- let(:client) { Slack::RealTime::Client.new }
367
+ let(:client) { described_class.new }
368
+
225
369
  describe '#initialize' do
226
370
  it 'sets ping' do
227
371
  expect(client.websocket_ping).to eq 30
@@ -241,38 +385,70 @@ RSpec.describe Slack::RealTime::Client do
241
385
  end
242
386
  end
243
387
  end
388
+
389
+ describe '#run_ping?' do
390
+ it 'returns true when websocket_ping is greater than 0' do
391
+ client.websocket_ping = 30
392
+ expect(client.run_ping?).to be true
393
+ end
394
+ it 'returns false when websocket_ping is less than 1' do
395
+ client.websocket_ping = 0
396
+ expect(client.run_ping?).to be false
397
+ client.websocket_ping = nil
398
+ expect(client.run_ping?).to be false
399
+ end
400
+ end
244
401
  end
402
+
245
403
  context 'with custom settings' do
246
404
  describe '#initialize' do
247
405
  Slack::RealTime::Config::ATTRIBUTES.each do |key|
248
- context key do
249
- let(:client) { Slack::RealTime::Client.new(key => 'custom') }
406
+ context key.to_s do
407
+ let(:client) { described_class.new(key => 'custom') }
408
+
250
409
  it "sets #{key}" do
251
- expect(client.send(key)).to_not eq Slack::RealTime::Config.send(key)
410
+ expect(client.send(key)).not_to eq Slack::RealTime::Config.send(key)
252
411
  expect(client.send(key)).to eq 'custom'
253
412
  end
254
413
  end
255
414
  end
256
415
  end
416
+
417
+ describe 'logger accessor' do
418
+ let(:client) { described_class.new }
419
+
420
+ it 'exposes public logger' do
421
+ expect(client.logger).to be_a(::Logger)
422
+ end
423
+ it 'exposes public logger=' do
424
+ expect { client.logger = nil }.not_to raise_error(NoMethodError)
425
+ end
426
+ end
257
427
  end
428
+
258
429
  context 'global config' do
259
430
  after do
260
- Slack::RealTime::Client.config.reset
431
+ described_class.config.reset
261
432
  end
433
+
262
434
  let(:url) { 'wss://ms173.slack-msgs.com/websocket/lqcUiAvrKTP-uuid=' }
263
- let(:client) { Slack::RealTime::Client.new }
435
+ let(:client) { described_class.new }
436
+
264
437
  context 'ping' do
265
438
  before do
266
- Slack::RealTime::Client.configure do |config|
439
+ described_class.configure do |config|
267
440
  config.websocket_ping = 15
268
441
  end
269
442
  end
443
+
270
444
  describe '#initialize' do
271
445
  it 'sets ping' do
272
446
  expect(client.websocket_ping).to eq 15
273
447
  end
274
448
  it 'creates a connection with custom ping', vcr: { cassette_name: 'web/rtm_start' } do
275
- expect(Slack::RealTime::Concurrency::Mock::WebSocket).to receive(:new).with(url, nil, ping: 15).and_return(ws)
449
+ expect(Slack::RealTime::Concurrency::Mock::WebSocket).to(
450
+ receive(:new).with(url, nil, ping: 15).and_return(ws)
451
+ )
276
452
  client.start!
277
453
  end
278
454
  it 'sets start_options' do
@@ -280,15 +456,17 @@ RSpec.describe Slack::RealTime::Client do
280
456
  end
281
457
  end
282
458
  end
459
+
283
460
  context 'proxy' do
284
461
  before do
285
- Slack::RealTime::Client.configure do |config|
462
+ described_class.configure do |config|
286
463
  config.websocket_proxy = {
287
464
  origin: 'http://username:password@proxy.example.com',
288
465
  headers: { 'User-Agent' => 'ruby' }
289
466
  }
290
467
  end
291
468
  end
469
+
292
470
  describe '#initialize' do
293
471
  it 'sets proxy' do
294
472
  expect(client.websocket_proxy).to eq(
@@ -310,40 +488,48 @@ RSpec.describe Slack::RealTime::Client do
310
488
  end
311
489
  end
312
490
  end
491
+
313
492
  context 'start_options' do
314
493
  before do
315
- Slack::RealTime::Client.configure do |config|
494
+ described_class.configure do |config|
316
495
  config.start_options = { simple_latest: true }
317
496
  end
318
497
  end
498
+
319
499
  describe '#initialize' do
320
500
  it 'sets start_options' do
321
501
  expect(client.start_options).to eq(simple_latest: true)
322
502
  end
323
503
  context 'start!' do
324
504
  let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
505
+
325
506
  before do
326
507
  allow(Slack::RealTime::Socket).to receive(:new).and_return(socket)
327
508
  allow(socket).to receive(:connect!)
328
509
  allow(socket).to receive(:start_sync)
329
510
  end
511
+
330
512
  it 'calls rtm_start with start options', vcr: { cassette_name: 'web/rtm_start' } do
331
- expect(client.web_client).to receive(:rtm_start).with(simple_latest: true).and_call_original
513
+ expect(client.web_client).to(
514
+ receive(:rtm_start).with(simple_latest: true).and_call_original
515
+ )
332
516
  client.start!
333
517
  end
334
518
  end
335
519
  end
336
520
  end
521
+
337
522
  context 'store_class' do
338
523
  context 'starter' do
339
524
  before do
340
- Slack::RealTime::Client.configure do |config|
525
+ described_class.configure do |config|
341
526
  config.store_class = Slack::RealTime::Stores::Starter
342
527
  end
343
528
  end
529
+
344
530
  describe '#initialize' do
345
531
  it 'can be overriden explicitly' do
346
- client = Slack::RealTime::Client.new(store_class: Slack::RealTime::Store)
532
+ client = described_class.new(store_class: Slack::RealTime::Store)
347
533
  expect(client.send(:store_class)).to eq Slack::RealTime::Store
348
534
  end
349
535
  it 'sets store_class' do
@@ -351,11 +537,13 @@ RSpec.describe Slack::RealTime::Client do
351
537
  end
352
538
  context 'start!' do
353
539
  let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
540
+
354
541
  before do
355
542
  allow(Slack::RealTime::Socket).to receive(:new).and_return(socket)
356
543
  allow(socket).to receive(:connect!)
357
544
  allow(socket).to receive(:start_sync)
358
545
  end
546
+
359
547
  it 'instantiates the correct store class', vcr: { cassette_name: 'web/rtm_connect' } do
360
548
  client.start!
361
549
  expect(client.store).to be_a Slack::RealTime::Stores::Starter
@@ -363,20 +551,24 @@ RSpec.describe Slack::RealTime::Client do
363
551
  end
364
552
  end
365
553
  end
554
+
366
555
  context 'store' do
367
556
  before do
368
- Slack::RealTime::Client.configure do |config|
557
+ described_class.configure do |config|
369
558
  config.store_class = Slack::RealTime::Stores::Store
370
559
  end
371
560
  end
561
+
372
562
  describe '#initialize' do
373
563
  context 'start!' do
374
564
  let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
565
+
375
566
  before do
376
567
  allow(Slack::RealTime::Socket).to receive(:new).and_return(socket)
377
568
  allow(socket).to receive(:connect!)
378
569
  allow(socket).to receive(:start_sync)
379
570
  end
571
+
380
572
  it 'calls rtm_start and not rtm_connect', vcr: { cassette_name: 'web/rtm_start' } do
381
573
  expect(client.web_client).to receive(:rtm_start).and_call_original
382
574
  client.start!
@@ -385,18 +577,20 @@ RSpec.describe Slack::RealTime::Client do
385
577
  end
386
578
  end
387
579
  end
580
+
388
581
  context 'start_method' do
389
582
  describe '#initialize' do
390
583
  it 'can be overriden explicitly' do
391
- client = Slack::RealTime::Client.new(start_method: :overriden)
584
+ client = described_class.new(start_method: :overriden)
392
585
  expect(client.send(:start_method)).to eq :overriden
393
586
  end
394
587
  context 'with start_method' do
395
588
  before do
396
- Slack::RealTime::Client.configure do |config|
589
+ described_class.configure do |config|
397
590
  config.start_method = :overriden
398
591
  end
399
592
  end
593
+
400
594
  it 'sets start_method' do
401
595
  expect(client.send(:start_method)).to eq :overriden
402
596
  end
@@ -407,14 +601,18 @@ RSpec.describe Slack::RealTime::Client do
407
601
  end.to raise_error RuntimeError, 'overriden'
408
602
  end
409
603
  end
604
+
410
605
  context 'start!' do
411
606
  let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
607
+
412
608
  before do
413
609
  allow(Slack::RealTime::Socket).to receive(:new).and_return(socket)
414
610
  allow(socket).to receive(:connect!)
415
611
  allow(socket).to receive(:start_sync)
416
612
  end
417
- it 'defaults to :rtm_start when using full store', vcr: { cassette_name: 'web/rtm_start' } do
613
+
614
+ it 'defaults to :rtm_start when using full store',
615
+ vcr: { cassette_name: 'web/rtm_start' } do
418
616
  expect(client.web_client).to receive(:rtm_start).and_call_original
419
617
  client.start!
420
618
  end