slack-ruby-client 0.5.4 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (189) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +17 -14
  3. data/CHANGELOG.md +7 -0
  4. data/CONTRIBUTING.md +2 -2
  5. data/Gemfile +1 -0
  6. data/README.md +32 -18
  7. data/Rakefile +4 -1
  8. data/UPGRADING.md +41 -3
  9. data/bin/commands.rb +1 -1
  10. data/bin/commands/api.rb +1 -1
  11. data/bin/commands/auth.rb +1 -1
  12. data/bin/commands/channels.rb +3 -3
  13. data/bin/commands/chat.rb +1 -1
  14. data/bin/commands/dnd.rb +1 -1
  15. data/bin/commands/emoji.rb +1 -1
  16. data/bin/commands/files.rb +2 -1
  17. data/bin/commands/groups.rb +1 -1
  18. data/bin/commands/im.rb +1 -1
  19. data/bin/commands/mpim.rb +1 -1
  20. data/bin/commands/oauth.rb +1 -1
  21. data/bin/commands/pins.rb +1 -1
  22. data/bin/commands/reactions.rb +1 -1
  23. data/bin/commands/rtm.rb +1 -1
  24. data/bin/commands/search.rb +1 -1
  25. data/bin/commands/stars.rb +1 -1
  26. data/bin/commands/team.rb +1 -1
  27. data/bin/commands/usergroups.rb +1 -1
  28. data/bin/commands/users.rb +10 -1
  29. data/examples/hi_real_time/hi.rb +5 -5
  30. data/examples/hi_real_time_and_web/hi.rb +4 -4
  31. data/examples/hi_real_time_async/hi.rb +5 -5
  32. data/lib/slack-ruby-client.rb +10 -0
  33. data/lib/slack/messages/message.rb +9 -0
  34. data/lib/slack/real_time/api/schema/event.json +22 -0
  35. data/lib/slack/real_time/api/templates/event_handler.erb +18 -0
  36. data/lib/slack/real_time/api/templates/event_handlers.erb +5 -0
  37. data/lib/slack/real_time/client.rb +31 -9
  38. data/lib/slack/real_time/config.rb +3 -1
  39. data/lib/slack/real_time/event_handlers.rb +66 -0
  40. data/lib/slack/real_time/event_handlers/accounts_changed.rb +18 -0
  41. data/lib/slack/real_time/event_handlers/bot_added.rb +16 -0
  42. data/lib/slack/real_time/event_handlers/bot_changed.rb +17 -0
  43. data/lib/slack/real_time/event_handlers/channel_archive.rb +17 -0
  44. data/lib/slack/real_time/event_handlers/channel_created.rb +17 -0
  45. data/lib/slack/real_time/event_handlers/channel_deleted.rb +16 -0
  46. data/lib/slack/real_time/event_handlers/channel_history_changed.rb +18 -0
  47. data/lib/slack/real_time/event_handlers/channel_joined.rb +22 -0
  48. data/lib/slack/real_time/event_handlers/channel_left.rb +17 -0
  49. data/lib/slack/real_time/event_handlers/channel_marked.rb +18 -0
  50. data/lib/slack/real_time/event_handlers/channel_rename.rb +17 -0
  51. data/lib/slack/real_time/event_handlers/channel_unarchive.rb +17 -0
  52. data/lib/slack/real_time/event_handlers/commands_changed.rb +18 -0
  53. data/lib/slack/real_time/event_handlers/dnd_updated.rb +18 -0
  54. data/lib/slack/real_time/event_handlers/dnd_updated_user.rb +18 -0
  55. data/lib/slack/real_time/event_handlers/email_domain_changed.rb +16 -0
  56. data/lib/slack/real_time/event_handlers/emoji_changed.rb +18 -0
  57. data/lib/slack/real_time/event_handlers/file_change.rb +18 -0
  58. data/lib/slack/real_time/event_handlers/file_comment_added.rb +18 -0
  59. data/lib/slack/real_time/event_handlers/file_comment_deleted.rb +18 -0
  60. data/lib/slack/real_time/event_handlers/file_comment_edited.rb +18 -0
  61. data/lib/slack/real_time/event_handlers/file_created.rb +18 -0
  62. data/lib/slack/real_time/event_handlers/file_deleted.rb +18 -0
  63. data/lib/slack/real_time/event_handlers/file_private.rb +18 -0
  64. data/lib/slack/real_time/event_handlers/file_public.rb +18 -0
  65. data/lib/slack/real_time/event_handlers/file_shared.rb +18 -0
  66. data/lib/slack/real_time/event_handlers/file_unshared.rb +18 -0
  67. data/lib/slack/real_time/event_handlers/group_archive.rb +17 -0
  68. data/lib/slack/real_time/event_handlers/group_close.rb +16 -0
  69. data/lib/slack/real_time/event_handlers/group_history_changed.rb +18 -0
  70. data/lib/slack/real_time/event_handlers/group_joined.rb +16 -0
  71. data/lib/slack/real_time/event_handlers/group_left.rb +17 -0
  72. data/lib/slack/real_time/event_handlers/group_marked.rb +18 -0
  73. data/lib/slack/real_time/event_handlers/group_open.rb +16 -0
  74. data/lib/slack/real_time/event_handlers/group_rename.rb +17 -0
  75. data/lib/slack/real_time/event_handlers/group_unarchive.rb +17 -0
  76. data/lib/slack/real_time/event_handlers/im_close.rb +16 -0
  77. data/lib/slack/real_time/event_handlers/im_created.rb +16 -0
  78. data/lib/slack/real_time/event_handlers/im_history_changed.rb +18 -0
  79. data/lib/slack/real_time/event_handlers/im_marked.rb +18 -0
  80. data/lib/slack/real_time/event_handlers/im_open.rb +16 -0
  81. data/lib/slack/real_time/event_handlers/manual_presence_change.rb +16 -0
  82. data/lib/slack/real_time/event_handlers/pin_added.rb +18 -0
  83. data/lib/slack/real_time/event_handlers/pin_removed.rb +18 -0
  84. data/lib/slack/real_time/event_handlers/pref_change.rb +16 -0
  85. data/lib/slack/real_time/event_handlers/presence_change.rb +17 -0
  86. data/lib/slack/real_time/event_handlers/reaction_added.rb +18 -0
  87. data/lib/slack/real_time/event_handlers/reaction_removed.rb +18 -0
  88. data/lib/slack/real_time/event_handlers/reconnect_url.rb +18 -0
  89. data/lib/slack/real_time/event_handlers/star_added.rb +18 -0
  90. data/lib/slack/real_time/event_handlers/star_removed.rb +18 -0
  91. data/lib/slack/real_time/event_handlers/subteam_created.rb +18 -0
  92. data/lib/slack/real_time/event_handlers/subteam_self_added.rb +18 -0
  93. data/lib/slack/real_time/event_handlers/subteam_self_removed.rb +18 -0
  94. data/lib/slack/real_time/event_handlers/subteam_updated.rb +18 -0
  95. data/lib/slack/real_time/event_handlers/team_domain_change.rb +17 -0
  96. data/lib/slack/real_time/event_handlers/team_join.rb +16 -0
  97. data/lib/slack/real_time/event_handlers/team_migration_started.rb +18 -0
  98. data/lib/slack/real_time/event_handlers/team_plan_change.rb +16 -0
  99. data/lib/slack/real_time/event_handlers/team_pref_change.rb +16 -0
  100. data/lib/slack/real_time/event_handlers/team_profile_change.rb +18 -0
  101. data/lib/slack/real_time/event_handlers/team_profile_delete.rb +18 -0
  102. data/lib/slack/real_time/event_handlers/team_profile_reorder.rb +18 -0
  103. data/lib/slack/real_time/event_handlers/team_rename.rb +16 -0
  104. data/lib/slack/real_time/event_handlers/user_change.rb +16 -0
  105. data/lib/slack/real_time/event_handlers/user_typing.rb +18 -0
  106. data/lib/slack/real_time/models.rb +7 -0
  107. data/lib/slack/real_time/models/base.rb +11 -0
  108. data/lib/slack/real_time/models/bot.rb +8 -0
  109. data/lib/slack/real_time/models/channel.rb +8 -0
  110. data/lib/slack/real_time/models/group.rb +8 -0
  111. data/lib/slack/real_time/models/im.rb +8 -0
  112. data/lib/slack/real_time/models/team.rb +8 -0
  113. data/lib/slack/real_time/models/user.rb +8 -0
  114. data/lib/slack/real_time/store.rb +47 -0
  115. data/lib/slack/version.rb +1 -1
  116. data/lib/slack/web/api/endpoints.rb +1 -1
  117. data/lib/slack/web/api/endpoints/api.rb +1 -1
  118. data/lib/slack/web/api/endpoints/auth.rb +1 -1
  119. data/lib/slack/web/api/endpoints/channels.rb +2 -4
  120. data/lib/slack/web/api/endpoints/chat.rb +1 -1
  121. data/lib/slack/web/api/endpoints/dnd.rb +1 -1
  122. data/lib/slack/web/api/endpoints/emoji.rb +1 -1
  123. data/lib/slack/web/api/endpoints/files.rb +4 -1
  124. data/lib/slack/web/api/endpoints/groups.rb +1 -1
  125. data/lib/slack/web/api/endpoints/im.rb +1 -1
  126. data/lib/slack/web/api/endpoints/mpim.rb +1 -1
  127. data/lib/slack/web/api/endpoints/oauth.rb +1 -1
  128. data/lib/slack/web/api/endpoints/pins.rb +1 -1
  129. data/lib/slack/web/api/endpoints/reactions.rb +1 -1
  130. data/lib/slack/web/api/endpoints/rtm.rb +1 -1
  131. data/lib/slack/web/api/endpoints/search.rb +1 -1
  132. data/lib/slack/web/api/endpoints/stars.rb +1 -1
  133. data/lib/slack/web/api/endpoints/team.rb +1 -1
  134. data/lib/slack/web/api/endpoints/usergroups.rb +1 -1
  135. data/lib/slack/web/api/endpoints/users.rb +1 -1
  136. data/lib/slack/web/api/mixins.rb +1 -0
  137. data/lib/slack/web/api/mixins/channels.id.rb +2 -2
  138. data/lib/slack/web/api/mixins/groups.id.rb +2 -2
  139. data/lib/slack/web/api/mixins/users.id.rb +2 -2
  140. data/lib/slack/web/api/mixins/users.search.json +19 -0
  141. data/lib/slack/web/api/mixins/users.search.rb +43 -0
  142. data/lib/slack/web/api/templates/command.erb +1 -1
  143. data/lib/slack/web/api/templates/commands.erb +1 -1
  144. data/lib/slack/web/api/templates/endpoints.erb +1 -1
  145. data/lib/slack/web/api/templates/method.erb +1 -1
  146. data/lib/slack/web/api/templates/method_spec.erb +20 -0
  147. data/lib/slack/web/faraday/connection.rb +1 -0
  148. data/lib/tasks/git.rake +7 -0
  149. data/lib/tasks/real_time.rake +45 -0
  150. data/lib/tasks/update.rake +9 -0
  151. data/lib/{slack/web/api/tasks/generate.rake → tasks/web.rake} +6 -6
  152. data/slack-ruby-client.gemspec +1 -0
  153. data/spec/fixtures/slack/web/rtm_start.yml +53 -22
  154. data/spec/integration/integration_spec.rb +5 -5
  155. data/spec/slack/real_time/client_spec.rb +72 -10
  156. data/spec/slack/real_time/event_handlers/bot_spec.rb +42 -0
  157. data/spec/slack/real_time/event_handlers/channel_spec.rb +116 -0
  158. data/spec/slack/real_time/event_handlers/group_spec.rb +90 -0
  159. data/spec/slack/real_time/event_handlers/im_spec.rb +47 -0
  160. data/spec/slack/real_time/event_handlers/team_spec.rb +58 -0
  161. data/spec/slack/real_time/event_handlers/user_spec.rb +61 -0
  162. data/spec/slack/real_time/rtm_start_spec.rb +13 -0
  163. data/spec/slack/real_time/store_spec.rb +11 -0
  164. data/spec/slack/slack_spec.rb +6 -6
  165. data/spec/slack/web/api/endpoints/api_spec.rb +7 -0
  166. data/spec/slack/web/api/endpoints/{auth_spec.rb → custom_specs/auth_spec.rb} +0 -0
  167. data/spec/slack/web/api/endpoints/{channels_spec.rb → custom_specs/channels_spec.rb} +1 -1
  168. data/spec/slack/web/api/endpoints/{chat_spec.rb → custom_specs/chat_spec.rb} +0 -0
  169. data/spec/slack/web/api/endpoints/{groups_spec.rb → custom_specs/groups_spec.rb} +1 -1
  170. data/spec/slack/web/api/endpoints/custom_specs/users_spec.rb +23 -0
  171. data/spec/slack/web/api/endpoints/dnd_spec.rb +12 -0
  172. data/spec/slack/web/api/endpoints/emoji_spec.rb +7 -0
  173. data/spec/slack/web/api/endpoints/files_spec.rb +36 -0
  174. data/spec/slack/web/api/endpoints/im_spec.rb +30 -0
  175. data/spec/slack/web/api/endpoints/mpim_spec.rb +30 -0
  176. data/spec/slack/web/api/endpoints/oauth_spec.rb +18 -0
  177. data/spec/slack/web/api/endpoints/pins_spec.rb +22 -0
  178. data/spec/slack/web/api/endpoints/reactions_spec.rb +17 -0
  179. data/spec/slack/web/api/endpoints/rtm_spec.rb +7 -0
  180. data/spec/slack/web/api/endpoints/search_spec.rb +22 -0
  181. data/spec/slack/web/api/endpoints/stars_spec.rb +7 -0
  182. data/spec/slack/web/api/endpoints/team_spec.rb +7 -0
  183. data/spec/slack/web/api/endpoints/usergroups_spec.rb +35 -0
  184. data/spec/slack/web/api/mixins/channels_spec.rb +6 -6
  185. data/spec/slack/web/api/mixins/groups_spec.rb +6 -6
  186. data/spec/slack/web/api/mixins/users_spec.rb +12 -6
  187. data/spec/support/real_time/event.rb +11 -0
  188. metadata +159 -13
  189. data/spec/slack/web/api/endpoints/users_spec.rb +0 -17
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b77bc84985aeaa9109f41148ebfc2ef720c55232
4
- data.tar.gz: b6a097a441ec9255f3b1b062bceca5b29888fd34
3
+ metadata.gz: b713ee1b5bbc32bbb54b434199c8245d1edcc528
4
+ data.tar.gz: 7122943dc5dabf15ccf656be06b3df08c24e39ba
5
5
  SHA512:
6
- metadata.gz: b6f08da6827379462c86c589af7b4dd38b108b14a31d537bf740c727f16830d76ef982fd69ef6e573b26be8ebdeefe05d74eee7bfbebebc6a3814b965829c43c
7
- data.tar.gz: 6b0f320fa1985a987e54f793d61463ad2780771db8871a8848140e912cc5f5fc817213a8885f80fc7e08ca10db81b17890a785e2e0223f28e6fe655293865717
6
+ metadata.gz: 8e9b7148626db6c19db75a8688f6f4233158ce7dc7162d084525516ceb8d458e14a8a2dca875d64ac88cad5913e60f3923b28038b54201de7bfa28bb625cb99d
7
+ data.tar.gz: 464204c4a4285827791b0c166d958f2fafe7cdadc38af68e40f3db8798e746fd78f70eed0dc5c649f93c8523a2fe8bdda6328ee75456d872cffa7201f1b7fc48
@@ -1,14 +1,15 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2016-01-22 14:19:14 -0500 using RuboCop version 0.35.0.
3
+ # on 2016-02-02 17:03:58 -0500 using RuboCop version 0.35.0.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
- # Offense count: 3
9
+ # Offense count: 4
10
10
  Lint/HandleExceptions:
11
11
  Exclude:
12
+ - 'lib/slack-ruby-client.rb'
12
13
  - 'lib/slack/real_time/concurrency/celluloid.rb'
13
14
  - 'spec/slack/real_time/concurrency/celluloid_spec.rb'
14
15
  - 'spec/slack/real_time/concurrency/eventmachine_spec.rb'
@@ -20,30 +21,26 @@ Lint/UnusedBlockArgument:
20
21
  Exclude:
21
22
  - 'lib/slack/messages/formatting.rb'
22
23
 
23
- # Offense count: 7
24
+ # Offense count: 12
24
25
  Metrics/AbcSize:
25
- Max: 22
26
+ Max: 31
26
27
 
27
28
  # Offense count: 1
28
29
  # Configuration parameters: CountComments.
29
30
  Metrics/ClassLength:
30
- Max: 112
31
-
32
- # Offense count: 1
33
- Metrics/CyclomaticComplexity:
34
- Max: 7
31
+ Max: 131
35
32
 
36
- # Offense count: 438
33
+ # Offense count: 586
37
34
  # Configuration parameters: AllowURI, URISchemes.
38
35
  Metrics/LineLength:
39
36
  Max: 288
40
37
 
41
- # Offense count: 4
38
+ # Offense count: 6
42
39
  # Configuration parameters: CountComments.
43
40
  Metrics/MethodLength:
44
- Max: 15
41
+ Max: 24
45
42
 
46
- # Offense count: 46
43
+ # Offense count: 80
47
44
  # Configuration parameters: Exclude.
48
45
  Style/Documentation:
49
46
  Enabled: false
@@ -54,11 +51,17 @@ Style/FileName:
54
51
  Exclude:
55
52
  - 'lib/slack-ruby-client.rb'
56
53
 
57
- # Offense count: 86
54
+ # Offense count: 90
58
55
  # Configuration parameters: AllowedVariables.
59
56
  Style/GlobalVars:
60
57
  Enabled: false
61
58
 
59
+ # Offense count: 1
60
+ # Configuration parameters: MinBodyLength.
61
+ Style/GuardClause:
62
+ Exclude:
63
+ - 'lib/slack/real_time/store.rb'
64
+
62
65
  # Offense count: 15
63
66
  # Configuration parameters: EnforcedStyle, SupportedStyles.
64
67
  Style/MethodName:
@@ -1,3 +1,10 @@
1
+ ### 0.6.0 (2/4/2016)
2
+
3
+ * [#54](https://github.com/dblock/slack-ruby-client/issues/54): RealTime client maintains a local store of team data for `client.self`, `team`, `users`, `channels`, `groups`, `ims` and `bots` data - [@dblock](https://github.com/dblock).
4
+ * [#56](https://github.com/dblock/slack-ruby-client/issues/56): API responses in both Web and RealTime clients are now instances of [Slack::Messages::Message](lib/slack/messages/message), which provides method access to properties - [@dblock](https://github.com/dblock).
5
+ * [#57](https://github.com/dblock/slack-ruby-client/issues/57): Configure arguments to pass to `rtm.start` via `config.start_options` - [@dblock](https://github.com/dblock).
6
+ * [#52](https://github.com/dblock/slack-ruby-client/issues/52): Added `users_search` - [@dblock](https://github.com/dblock).
7
+
1
8
  ### 0.5.4 (1/23/2016)
2
9
 
3
10
  * [#45](https://github.com/dblock/slack-ruby-client/issues/45): Added `channels_id`, `groups_id` and `users_id` - [@dblock](https://github.com/dblock).
@@ -68,7 +68,7 @@ Make sure that `bundle exec rake` completes without errors.
68
68
  Slack Web API is updated from https://github.com/dblock/slack-api-ref, a maintained, machine-readable version of Slack API Docs, generated by scraping [api.slack.com](https://api.slack.com). To update the Web API from the latest definition run the following Rake task.
69
69
 
70
70
  ```
71
- rake slack:web:api:update
71
+ rake slack:api:update
72
72
  ```
73
73
 
74
74
  #### Patching Slack Web API
@@ -81,7 +81,7 @@ Make a change to a generated file, for example `lib/slack/web/api/endpoints/chat
81
81
  git diff HEAD lib/slack/web/api/endpoints/chat.rb > lib/slack/web/api/patches/chat.1.patch
82
82
  ```
83
83
 
84
- Run `rake slack:web:api:update` to ensure that the patch is cleanly applied. Implement a test for the added or modified functionality and commit the patch file.
84
+ Run `rake slack:api:update` to ensure that the patch is cleanly applied. Implement a test for the added or modified functionality and commit the patch file.
85
85
 
86
86
  ### Write Documentation
87
87
 
data/Gemfile CHANGED
@@ -3,3 +3,4 @@ source 'http://rubygems.org'
3
3
  gemspec
4
4
 
5
5
  gem ENV['CONCURRENCY'], require: false if ENV.key?('CONCURRENCY')
6
+ gem 'picky' unless RUBY_PLATFORM == 'java'
data/README.md CHANGED
@@ -18,7 +18,7 @@ A Ruby client for the Slack [Web](https://api.slack.com/web) and [RealTime Messa
18
18
 
19
19
  ## Stable Release
20
20
 
21
- You're reading the documentation for the **stable** release of slack-ruby-client, 0.5.4. See [UPGRADING](UPGRADING.md) when upgrading from an older version.
21
+ You're reading the documentation for the **stable** release of slack-ruby-client, 0.6.0. See [UPGRADING](UPGRADING.md) when upgrading from an older version.
22
22
 
23
23
  ## Installation
24
24
 
@@ -83,9 +83,9 @@ See a fully working example in [examples/hi_web](examples/hi_web/hi.rb).
83
83
  List channels with [channels_list](https://api.slack.com/methods/channels.list).
84
84
 
85
85
  ```ruby
86
- channels = client.channels_list['channels']
86
+ channels = client.channels_list.channels
87
87
 
88
- general_channel = channels.detect { |c| c['name'] == 'general' }
88
+ general_channel = channels.detect { |c| c.name == 'general' }
89
89
  ```
90
90
 
91
91
  #### Upload a File
@@ -127,6 +127,14 @@ client.users_info(user: 'U092BDCLV') # calls users_info
127
127
  client.users_info(user: '@dblock') # calls users_list followed by users_info
128
128
  ```
129
129
 
130
+ ### Search for a User
131
+
132
+ Constructs an in-memory index of users and searches it. If you want to use this functionality, add the [picky](https://github.com/floere/picky) gem to your project's Gemfile.
133
+
134
+ ```ruby
135
+ client.users_search(user: 'dblock')
136
+ ```
137
+
130
138
  #### Other
131
139
 
132
140
  Refer to the [Slack Web API Method Reference](https://api.slack.com/methods) for the list of all available functions.
@@ -165,15 +173,15 @@ The Real Time Messaging API is a WebSocket-based API that allows you to receive
165
173
  client = Slack::RealTime::Client.new
166
174
 
167
175
  client.on :hello do
168
- puts "Successfully connected, welcome '#{client.self['name']}' to the '#{client.team['name']}' team at https://#{client.team['domain']}.slack.com."
176
+ puts "Successfully connected, welcome '#{client.self.name}' to the '#{client.team.name}' team at https://#{client.team.domain}.slack.com."
169
177
  end
170
178
 
171
179
  client.on :message do |data|
172
- case data['text']
180
+ case data.text
173
181
  when 'bot hi' then
174
- client.message channel: data['channel'], text: "Hi <@#{data['user']}>!"
182
+ client.message channel: data.channel, text: "Hi <@#{data.user}>!"
175
183
  when /^bot/ then
176
- client.message channel: data['channel'], text: "Sorry <@#{data['user']}>, what?"
184
+ client.message channel: data.channel, text: "Sorry <@#{data.user}>, what?"
177
185
  end
178
186
  end
179
187
 
@@ -183,7 +191,7 @@ client.start!
183
191
  You can send typing indicators with `typing`.
184
192
 
185
193
  ```ruby
186
- client.typing channel: data['channel']
194
+ client.typing channel: data.channel
187
195
  ```
188
196
 
189
197
  You can send a ping with `ping`.
@@ -192,19 +200,23 @@ You can send a ping with `ping`.
192
200
  client.ping
193
201
  ```
194
202
 
195
- The client exposes the properties of [rtm.start](https://api.slack.com/methods/rtm.start) upon a successful connection.
203
+ By default, the RealTime client exposes and maintains a local store with the properties of [rtm.start](https://api.slack.com/methods/rtm.start) upon a successful connection.
196
204
 
197
205
  property | description
198
206
  ---------|-------------------------------------------------------------------------------------------------
199
207
  url | A WebSocket Message Server URL.
200
- self | Details on the authenticated user.
208
+ self | The authenticated bot user.
201
209
  team | Details on the authenticated user's team.
202
- users | A list of user objects, one for every member of the team.
203
- channels | A list of channel objects, one for every channel visible to the authenticated user.
204
- groups | A list of group objects, one for every group the authenticated user is in.
205
- ims | A list of IM objects, one for every direct message channel visible to the authenticated user.
210
+ users | A hash of user objects by user ID.
211
+ channels | A hash of channel objects, one for every channel visible to the authenticated user.
212
+ groups | A hash of group objects, one for every group the authenticated user is in.
213
+ ims | A hash of IM objects, one for every direct message channel visible to the authenticated user.
206
214
  bots | Details of the integrations set up on this team.
207
215
 
216
+ It also tracks changes, such as users being renamed, added or deleted, therefore `client.users` is always up-to-date.
217
+
218
+ Tracking with a local store can be disabled with `Slack::RealTime::Client.new(store_class: nil)`
219
+
208
220
  You can configure the RealTime client either globally or via the initializer.
209
221
 
210
222
  ```ruby
@@ -224,10 +236,12 @@ setting | description
224
236
  token | Slack API token.
225
237
  websocket_ping | The number of seconds that indicates how often the WebSocket should send ping frames, default is 30.
226
238
  websocket_proxy | Connect via proxy, include `:origin` and `:headers`.
239
+ store_class | Local store class name, default is an in-memory `Slack::RealTime::Store`.
240
+ start_options | Options to pass into `rtm.start`, default is `{}`.
227
241
 
228
242
  Note that the RealTime client uses a Web client to obtain the WebSocket URL via [rtm.start](https://api.slack.com/methods/rtm.start), configure Web client options via `Slack::Web::Client.configure` as described above.
229
243
 
230
- See a fullly working example in [examples/hi_real_time](examples/hi_real_time/hi.rb).
244
+ See a fully working example in [examples/hi_real_time](examples/hi_real_time/hi.rb).
231
245
 
232
246
  ![](examples/hi_real_time/hi.gif)
233
247
 
@@ -239,11 +253,11 @@ Since the Web client is used to obtain the RealTime client's WebSocket URL, you
239
253
  client = Slack::RealTime::Client.new
240
254
 
241
255
  client.on :message do |data|
242
- case data['text']
256
+ case data.text
243
257
  when 'bot hi' then
244
- client.web_client.chat_postMessage channel: data['channel'], text: "Hi <@#{data['user']}>!"
258
+ client.web_client.chat_postMessage channel: data.channel, text: "Hi <@#{data.user}>!"
245
259
  when /^bot/ then
246
- client.web_client.chat_postMessage channel: data['channel'], text: "Sorry <@#{data['user']}>, what?"
260
+ client.web_client.chat_postMessage channel: data.channel, text: "Sorry <@#{data.user}>, what?"
247
261
  end
248
262
  end
249
263
 
data/Rakefile CHANGED
@@ -16,4 +16,7 @@ RuboCop::RakeTask.new
16
16
 
17
17
  task default: [:rubocop, :spec]
18
18
 
19
- load 'slack/web/api/tasks/generate.rake'
19
+ load 'tasks/git.rake'
20
+ load 'tasks/web.rake'
21
+ load 'tasks/real_time.rake'
22
+ load 'tasks/update.rake'
@@ -1,16 +1,54 @@
1
1
  Upgrading Slack-Ruby-Client
2
2
  ===========================
3
3
 
4
+ ### Upgrading to >= 0.6.0
5
+
6
+ #### Changes to API Response Data
7
+
8
+ API responses in both Web and RealTime clients are now instances of [Slack::Messages::Message](lib/slack/messages/message.rb), which provides method access to properties.
9
+
10
+ Before:
11
+
12
+ ```ruby
13
+ puts "Welcome '#{client.self['name']}' to the '#{client.team['name']}' team."
14
+ ```
15
+
16
+ After:
17
+
18
+ ```ruby
19
+ puts "Welcome #{client.self.name} to the #{client.team.name} team."
20
+ ```
21
+
22
+ See [#56](https://github.com/dblock/slack-ruby-client/issues/56) for more information.
23
+
24
+ #### Changes to RealTime Local Store
25
+
26
+ Upon a successful `rtm.start` the RealTime client keeps a local cache of objects, including `self` or `users`. It will now also track changes to these objects. The following changes have been made to the data structures.
27
+
28
+ ##### client.self
29
+
30
+ The `client.self` object is now a `Slack::RealTime::Models::User`, which is a child of `Hashie::Mash`, so no code changes should be required.
31
+
32
+ ##### client.team
33
+
34
+ The `client.team` object is now a `Slack::RealTime::Models::Team`, which is a child of `Hashie::Mash`, so no code changes should be required.
35
+
36
+ ##### client .users, .channels, .groups, .ims
37
+
38
+ The `client.users`, `.channels`, `.groups` and `.ims` collections have been changed from `Array` to `Hash`, with object ID as key. Replace any code iterating over the array, eg. `client.users.values.each` or `client.channels.each_pair { |id, channel| ... }`.
39
+
40
+ See [#55](https://github.com/dblock/slack-ruby-client/issues/55) for more information.
41
+
4
42
  ### Upgrading to >= 0.5.0
5
43
 
6
44
  #### Changes to Real Time Concurrency
7
45
 
8
46
  Since 0.5.0 `Slack::RealTime::Client` supports [Celluloid](https://github.com/celluloid/celluloid) and no longer defaults to [Faye::WebSocket](https://github.com/faye/faye-websocket-ruby) with [Eventmachine](https://github.com/eventmachine/eventmachine). It will auto-detect one or the other depending on the gems in your Gemfile, which means you may need to add one or the other to your Gemfile.
9
47
 
10
- ##### Faye::Websocket with Eventmachine
48
+ ##### Faye::WebSocket with Eventmachine
11
49
 
12
50
  ```
13
- gem 'faye-webSocket'
51
+ gem 'faye-websocket'
14
52
  ```
15
53
 
16
54
  ##### Celluloid
@@ -19,7 +57,7 @@ gem 'faye-webSocket'
19
57
  gem 'celluloid-io'
20
58
  ```
21
59
 
22
- When in doubt, use Faye::WebSocket with Eventmachine.
60
+ When in doubt, use `faye-websocket`.
23
61
 
24
62
  See [#5](https://github.com/dblock/slack-ruby-client/issues/5) for more information.
25
63
 
@@ -1,4 +1,4 @@
1
- # This file was auto-generated by lib/slack/web/api/tasks/generate.rake
1
+ # This file was auto-generated by lib/tasks/web.rake
2
2
 
3
3
  require 'commands/api'
4
4
  require 'commands/auth'
@@ -1,4 +1,4 @@
1
- # This file was auto-generated by lib/slack/web/api/tasks/generate.rake
1
+ # This file was auto-generated by lib/tasks/web.rake
2
2
 
3
3
  desc 'Api methods.'
4
4
  command 'api' do |g|
@@ -1,4 +1,4 @@
1
- # This file was auto-generated by lib/slack/web/api/tasks/generate.rake
1
+ # This file was auto-generated by lib/tasks/web.rake
2
2
 
3
3
  desc 'Auth methods.'
4
4
  command 'auth' do |g|
@@ -1,4 +1,4 @@
1
- # This file was auto-generated by lib/slack/web/api/tasks/generate.rake
1
+ # This file was auto-generated by lib/tasks/web.rake
2
2
 
3
3
  desc "Get info on your team's Slack channels, create or archive channels, invite users, set the topic and purpose, and mark a channel as read."
4
4
  command 'channels' do |g|
@@ -20,8 +20,8 @@ command 'channels' do |g|
20
20
  end
21
21
  end
22
22
 
23
- g.desc 'This method returns a portion of messages/events from the specified channel.'
24
- g.long_desc %( This method returns a portion of messages/events from the specified channel. To read the entire history for a channel, call the method with no latest or oldest arguments, and then continue paging using the instructions below. )
23
+ g.desc 'This method returns a portion of message events from the specified channel.'
24
+ g.long_desc %( This method returns a portion of message events from the specified channel. )
25
25
  g.command 'history' do |c|
26
26
  c.flag 'channel', desc: 'Channel to fetch history for.'
27
27
  c.flag 'latest', desc: 'End of time range of messages to include in results.'
@@ -1,4 +1,4 @@
1
- # This file was auto-generated by lib/slack/web/api/tasks/generate.rake
1
+ # This file was auto-generated by lib/tasks/web.rake
2
2
 
3
3
  desc 'Post chat messages to Slack.'
4
4
  command 'chat' do |g|
@@ -1,4 +1,4 @@
1
- # This file was auto-generated by lib/slack/web/api/tasks/generate.rake
1
+ # This file was auto-generated by lib/tasks/web.rake
2
2
 
3
3
  desc 'Adjust and view Do Not Disturb settings for team members'
4
4
  command 'dnd' do |g|
@@ -1,4 +1,4 @@
1
- # This file was auto-generated by lib/slack/web/api/tasks/generate.rake
1
+ # This file was auto-generated by lib/tasks/web.rake
2
2
 
3
3
  desc 'Emoji methods.'
4
4
  command 'emoji' do |g|
@@ -1,4 +1,4 @@
1
- # This file was auto-generated by lib/slack/web/api/tasks/generate.rake
1
+ # This file was auto-generated by lib/tasks/web.rake
2
2
 
3
3
  desc 'Get info on files uploaded to Slack, upload new files to Slack.'
4
4
  command 'files' do |g|
@@ -35,6 +35,7 @@ command 'files' do |g|
35
35
  g.long_desc %( This method returns a list of files within the team. It can be filtered and sliced in various ways. )
36
36
  g.command 'list' do |c|
37
37
  c.flag 'user', desc: 'Filter files created by a single user.'
38
+ c.flag 'channel', desc: 'Filter files appearing in a specific channel, indicated by its ID.'
38
39
  c.flag 'ts_from', desc: 'Filter files created after this timestamp (inclusive).'
39
40
  c.flag 'ts_to', desc: 'Filter files created before this timestamp (inclusive).'
40
41
  c.flag 'types', desc: 'Filter files by type:
@@ -1,4 +1,4 @@
1
- # This file was auto-generated by lib/slack/web/api/tasks/generate.rake
1
+ # This file was auto-generated by lib/tasks/web.rake
2
2
 
3
3
  desc "Get info on your team's private channels."
4
4
  command 'groups' do |g|
@@ -1,4 +1,4 @@
1
- # This file was auto-generated by lib/slack/web/api/tasks/generate.rake
1
+ # This file was auto-generated by lib/tasks/web.rake
2
2
 
3
3
  desc 'Get info on your direct messages.'
4
4
  command 'im' do |g|
@@ -1,4 +1,4 @@
1
- # This file was auto-generated by lib/slack/web/api/tasks/generate.rake
1
+ # This file was auto-generated by lib/tasks/web.rake
2
2
 
3
3
  desc 'Get info on your multiparty direct messages.'
4
4
  command 'mpim' do |g|
@@ -1,4 +1,4 @@
1
- # This file was auto-generated by lib/slack/web/api/tasks/generate.rake
1
+ # This file was auto-generated by lib/tasks/web.rake
2
2
 
3
3
  desc 'Oauth methods.'
4
4
  command 'oauth' do |g|
@@ -1,4 +1,4 @@
1
- # This file was auto-generated by lib/slack/web/api/tasks/generate.rake
1
+ # This file was auto-generated by lib/tasks/web.rake
2
2
 
3
3
  desc 'Pins methods.'
4
4
  command 'pins' do |g|
@@ -1,4 +1,4 @@
1
- # This file was auto-generated by lib/slack/web/api/tasks/generate.rake
1
+ # This file was auto-generated by lib/tasks/web.rake
2
2
 
3
3
  desc 'Reactions methods.'
4
4
  command 'reactions' do |g|
@@ -1,4 +1,4 @@
1
- # This file was auto-generated by lib/slack/web/api/tasks/generate.rake
1
+ # This file was auto-generated by lib/tasks/web.rake
2
2
 
3
3
  desc 'Rtm methods.'
4
4
  command 'rtm' do |g|
@@ -1,4 +1,4 @@
1
- # This file was auto-generated by lib/slack/web/api/tasks/generate.rake
1
+ # This file was auto-generated by lib/tasks/web.rake
2
2
 
3
3
  desc "Search your team's files and messages."
4
4
  command 'search' do |g|