slack-ruby-client 1.0.0 → 2.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 (239) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.github/workflows/integration_test.yml +45 -0
  4. data/.github/workflows/lint.yml +14 -0
  5. data/.github/workflows/pr_lint.yml +21 -0
  6. data/.github/workflows/test.yml +37 -0
  7. data/.gitignore +4 -3
  8. data/.rubocop.yml +6 -1
  9. data/.rubocop_todo.yml +88 -34
  10. data/.ruby-version +1 -0
  11. data/CHANGELOG.md +36 -0
  12. data/CONTRIBUTING.md +6 -5
  13. data/Gemfile +13 -1
  14. data/Gemfile.danger +6 -0
  15. data/README.md +78 -76
  16. data/RELEASING.md +2 -2
  17. data/SECURITY.md +9 -0
  18. data/UPGRADING.md +28 -0
  19. data/bin/commands/admin_analytics.rb +16 -10
  20. data/bin/commands/admin_apps.rb +48 -42
  21. data/bin/commands/admin_apps_approved.rb +17 -11
  22. data/bin/commands/admin_apps_requests.rb +28 -11
  23. data/bin/commands/admin_apps_restricted.rb +17 -11
  24. data/bin/commands/admin_audit_anomaly_allow.rb +29 -0
  25. data/bin/commands/admin_auth_policy.rb +37 -31
  26. data/bin/commands/admin_barriers.rb +44 -38
  27. data/bin/commands/admin_conversations.rb +221 -163
  28. data/bin/commands/admin_conversations_ekm.rb +17 -11
  29. data/bin/commands/admin_conversations_restrictAccess.rb +35 -29
  30. data/bin/commands/admin_emoji.rb +50 -44
  31. data/bin/commands/admin_inviteRequests.rb +34 -28
  32. data/bin/commands/admin_inviteRequests_approved.rb +16 -10
  33. data/bin/commands/admin_inviteRequests_denied.rb +16 -10
  34. data/bin/commands/admin_roles.rb +46 -0
  35. data/bin/commands/admin_teams.rb +26 -20
  36. data/bin/commands/admin_teams_admins.rb +16 -10
  37. data/bin/commands/admin_teams_owners.rb +16 -10
  38. data/bin/commands/admin_teams_settings.rb +59 -53
  39. data/bin/commands/admin_usergroups.rb +45 -39
  40. data/bin/commands/admin_users.rb +91 -85
  41. data/bin/commands/admin_users_session.rb +72 -66
  42. data/bin/commands/admin_users_unsupportedVersions.rb +21 -0
  43. data/bin/commands/api.rb +14 -8
  44. data/bin/commands/apps.rb +15 -9
  45. data/bin/commands/apps_connections.rb +13 -7
  46. data/bin/commands/apps_event_authorizations.rb +16 -10
  47. data/bin/commands/apps_manifest.rb +48 -41
  48. data/bin/commands/auth.rb +21 -15
  49. data/bin/commands/auth_teams.rb +16 -10
  50. data/bin/commands/bookmarks.rb +59 -0
  51. data/bin/commands/bots.rb +15 -9
  52. data/bin/commands/calls.rb +49 -43
  53. data/bin/commands/calls_participants.rb +24 -18
  54. data/bin/commands/chat.rb +150 -141
  55. data/bin/commands/chat_scheduledMessages.rb +19 -13
  56. data/bin/commands/conversations.rb +233 -225
  57. data/bin/commands/dialog.rb +15 -9
  58. data/bin/commands/dnd.rb +46 -40
  59. data/bin/commands/emoji.rb +14 -7
  60. data/bin/commands/files.rb +112 -83
  61. data/bin/commands/files_comments.rb +15 -9
  62. data/bin/commands/files_remote.rb +73 -67
  63. data/bin/commands/functions_workflows_steps.rb +22 -0
  64. data/bin/commands/functions_workflows_steps_responses.rb +22 -0
  65. data/bin/commands/migration.rb +16 -10
  66. data/bin/commands/oauth.rb +18 -12
  67. data/bin/commands/oauth_v2.rb +28 -22
  68. data/bin/commands/openid_connect.rb +26 -20
  69. data/bin/commands/pins.rb +33 -26
  70. data/bin/commands/reactions.rb +52 -46
  71. data/bin/commands/reminders.rb +53 -47
  72. data/bin/commands/rtm.rb +15 -24
  73. data/bin/commands/search.rb +43 -37
  74. data/bin/commands/stars.rb +38 -32
  75. data/bin/commands/team.rb +47 -38
  76. data/bin/commands/team_billing.rb +13 -7
  77. data/bin/commands/team_preferences.rb +13 -7
  78. data/bin/commands/team_profile.rb +14 -8
  79. data/bin/commands/tooling_tokens.rb +14 -8
  80. data/bin/commands/usergroups.rb +64 -58
  81. data/bin/commands/usergroups_users.rb +27 -21
  82. data/bin/commands/users.rb +111 -105
  83. data/bin/commands/users_admin.rb +28 -22
  84. data/bin/commands/users_prefs.rb +13 -7
  85. data/bin/commands/users_profile.rb +26 -20
  86. data/bin/commands/views.rb +47 -39
  87. data/bin/commands/workflows.rb +36 -30
  88. data/bin/slack +48 -43
  89. data/lib/slack/real_time/api/message.rb +3 -2
  90. data/lib/slack/real_time/api/templates/event_handler.erb +5 -1
  91. data/lib/slack/real_time/api/typing.rb +2 -1
  92. data/lib/slack/real_time/client.rb +10 -28
  93. data/lib/slack/real_time/config.rb +3 -3
  94. data/lib/slack/real_time/models/channel.rb +4 -0
  95. data/lib/slack/real_time/models/{group.rb → mpim.rb} +1 -1
  96. data/lib/slack/real_time/models.rb +2 -1
  97. data/lib/slack/real_time/stores/base.rb +25 -9
  98. data/lib/slack/real_time/stores/starter.rb +323 -309
  99. data/lib/slack/real_time/stores/store.rb +265 -198
  100. data/lib/slack/real_time/stores.rb +1 -7
  101. data/lib/slack/version.rb +1 -1
  102. data/lib/slack/web/api/endpoints/admin_analytics.rb +2 -2
  103. data/lib/slack/web/api/endpoints/admin_apps.rb +2 -2
  104. data/lib/slack/web/api/endpoints/admin_apps_requests.rb +16 -0
  105. data/lib/slack/web/api/endpoints/admin_audit_anomaly_allow.rb +34 -0
  106. data/lib/slack/web/api/endpoints/admin_auth_policy.rb +7 -7
  107. data/lib/slack/web/api/endpoints/admin_barriers.rb +8 -8
  108. data/lib/slack/web/api/endpoints/admin_conversations.rb +110 -28
  109. data/lib/slack/web/api/endpoints/admin_conversations_restrictAccess.rb +6 -6
  110. data/lib/slack/web/api/endpoints/admin_emoji.rb +9 -9
  111. data/lib/slack/web/api/endpoints/admin_inviteRequests.rb +2 -2
  112. data/lib/slack/web/api/endpoints/admin_roles.rb +73 -0
  113. data/lib/slack/web/api/endpoints/admin_teams.rb +2 -2
  114. data/lib/slack/web/api/endpoints/admin_teams_admins.rb +1 -1
  115. data/lib/slack/web/api/endpoints/admin_teams_owners.rb +1 -1
  116. data/lib/slack/web/api/endpoints/admin_teams_settings.rb +11 -11
  117. data/lib/slack/web/api/endpoints/admin_usergroups.rb +7 -7
  118. data/lib/slack/web/api/endpoints/admin_users.rb +16 -16
  119. data/lib/slack/web/api/endpoints/admin_users_session.rb +8 -8
  120. data/lib/slack/web/api/endpoints/admin_users_unsupportedVersions.rb +25 -0
  121. data/lib/slack/web/api/endpoints/apps.rb +2 -2
  122. data/lib/slack/web/api/endpoints/apps_connections.rb +1 -1
  123. data/lib/slack/web/api/endpoints/apps_event_authorizations.rb +1 -1
  124. data/lib/slack/web/api/endpoints/apps_manifest.rb +8 -6
  125. data/lib/slack/web/api/endpoints/bookmarks.rb +88 -0
  126. data/lib/slack/web/api/endpoints/bots.rb +1 -1
  127. data/lib/slack/web/api/endpoints/calls.rb +5 -5
  128. data/lib/slack/web/api/endpoints/calls_participants.rb +4 -4
  129. data/lib/slack/web/api/endpoints/chat.rb +37 -31
  130. data/lib/slack/web/api/endpoints/conversations.rb +38 -34
  131. data/lib/slack/web/api/endpoints/dialog.rb +2 -2
  132. data/lib/slack/web/api/endpoints/dnd.rb +1 -1
  133. data/lib/slack/web/api/endpoints/emoji.rb +2 -0
  134. data/lib/slack/web/api/endpoints/files.rb +45 -10
  135. data/lib/slack/web/api/endpoints/files_comments.rb +2 -2
  136. data/lib/slack/web/api/endpoints/files_remote.rb +8 -8
  137. data/lib/slack/web/api/endpoints/functions_workflows_steps.rb +28 -0
  138. data/lib/slack/web/api/endpoints/functions_workflows_steps_responses.rb +28 -0
  139. data/lib/slack/web/api/endpoints/migration.rb +1 -1
  140. data/lib/slack/web/api/endpoints/oauth_v2.rb +2 -2
  141. data/lib/slack/web/api/endpoints/pins.rb +5 -3
  142. data/lib/slack/web/api/endpoints/reactions.rb +4 -4
  143. data/lib/slack/web/api/endpoints/reminders.rb +5 -5
  144. data/lib/slack/web/api/endpoints/rtm.rb +0 -23
  145. data/lib/slack/web/api/endpoints/search.rb +3 -3
  146. data/lib/slack/web/api/endpoints/team.rb +13 -1
  147. data/lib/slack/web/api/endpoints/tooling_tokens.rb +1 -1
  148. data/lib/slack/web/api/endpoints/usergroups.rb +5 -5
  149. data/lib/slack/web/api/endpoints/usergroups_users.rb +3 -3
  150. data/lib/slack/web/api/endpoints/users.rb +4 -4
  151. data/lib/slack/web/api/endpoints/users_admin.rb +2 -2
  152. data/lib/slack/web/api/endpoints/users_profile.rb +1 -1
  153. data/lib/slack/web/api/endpoints/views.rb +16 -11
  154. data/lib/slack/web/api/endpoints/workflows.rb +4 -4
  155. data/lib/slack/web/api/endpoints.rb +12 -0
  156. data/lib/slack/web/api/errors.rb +146 -8
  157. data/lib/slack/web/api/mixins/conversations.id.rb +1 -1
  158. data/lib/slack/web/api/mixins/users.id.rb +1 -1
  159. data/lib/slack/web/api/mixins/users.search.rb +2 -1
  160. data/lib/slack/web/api/patches/{chat.1.patch → chat.attachments-blocks.patch} +13 -14
  161. data/lib/slack/web/api/patches/{dialog.1.open-json-support.patch → dialog.encoded-json.patch} +4 -4
  162. data/lib/slack/web/api/patches/views.view-json.patch +55 -0
  163. data/lib/slack/web/api/templates/command.erb +18 -12
  164. data/lib/slack/web/api/templates/method.erb +1 -1
  165. data/lib/slack/web/config.rb +2 -2
  166. data/lib/slack/web/faraday/connection.rb +4 -4
  167. data/lib/slack/web/faraday/request.rb +2 -0
  168. data/lib/slack/web/faraday/response/raise_error.rb +2 -10
  169. data/lib/slack/web/faraday/response/wrap_error.rb +1 -1
  170. data/lib/slack-ruby-client.rb +2 -1
  171. data/lib/tasks/real_time.rake +44 -24
  172. data/lib/tasks/web.rake +9 -8
  173. data/slack-ruby-client.gemspec +5 -14
  174. data/spec/fixtures/slack/web/rtm_connect.yml +85 -1
  175. data/spec/integration/integration_spec.rb +1 -1
  176. data/spec/slack/events/config_spec.rb +2 -0
  177. data/spec/slack/events/request_spec.rb +5 -1
  178. data/spec/slack/messages/formatting_spec.rb +10 -0
  179. data/spec/slack/real_time/api/message_spec.rb +1 -1
  180. data/spec/slack/real_time/api/ping_spec.rb +1 -1
  181. data/spec/slack/real_time/api/typing_spec.rb +1 -1
  182. data/spec/slack/real_time/client_spec.rb +91 -127
  183. data/spec/slack/real_time/event_handlers/bot_spec.rb +19 -17
  184. data/spec/slack/real_time/event_handlers/event_handlers_spec.rb +1 -1
  185. data/spec/slack/real_time/event_handlers/im_spec.rb +30 -27
  186. data/spec/slack/real_time/event_handlers/{group_spec.rb → private_channel_spec.rb} +35 -27
  187. data/spec/slack/real_time/event_handlers/{channel_spec.rb → public_channel_spec.rb} +27 -23
  188. data/spec/slack/real_time/event_handlers/team_spec.rb +7 -8
  189. data/spec/slack/real_time/event_handlers/user_spec.rb +6 -5
  190. data/spec/slack/real_time/stores/store_spec.rb +50 -0
  191. data/spec/slack/slack_spec.rb +5 -4
  192. data/spec/slack/version_spec.rb +1 -1
  193. data/spec/slack/web/api/endpoints/admin_apps_requests_spec.rb +5 -0
  194. data/spec/slack/web/api/endpoints/admin_audit_anomaly_allow_spec.rb +8 -0
  195. data/spec/slack/web/api/endpoints/admin_conversations_spec.rb +31 -0
  196. data/spec/slack/web/api/endpoints/admin_roles_spec.rb +30 -0
  197. data/spec/slack/web/api/endpoints/admin_users_unsupportedVersions_spec.rb +8 -0
  198. data/spec/slack/web/api/endpoints/bookmarks_spec.rb +40 -0
  199. data/spec/slack/web/api/endpoints/custom_specs/chat_spec.rb +45 -17
  200. data/spec/slack/web/api/endpoints/custom_specs/dialog_spec.rb +6 -2
  201. data/spec/slack/web/api/endpoints/custom_specs/views_spec.rb +33 -16
  202. data/spec/slack/web/api/endpoints/files_spec.rb +13 -0
  203. data/spec/slack/web/api/endpoints/functions_workflows_steps_responses_spec.rb +13 -0
  204. data/spec/slack/web/api/endpoints/functions_workflows_steps_spec.rb +13 -0
  205. data/spec/slack/web/api/mixins/conversations_spec.rb +2 -0
  206. data/spec/slack/web/api/mixins/users_spec.rb +2 -0
  207. data/spec/slack/web/api/pagination/cursor_spec.rb +11 -7
  208. data/spec/slack/web/client_spec.rb +39 -11
  209. data/spec/slack/web/faraday/response/raise_error_spec.rb +1 -1
  210. data/spec/support/real_time/connected_client.rb +1 -1
  211. data/spec/support/real_time/loaded_client.rb +120 -0
  212. metadata +45 -197
  213. data/.travis.yml +0 -29
  214. data/bin/commands/admin_conversations_whitelist.rb +0 -37
  215. data/bin/commands/apps_permissions.rb +0 -23
  216. data/bin/commands/apps_permissions_resources.rb +0 -15
  217. data/bin/commands/apps_permissions_scopes.rb +0 -13
  218. data/bin/commands/apps_permissions_users.rb +0 -26
  219. data/bin/commands/channels.rb +0 -23
  220. data/bin/commands/groups.rb +0 -14
  221. data/bin/commands/im.rb +0 -6
  222. data/bin/commands/mpim.rb +0 -6
  223. data/bin/commands.rb +0 -66
  224. data/lib/slack/web/api/endpoints/admin_conversations_whitelist.rb +0 -64
  225. data/lib/slack/web/api/endpoints/apps_permissions.rb +0 -36
  226. data/lib/slack/web/api/endpoints/apps_permissions_resources.rb +0 -31
  227. data/lib/slack/web/api/endpoints/apps_permissions_scopes.rb +0 -21
  228. data/lib/slack/web/api/endpoints/apps_permissions_users.rb +0 -50
  229. data/lib/slack/web/api/endpoints/channels.rb +0 -25
  230. data/lib/slack/web/api/endpoints/groups.rb +0 -13
  231. data/lib/slack/web/api/endpoints/im.rb +0 -13
  232. data/lib/slack/web/api/endpoints/mpim.rb +0 -13
  233. data/lib/slack/web/api/endpoints/presence.rb +0 -23
  234. data/lib/slack/web/api/patches/views.1.view-json.patch +0 -40
  235. data/lib/slack/web/api/patches/views.1.views-published.patch +0 -16
  236. data/lib/slack/web/api/templates/commands.erb +0 -6
  237. data/spec/fixtures/slack/web/rtm_start.yml +0 -815
  238. data/spec/slack/real_time/rtm_start_spec.rb +0 -14
  239. data/spec/slack/real_time/store_spec.rb +0 -12
data/bin/slack CHANGED
@@ -2,50 +2,55 @@
2
2
  require 'gli'
3
3
  require 'slack_ruby_client'
4
4
 
5
- include GLI::App
6
-
7
- program_desc 'Slack client.'
8
-
9
- default_command :help
10
-
11
- switch %i[d debug], desc: 'Enable debug-level logging.', default_value: false
12
- flag [:t, 'slack-api-token'], desc: 'Slack API token.', default_value: ENV['SLACK_API_TOKEN']
13
- flag ['vcr-cassette-name'], desc: 'Offline VCR cassette.'
14
-
15
- pre do |global_options, _command, options, _args|
16
- # global Slack configuration
17
- Slack.config.token = global_options['slack-api-token']
18
- help_now! 'Set Slack API token via --slack-api-token or SLACK_API_TOKEN.' unless Slack.config.token && !Slack.config.token.empty?
19
-
20
- if global_options['debug']
21
- require 'logger'
22
- logger = Logger.new(STDOUT)
23
- logger.level = Logger::DEBUG
24
- Slack::Web::Client.config.logger = logger
25
- end
26
-
27
- $client = Slack::Web::Client.new
28
-
29
- # Offline VCR cassette
30
- if global_options['vcr-cassette-name']
31
- require 'webmock'
32
- WebMock.enable!
33
- require 'vcr'
34
- VCR.configure do |config|
35
- config.cassette_library_dir = 'spec/fixtures/slack'
36
- config.hook_into :webmock
37
- config.default_cassette_options = { record: :new_episodes }
5
+ module Slack
6
+ module Cli
7
+ class App
8
+ extend GLI::App
9
+
10
+ program_desc 'Slack client.'
11
+
12
+ default_command :help
13
+
14
+ switch %i[d debug], desc: 'Enable debug-level logging.', default_value: false
15
+ flag [:t, 'slack-api-token'], desc: 'Slack API token.', default_value: ENV['SLACK_API_TOKEN']
16
+ flag ['vcr-cassette-name'], desc: 'Offline VCR cassette.'
17
+
18
+ commands_from File.expand_path('commands', __dir__)
19
+
20
+ pre do |global_options, _command, options, _args|
21
+ # global Slack configuration
22
+ Slack.config.token = global_options['slack-api-token']
23
+ help_now! 'Set Slack API token via --slack-api-token or SLACK_API_TOKEN.' unless Slack.config.token && !Slack.config.token.empty?
24
+
25
+ if global_options['debug']
26
+ require 'logger'
27
+ logger = Logger.new(STDOUT)
28
+ logger.level = Logger::DEBUG
29
+ Slack::Web::Client.config.logger = logger
30
+ end
31
+
32
+ @client = Slack::Web::Client.new
33
+
34
+ # Offline VCR cassette
35
+ if global_options['vcr-cassette-name']
36
+ require 'webmock'
37
+ WebMock.enable!
38
+ require 'vcr'
39
+ VCR.configure do |config|
40
+ config.cassette_library_dir = 'spec/fixtures/slack'
41
+ config.hook_into :webmock
42
+ config.default_cassette_options = { record: :new_episodes }
43
+ end
44
+ VCR.insert_cassette global_options['vcr-cassette-name']
45
+ end
46
+
47
+ # remove any nil values from options
48
+ options.compact!
49
+
50
+ true
51
+ end
38
52
  end
39
- VCR.insert_cassette global_options['vcr-cassette-name']
40
53
  end
41
-
42
- # remove any nil values from options
43
- options.select! { |_k, v| v }
44
-
45
- true
46
54
  end
47
55
 
48
- $LOAD_PATH.push File.expand_path(__dir__)
49
- require 'commands'
50
-
51
- exit run(ARGV)
56
+ exit Slack::Cli::App.run(ARGV)
@@ -12,8 +12,9 @@ module Slack
12
12
  # @option options [Object] :text
13
13
  # Text of the message to send. See below for an explanation of formatting.
14
14
  def message(options = {})
15
- throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
16
- throw ArgumentError.new('Required arguments :text missing') if options[:text].nil?
15
+ raise ArgumentError, 'Required arguments :channel missing' if options[:channel].nil?
16
+ raise ArgumentError, 'Required arguments :text missing' if options[:text].nil?
17
+
17
18
  send_json({ type: 'message', id: next_id }.merge(options))
18
19
  end
19
20
  end
@@ -1,4 +1,8 @@
1
1
  # <%= desc %>
2
2
  # @see https://api.slack.com/events/<%= name %>
3
3
  # @see https://github.com/slack-ruby/slack-api-ref/blob/master/events/<%= name %>.json
4
- # on :<%= name %> do |data|
4
+ <% if hook %>
5
+ <%= hook %>
6
+ <% else %>
7
+ # on :<%= name %> do |data|
8
+ <% end %>
@@ -10,7 +10,8 @@ module Slack
10
10
  # Channel to send message to. Can be a public channel, private group or IM channel.
11
11
  # Can be an encoded ID, or a name.
12
12
  def typing(options = {})
13
- throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
13
+ raise ArgumentError, 'Required arguments :channel missing' if options[:channel].nil?
14
+
14
15
  send_json({ type: 'typing', id: next_id }.merge(options))
15
16
  end
16
17
  end
@@ -11,15 +11,9 @@ module Slack
11
11
  include Api::Message
12
12
  include Api::Typing
13
13
 
14
- @events = {}
15
-
16
- class << self
17
- attr_accessor :events
18
- end
19
-
20
14
  attr_accessor :web_client, :store, :url, *Config::ATTRIBUTES
21
15
 
22
- protected :store_class, :store_class=
16
+ protected :store_class, :store_class=, :store_options, :store_options=
23
17
 
24
18
  def initialize(options = {})
25
19
  @callbacks = Hash.new { |h, k| h[k] = [] }
@@ -31,7 +25,7 @@ module Slack
31
25
  @web_client = Slack::Web::Client.new(token: token, logger: logger)
32
26
  end
33
27
 
34
- %i[users self channels team teams groups ims bots].each do |store_method|
28
+ [:self, :team, *Stores::Base::CACHES].each do |store_method|
35
29
  define_method store_method do
36
30
  store&.send(store_method)
37
31
  end
@@ -44,7 +38,7 @@ module Slack
44
38
 
45
39
  # Start RealTime client and block until it disconnects.
46
40
  def start!(&block)
47
- @callback = block if block_given?
41
+ @callback = block if block
48
42
  build_socket
49
43
  @socket.start_sync(self)
50
44
  end
@@ -52,7 +46,7 @@ module Slack
52
46
  # Start RealTime client and return immediately.
53
47
  # The RealTime::Client will run in the background.
54
48
  def start_async(&block)
55
- @callback = block if block_given?
49
+ @callback = block if block
56
50
  build_socket
57
51
  @socket.start_async(self)
58
52
  end
@@ -162,10 +156,10 @@ module Slack
162
156
  def restart_async
163
157
  logger.debug("#{self}##{__method__}")
164
158
  @socket.close
165
- start = web_client.send(rtm_start_method, start_options)
159
+ start = web_client.rtm_connect(start_options)
166
160
  data = Slack::Messages::Message.new(start)
167
161
  @url = data.url
168
- @store = @store_class.new(data) if @store_class
162
+ @store = store_class.new(data, store_options.to_h) if store_class
169
163
  @socket.restart_async(self, @url)
170
164
  end
171
165
 
@@ -173,23 +167,13 @@ module Slack
173
167
  def build_socket
174
168
  raise ClientAlreadyStartedError if started?
175
169
 
176
- start = web_client.send(rtm_start_method, start_options)
170
+ start = web_client.rtm_connect(start_options)
177
171
  data = Slack::Messages::Message.new(start)
178
172
  @url = data.url
179
- @store = @store_class.new(data) if @store_class
173
+ @store = store_class.new(data, store_options.to_h) if store_class
180
174
  @socket = socket_class.new(@url, socket_options)
181
175
  end
182
176
 
183
- def rtm_start_method
184
- if start_method
185
- start_method
186
- elsif @store_class && @store_class <= Slack::RealTime::Stores::Store
187
- :rtm_start
188
- else
189
- :rtm_connect
190
- end
191
- end
192
-
193
177
  def socket_options
194
178
  socket_options = {}
195
179
  socket_options[:ping] = websocket_ping if websocket_ping
@@ -249,11 +233,9 @@ module Slack
249
233
  end
250
234
 
251
235
  def run_handlers(type, data)
252
- return unless store.class.events
253
-
254
236
  handlers = store.class.events[type.to_s]
255
- handlers&.each do |handler|
256
- store.instance_exec(data, &handler)
237
+ handlers.each do |handler|
238
+ store.instance_exec(data, self, &handler)
257
239
  end
258
240
  rescue StandardError => e
259
241
  logger.error("#{self}##{__method__}") { e }
@@ -11,9 +11,9 @@ module Slack
11
11
  websocket_ping
12
12
  websocket_proxy
13
13
  concurrency
14
- start_method
15
14
  start_options
16
15
  store_class
16
+ store_options
17
17
  logger
18
18
  ].freeze
19
19
 
@@ -25,9 +25,9 @@ module Slack
25
25
  self.websocket_proxy = nil
26
26
  self.token = nil
27
27
  self.concurrency = method(:detect_concurrency)
28
- self.start_method = nil
29
28
  self.start_options = { request: { timeout: 180 } }
30
- self.store_class = Slack::RealTime::Store
29
+ self.store_class = Slack::RealTime::Stores::Starter
30
+ self.store_options = {}
31
31
  self.logger = nil
32
32
  end
33
33
 
@@ -1,8 +1,12 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Slack
3
4
  module RealTime
4
5
  module Models
5
6
  class Channel < Base
7
+ def is_public? # rubocop:disable Naming/PredicateName
8
+ !is_private?
9
+ end
6
10
  end
7
11
  end
8
12
  end
@@ -2,7 +2,7 @@
2
2
  module Slack
3
3
  module RealTime
4
4
  module Models
5
- class Group < Base
5
+ class Mpim < Base
6
6
  end
7
7
  end
8
8
  end
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative 'models/base'
3
4
  require_relative 'models/user'
4
5
  require_relative 'models/bot'
5
6
  require_relative 'models/channel'
6
- require_relative 'models/group'
7
7
  require_relative 'models/team'
8
8
  require_relative 'models/im'
9
+ require_relative 'models/mpim'
@@ -1,14 +1,36 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Slack
3
4
  module RealTime
4
5
  module Stores
5
6
  # Doesn't store anything.
6
7
  class Base
8
+ CACHES = %i[
9
+ teams
10
+ users
11
+ bots
12
+ public_channels
13
+ private_channels
14
+ ims
15
+ mpims
16
+ ].freeze
17
+
18
+ @events = Hash.new { |h, k| h[k] = [] }
19
+
7
20
  class << self
8
- attr_accessor :events
21
+ attr_reader :events
22
+
23
+ def inherited(subclass)
24
+ super
25
+ subclass.instance_variable_set :@events, events.dup
26
+ end
27
+
28
+ def on(event, &handler)
29
+ events[event.to_s] << handler
30
+ end
9
31
  end
10
32
 
11
- attr_accessor :users, :bots, :channels, :groups, :teams, :ims
33
+ attr_accessor(*CACHES)
12
34
 
13
35
  def self
14
36
  nil
@@ -18,13 +40,7 @@ module Slack
18
40
  nil
19
41
  end
20
42
 
21
- def initialize(_attrs); end
22
-
23
- def self.on(event, &block)
24
- self.events ||= {}
25
- self.events[event.to_s] ||= []
26
- self.events[event.to_s] << block
27
- end
43
+ def initialize(_attrs, _options = {}); end
28
44
  end
29
45
  end
30
46
  end