slack-ruby-client 0.14.1 → 0.14.2
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop_todo.yml +15 -4
- data/CHANGELOG.md +7 -0
- data/README.md +8 -1
- data/Rakefile +1 -1
- data/bin/commands.rb +1 -0
- data/bin/commands/api.rb +2 -2
- data/bin/commands/apps.rb +2 -2
- data/bin/commands/apps_permissions.rb +4 -4
- data/bin/commands/apps_permissions_resources.rb +2 -2
- data/bin/commands/apps_permissions_scopes.rb +2 -2
- data/bin/commands/apps_permissions_users.rb +4 -4
- data/bin/commands/auth.rb +4 -4
- data/bin/commands/bots.rb +2 -2
- data/bin/commands/channels.rb +32 -31
- data/bin/commands/chat.rb +48 -17
- data/bin/commands/chat_scheduledMessages.rb +17 -0
- data/bin/commands/conversations.rb +35 -35
- data/bin/commands/dialog.rb +2 -2
- data/bin/commands/dnd.rb +9 -9
- data/bin/commands/emoji.rb +2 -2
- data/bin/commands/files.rb +14 -25
- data/bin/commands/files_comments.rb +2 -23
- data/bin/commands/groups.rb +33 -33
- data/bin/commands/im.rb +13 -13
- data/bin/commands/migration.rb +2 -2
- data/bin/commands/mpim.rb +11 -11
- data/bin/commands/oauth.rb +4 -4
- data/bin/commands/pins.rb +6 -6
- data/bin/commands/reactions.rb +8 -8
- data/bin/commands/reminders.rb +10 -10
- data/bin/commands/rtm.rb +4 -4
- data/bin/commands/search.rb +7 -7
- data/bin/commands/stars.rb +6 -6
- data/bin/commands/team.rb +8 -8
- data/bin/commands/team_profile.rb +2 -2
- data/bin/commands/usergroups.rb +11 -11
- data/bin/commands/usergroups_users.rb +4 -4
- data/bin/commands/users.rb +21 -22
- data/bin/commands/users_profile.rb +4 -4
- data/lib/slack/events/request.rb +9 -5
- data/lib/slack/real_time/client.rb +23 -6
- data/lib/slack/real_time/concurrency/async.rb +55 -23
- data/lib/slack/real_time/concurrency/celluloid.rb +0 -1
- data/lib/slack/real_time/concurrency/eventmachine.rb +0 -5
- data/lib/slack/real_time/socket.rb +16 -9
- data/lib/slack/version.rb +1 -1
- data/lib/slack/web/api/endpoints.rb +2 -0
- data/lib/slack/web/api/endpoints/api.rb +1 -1
- data/lib/slack/web/api/endpoints/apps.rb +1 -1
- data/lib/slack/web/api/endpoints/apps_permissions.rb +2 -2
- data/lib/slack/web/api/endpoints/apps_permissions_resources.rb +1 -1
- data/lib/slack/web/api/endpoints/apps_permissions_scopes.rb +1 -1
- data/lib/slack/web/api/endpoints/apps_permissions_users.rb +2 -2
- data/lib/slack/web/api/endpoints/auth.rb +2 -2
- data/lib/slack/web/api/endpoints/bots.rb +1 -1
- data/lib/slack/web/api/endpoints/channels.rb +18 -15
- data/lib/slack/web/api/endpoints/chat.rb +63 -9
- data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +37 -0
- data/lib/slack/web/api/endpoints/conversations.rb +17 -17
- data/lib/slack/web/api/endpoints/dialog.rb +1 -1
- data/lib/slack/web/api/endpoints/dnd.rb +4 -4
- data/lib/slack/web/api/endpoints/emoji.rb +1 -1
- data/lib/slack/web/api/endpoints/files.rb +7 -18
- data/lib/slack/web/api/endpoints/files_comments.rb +1 -34
- data/lib/slack/web/api/endpoints/groups.rb +18 -16
- data/lib/slack/web/api/endpoints/im.rb +8 -6
- data/lib/slack/web/api/endpoints/migration.rb +1 -1
- data/lib/slack/web/api/endpoints/mpim.rb +7 -5
- data/lib/slack/web/api/endpoints/oauth.rb +2 -2
- data/lib/slack/web/api/endpoints/pins.rb +5 -3
- data/lib/slack/web/api/endpoints/reactions.rb +6 -4
- data/lib/slack/web/api/endpoints/reminders.rb +5 -5
- data/lib/slack/web/api/endpoints/rtm.rb +2 -2
- data/lib/slack/web/api/endpoints/search.rb +3 -3
- data/lib/slack/web/api/endpoints/stars.rb +5 -3
- data/lib/slack/web/api/endpoints/team.rb +5 -4
- data/lib/slack/web/api/endpoints/team_profile.rb +1 -1
- data/lib/slack/web/api/endpoints/usergroups.rb +5 -5
- data/lib/slack/web/api/endpoints/usergroups_users.rb +2 -2
- data/lib/slack/web/api/endpoints/users.rb +12 -12
- data/lib/slack/web/api/endpoints/users_profile.rb +2 -2
- data/spec/integration/integration_spec.rb +43 -36
- data/spec/slack/events/request_spec.rb +29 -1
- data/spec/slack/real_time/concurrency/celluloid_spec.rb +5 -0
- data/spec/slack/real_time/concurrency/eventmachine_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/chat_scheduledMessages_spec.rb +7 -0
- data/spec/slack/web/api/endpoints/files_comments_spec.rb +0 -19
- data/spec/spec_helper.rb +5 -0
- metadata +6 -2
@@ -6,7 +6,8 @@ module Slack
|
|
6
6
|
module Endpoints
|
7
7
|
module Reactions
|
8
8
|
#
|
9
|
-
#
|
9
|
+
# This method adds a reaction (emoji) to a message.
|
10
|
+
# Now that file threads work the way you'd expect, the file and file_comment arguments are deprecated. Specify channel and timestamp instead.
|
10
11
|
#
|
11
12
|
# @option options [Object] :name
|
12
13
|
# Reaction (emoji) name.
|
@@ -27,7 +28,7 @@ module Slack
|
|
27
28
|
end
|
28
29
|
|
29
30
|
#
|
30
|
-
#
|
31
|
+
# This method returns a list of all reactions for a single item (file, file comment, channel message, group message, or direct message).
|
31
32
|
#
|
32
33
|
# @option options [channel] :channel
|
33
34
|
# Channel where the message to get reactions for was posted.
|
@@ -47,7 +48,7 @@ module Slack
|
|
47
48
|
end
|
48
49
|
|
49
50
|
#
|
50
|
-
#
|
51
|
+
# This method returns a list of all items (file, file comment, channel message, group message, or direct message) reacted to by a user.
|
51
52
|
#
|
52
53
|
# @option options [Object] :cursor
|
53
54
|
# Parameter for pagination. Set cursor equal to the next_cursor attribute returned by the previous request's response_metadata. This parameter is optional, but pagination is mandatory: the default value simply fetches the first "page" of the collection. See pagination for more details.
|
@@ -71,7 +72,8 @@ module Slack
|
|
71
72
|
end
|
72
73
|
|
73
74
|
#
|
74
|
-
#
|
75
|
+
# This method removes a reaction (emoji) from an item (file, file comment, channel message, group message, or direct message).
|
76
|
+
# One of file, file_comment, or the combination of channel and timestamp must be specified.
|
75
77
|
#
|
76
78
|
# @option options [Object] :name
|
77
79
|
# Reaction (emoji) name.
|
@@ -6,7 +6,7 @@ module Slack
|
|
6
6
|
module Endpoints
|
7
7
|
module Reminders
|
8
8
|
#
|
9
|
-
#
|
9
|
+
# This method creates a reminder.
|
10
10
|
#
|
11
11
|
# @option options [Object] :text
|
12
12
|
# The content of the reminder.
|
@@ -24,7 +24,7 @@ module Slack
|
|
24
24
|
end
|
25
25
|
|
26
26
|
#
|
27
|
-
#
|
27
|
+
# This method completes a reminder.
|
28
28
|
#
|
29
29
|
# @option options [Object] :reminder
|
30
30
|
# The ID of the reminder to be marked as complete.
|
@@ -36,7 +36,7 @@ module Slack
|
|
36
36
|
end
|
37
37
|
|
38
38
|
#
|
39
|
-
#
|
39
|
+
# This method deletes a reminder.
|
40
40
|
#
|
41
41
|
# @option options [Object] :reminder
|
42
42
|
# The ID of the reminder.
|
@@ -48,7 +48,7 @@ module Slack
|
|
48
48
|
end
|
49
49
|
|
50
50
|
#
|
51
|
-
#
|
51
|
+
# This method returns information about a reminder.
|
52
52
|
#
|
53
53
|
# @option options [Object] :reminder
|
54
54
|
# The ID of the reminder.
|
@@ -60,7 +60,7 @@ module Slack
|
|
60
60
|
end
|
61
61
|
|
62
62
|
#
|
63
|
-
#
|
63
|
+
# This method lists all reminders created by or for a given user.
|
64
64
|
#
|
65
65
|
# @see https://api.slack.com/methods/reminders.list
|
66
66
|
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/reminders/reminders.list.json
|
@@ -6,7 +6,7 @@ module Slack
|
|
6
6
|
module Endpoints
|
7
7
|
module Rtm
|
8
8
|
#
|
9
|
-
#
|
9
|
+
# This method begins a Real Time Messaging API session and reserves your application a specific URL with which to connect via websocket.
|
10
10
|
#
|
11
11
|
# @option options [Object] :batch_presence_aware
|
12
12
|
# Batch presence deliveries via subscription. Enabling changes the shape of presence_change events. See batch presence.
|
@@ -19,7 +19,7 @@ module Slack
|
|
19
19
|
end
|
20
20
|
|
21
21
|
#
|
22
|
-
#
|
22
|
+
# This method begins a Real Time Messaging API session and reserves your application a specific URL with which to connect via websocket.
|
23
23
|
#
|
24
24
|
# @option options [Object] :batch_presence_aware
|
25
25
|
# Batch presence deliveries via subscription. Enabling changes the shape of presence_change events. See batch presence.
|
@@ -6,7 +6,7 @@ module Slack
|
|
6
6
|
module Endpoints
|
7
7
|
module Search
|
8
8
|
#
|
9
|
-
#
|
9
|
+
# This method allows users and applications to search both messages and files in a single call.
|
10
10
|
#
|
11
11
|
# @option options [Object] :query
|
12
12
|
# Search query. May contains booleans, etc.
|
@@ -24,7 +24,7 @@ module Slack
|
|
24
24
|
end
|
25
25
|
|
26
26
|
#
|
27
|
-
#
|
27
|
+
# This method returns files matching a search query.
|
28
28
|
#
|
29
29
|
# @option options [Object] :query
|
30
30
|
# Search query.
|
@@ -42,7 +42,7 @@ module Slack
|
|
42
42
|
end
|
43
43
|
|
44
44
|
#
|
45
|
-
#
|
45
|
+
# This method returns messages matching a search query.
|
46
46
|
#
|
47
47
|
# @option options [Object] :query
|
48
48
|
# Search query.
|
@@ -6,7 +6,8 @@ module Slack
|
|
6
6
|
module Endpoints
|
7
7
|
module Stars
|
8
8
|
#
|
9
|
-
#
|
9
|
+
# This method adds a star to an item (message, file, file comment, channel, private group, or DM) on behalf of the authenticated user.
|
10
|
+
# One of file, file_comment, channel, or the combination of channel and timestamp must be specified.
|
10
11
|
#
|
11
12
|
# @option options [channel] :channel
|
12
13
|
# Channel to add star to, or channel where the message to add star to was posted (used with timestamp).
|
@@ -24,7 +25,7 @@ module Slack
|
|
24
25
|
end
|
25
26
|
|
26
27
|
#
|
27
|
-
#
|
28
|
+
# This method lists the items starred by the authed user.
|
28
29
|
#
|
29
30
|
# @option options [Object] :cursor
|
30
31
|
# Parameter for pagination. Set cursor equal to the next_cursor attribute returned by the previous request's response_metadata. This parameter is optional, but pagination is mandatory: the default value simply fetches the first "page" of the collection. See pagination for more details.
|
@@ -43,7 +44,8 @@ module Slack
|
|
43
44
|
end
|
44
45
|
|
45
46
|
#
|
46
|
-
#
|
47
|
+
# This method removes a star from an item (message, file, file comment, channel, private group, or DM) on behalf of the authenticated user.
|
48
|
+
# One of file, file_comment, channel, or the combination of channel and timestamp must be specified.
|
47
49
|
#
|
48
50
|
# @option options [channel] :channel
|
49
51
|
# Channel to remove star from, or channel where the message to remove star from was posted (used with timestamp).
|
@@ -6,7 +6,7 @@ module Slack
|
|
6
6
|
module Endpoints
|
7
7
|
module Team
|
8
8
|
#
|
9
|
-
#
|
9
|
+
# This method is used to retrieve the "access logs" for users on a workspace.
|
10
10
|
#
|
11
11
|
# @option options [Object] :before
|
12
12
|
# End of time range of logs to include in results (inclusive).
|
@@ -17,7 +17,8 @@ module Slack
|
|
17
17
|
end
|
18
18
|
|
19
19
|
#
|
20
|
-
#
|
20
|
+
# This method lists billable information for each user on the team. Currently this consists solely of whether the user is
|
21
|
+
# subject to billing per Slack's Fair Billing policy.
|
21
22
|
#
|
22
23
|
# @option options [user] :user
|
23
24
|
# A user to retrieve the billable information for. Defaults to all users.
|
@@ -29,7 +30,7 @@ module Slack
|
|
29
30
|
end
|
30
31
|
|
31
32
|
#
|
32
|
-
#
|
33
|
+
# This method provides information about your team.
|
33
34
|
#
|
34
35
|
# @see https://api.slack.com/methods/team.info
|
35
36
|
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/team/team.info.json
|
@@ -38,7 +39,7 @@ module Slack
|
|
38
39
|
end
|
39
40
|
|
40
41
|
#
|
41
|
-
#
|
42
|
+
# This method lists the integration activity logs for a team, including when integrations are added, modified and removed. This method can only be called by Admins.
|
42
43
|
#
|
43
44
|
# @option options [Object] :app_id
|
44
45
|
# Filter logs to this Slack app. Defaults to all logs.
|
@@ -6,7 +6,7 @@ module Slack
|
|
6
6
|
module Endpoints
|
7
7
|
module Usergroups
|
8
8
|
#
|
9
|
-
#
|
9
|
+
# This method is used to create a User Group.
|
10
10
|
#
|
11
11
|
# @option options [Object] :name
|
12
12
|
# A name for the User Group. Must be unique among User Groups.
|
@@ -26,7 +26,7 @@ module Slack
|
|
26
26
|
end
|
27
27
|
|
28
28
|
#
|
29
|
-
#
|
29
|
+
# This method disables an existing User Group.
|
30
30
|
#
|
31
31
|
# @option options [Object] :usergroup
|
32
32
|
# The encoded ID of the User Group to disable.
|
@@ -40,7 +40,7 @@ module Slack
|
|
40
40
|
end
|
41
41
|
|
42
42
|
#
|
43
|
-
#
|
43
|
+
# This method enables a User Group which was previously disabled.
|
44
44
|
#
|
45
45
|
# @option options [Object] :usergroup
|
46
46
|
# The encoded ID of the User Group to enable.
|
@@ -54,7 +54,7 @@ module Slack
|
|
54
54
|
end
|
55
55
|
|
56
56
|
#
|
57
|
-
#
|
57
|
+
# This method returns a list of all User Groups in the team. This can optionally include disabled User Groups.
|
58
58
|
#
|
59
59
|
# @option options [Object] :include_count
|
60
60
|
# Include the number of users in each User Group.
|
@@ -69,7 +69,7 @@ module Slack
|
|
69
69
|
end
|
70
70
|
|
71
71
|
#
|
72
|
-
#
|
72
|
+
# This method updates the properties of an existing User Group.
|
73
73
|
#
|
74
74
|
# @option options [Object] :usergroup
|
75
75
|
# The encoded ID of the User Group to update.
|
@@ -6,7 +6,7 @@ module Slack
|
|
6
6
|
module Endpoints
|
7
7
|
module UsergroupsUsers
|
8
8
|
#
|
9
|
-
#
|
9
|
+
# This method returns a list of all users within a User Group.
|
10
10
|
#
|
11
11
|
# @option options [Object] :usergroup
|
12
12
|
# The encoded ID of the User Group to update.
|
@@ -20,7 +20,7 @@ module Slack
|
|
20
20
|
end
|
21
21
|
|
22
22
|
#
|
23
|
-
#
|
23
|
+
# This method updates the list of users that belong to a User Group. This method replaces all users in a User Group with the list of users provided in the users parameter.
|
24
24
|
#
|
25
25
|
# @option options [Object] :usergroup
|
26
26
|
# The encoded ID of the User Group to update.
|
@@ -6,7 +6,7 @@ module Slack
|
|
6
6
|
module Endpoints
|
7
7
|
module Users
|
8
8
|
#
|
9
|
-
#
|
9
|
+
# As part of the Conversations API, this method's required scopes depend on the type of channel-like object you're working with. For classic Slack apps, a corresponding channels: scope is required when working with public channels, groups: for private channels, also the same rules are applied for im: and mpim:. For workspace apps, a conversations: scope is all that's needed.
|
10
10
|
#
|
11
11
|
# @option options [Object] :cursor
|
12
12
|
# Paginate through collections of data by setting the cursor parameter to a next_cursor attribute returned by a previous request's response_metadata. Default value fetches the first "page" of the collection. See pagination for more detail.
|
@@ -32,7 +32,7 @@ module Slack
|
|
32
32
|
end
|
33
33
|
|
34
34
|
#
|
35
|
-
#
|
35
|
+
# This method allows the user to delete their profile image. It will clear whatever image is currently set.
|
36
36
|
#
|
37
37
|
# @see https://api.slack.com/methods/users.deletePhoto
|
38
38
|
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/users/users.deletePhoto.json
|
@@ -41,7 +41,8 @@ module Slack
|
|
41
41
|
end
|
42
42
|
|
43
43
|
#
|
44
|
-
#
|
44
|
+
# This method lets you find out information about a user's presence.
|
45
|
+
# Consult the presence documentation for more details.
|
45
46
|
#
|
46
47
|
# @option options [user] :user
|
47
48
|
# User to get presence info on. Defaults to the authed user.
|
@@ -54,7 +55,7 @@ module Slack
|
|
54
55
|
end
|
55
56
|
|
56
57
|
#
|
57
|
-
#
|
58
|
+
# After your Slack app is awarded an identity token through Sign in with Slack, use this method to retrieve a user's identity.
|
58
59
|
#
|
59
60
|
# @see https://api.slack.com/methods/users.identity
|
60
61
|
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/users/users.identity.json
|
@@ -63,7 +64,7 @@ module Slack
|
|
63
64
|
end
|
64
65
|
|
65
66
|
#
|
66
|
-
#
|
67
|
+
# This method returns information about a member of a workspace.
|
67
68
|
#
|
68
69
|
# @option options [user] :user
|
69
70
|
# User to get info on.
|
@@ -78,7 +79,7 @@ module Slack
|
|
78
79
|
end
|
79
80
|
|
80
81
|
#
|
81
|
-
#
|
82
|
+
# This method returns a list of all users in the workspace. This includes deleted/deactivated users.
|
82
83
|
#
|
83
84
|
# @option options [Object] :cursor
|
84
85
|
# Paginate through collections of data by setting the cursor parameter to a next_cursor attribute returned by a previous request's response_metadata. Default value fetches the first "page" of the collection. See pagination for more detail.
|
@@ -86,8 +87,6 @@ module Slack
|
|
86
87
|
# Set this to true to receive the locale for users. Defaults to false.
|
87
88
|
# @option options [Object] :limit
|
88
89
|
# The maximum number of items to return. Fewer than the requested number of items may be returned, even if the end of the users list hasn't been reached.
|
89
|
-
# @option options [Object] :presence
|
90
|
-
# Deprecated. Whether to include presence data in the output. Defaults to false. Setting this to true reduces performance, especially with large teams.
|
91
90
|
# @see https://api.slack.com/methods/users.list
|
92
91
|
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/users/users.list.json
|
93
92
|
def users_list(options = {})
|
@@ -101,7 +100,7 @@ module Slack
|
|
101
100
|
end
|
102
101
|
|
103
102
|
#
|
104
|
-
#
|
103
|
+
# Retrieve a single user by looking them up by their registered email address. Requires users:read.email.
|
105
104
|
#
|
106
105
|
# @option options [Object] :email
|
107
106
|
# An email address belonging to a user in the workspace.
|
@@ -113,7 +112,7 @@ module Slack
|
|
113
112
|
end
|
114
113
|
|
115
114
|
#
|
116
|
-
#
|
115
|
+
# This method is no longer functional and the behavior it controlled is no longer offered. The method will no longer exist beginning May 8, 2018.
|
117
116
|
#
|
118
117
|
# @see https://api.slack.com/methods/users.setActive
|
119
118
|
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/users/users.setActive.json
|
@@ -122,7 +121,7 @@ module Slack
|
|
122
121
|
end
|
123
122
|
|
124
123
|
#
|
125
|
-
#
|
124
|
+
# This method allows the user to set their profile image. The caller can pass image data via image.
|
126
125
|
#
|
127
126
|
# @option options [Object] :image
|
128
127
|
# File contents via multipart/form-data.
|
@@ -140,7 +139,8 @@ module Slack
|
|
140
139
|
end
|
141
140
|
|
142
141
|
#
|
143
|
-
#
|
142
|
+
# This method lets you set the calling user's manual presence.
|
143
|
+
# Consult the presence documentation for more details.
|
144
144
|
#
|
145
145
|
# @option options [Object] :presence
|
146
146
|
# Either auto or away.
|
@@ -6,7 +6,7 @@ module Slack
|
|
6
6
|
module Endpoints
|
7
7
|
module UsersProfile
|
8
8
|
#
|
9
|
-
#
|
9
|
+
# Use this method to retrieve a user's profile information.
|
10
10
|
#
|
11
11
|
# @option options [Object] :include_labels
|
12
12
|
# Include labels for each ID in custom profile fields.
|
@@ -20,7 +20,7 @@ module Slack
|
|
20
20
|
end
|
21
21
|
|
22
22
|
#
|
23
|
-
#
|
23
|
+
# Use this method to set a user's profile information, including name, email, current status, and other attributes.
|
24
24
|
#
|
25
25
|
# @option options [Object] :name
|
26
26
|
# Name of a single key to set. Usable only if profile is not passed.
|
@@ -19,8 +19,6 @@ RSpec.describe 'integration test', skip: (!ENV['SLACK_API_TOKEN'] || !ENV['CONCU
|
|
19
19
|
Slack.configure do |slack|
|
20
20
|
slack.logger = logger
|
21
21
|
end
|
22
|
-
|
23
|
-
@queue = QueueWithTimeout.new
|
24
22
|
end
|
25
23
|
|
26
24
|
after do
|
@@ -29,38 +27,41 @@ RSpec.describe 'integration test', skip: (!ENV['SLACK_API_TOKEN'] || !ENV['CONCU
|
|
29
27
|
|
30
28
|
let(:client) { Slack::RealTime::Client.new(token: ENV['SLACK_API_TOKEN']) }
|
31
29
|
|
32
|
-
let(:queue) { @queue }
|
33
|
-
|
34
|
-
def start
|
35
|
-
# starts the client and pushes an item on a queue when connected
|
36
|
-
client.start_async do |driver|
|
37
|
-
driver.on :open do |data|
|
38
|
-
logger.debug "connection.on :open, data=#{data}"
|
39
|
-
queue.push nil
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
30
|
+
let!(:queue) { @queue = QueueWithTimeout.new }
|
43
31
|
|
44
32
|
before do
|
45
33
|
client.on :hello do
|
46
34
|
logger.info "Successfully connected, welcome '#{client.self.name}' to the '#{client.team.name}' team at https://#{client.team.domain}.slack.com."
|
47
35
|
end
|
48
36
|
|
37
|
+
client.on :message do |event|
|
38
|
+
logger.info " #{event.class}"
|
39
|
+
end
|
40
|
+
|
49
41
|
client.on :close do
|
50
42
|
logger.info 'Disconnecting ...'
|
51
43
|
# pushes another item to the queue when disconnected
|
52
|
-
queue.push
|
44
|
+
queue.push :closed
|
53
45
|
end
|
54
46
|
end
|
55
47
|
|
56
48
|
def start_server
|
57
|
-
dt = rand(
|
49
|
+
dt = rand(10..20)
|
58
50
|
logger.debug "#start_server, waiting #{dt} second(s)"
|
59
51
|
sleep dt # prevent Slack 429 rate limit errors
|
60
|
-
#
|
61
|
-
@server =
|
52
|
+
# starts the client and pushes an item on a queue when connected
|
53
|
+
@server = client.start_async do |driver|
|
54
|
+
driver.on :open do |data|
|
55
|
+
logger.debug "connection.on :open, data=#{data}"
|
56
|
+
queue.push :opened
|
57
|
+
end
|
58
|
+
|
59
|
+
driver.on :hello do |data|
|
60
|
+
logger.debug "connection.on :hello, data=#{data}"
|
61
|
+
end
|
62
|
+
end
|
62
63
|
logger.debug "started #{@server}"
|
63
|
-
queue.pop_with_timeout(5)
|
64
|
+
expect(queue.pop_with_timeout(5)).to eq :opened
|
64
65
|
end
|
65
66
|
|
66
67
|
def wait_for_server
|
@@ -72,27 +73,16 @@ RSpec.describe 'integration test', skip: (!ENV['SLACK_API_TOKEN'] || !ENV['CONCU
|
|
72
73
|
@queue = nil
|
73
74
|
end
|
74
75
|
|
75
|
-
def stop_server
|
76
|
-
logger.debug '#stop_server'
|
77
|
-
client.stop!
|
78
|
-
logger.debug '#stop_server, stopped'
|
79
|
-
end
|
80
|
-
|
81
76
|
after do
|
82
|
-
wait_for_server
|
77
|
+
wait_for_server # wait for :closed to be pushed on queue
|
83
78
|
@server.join if @server.is_a?(::Thread)
|
84
79
|
end
|
85
80
|
|
86
81
|
context 'client connected' do
|
87
|
-
before do
|
88
|
-
start_server
|
89
|
-
end
|
90
|
-
|
91
82
|
let(:channel) { "@#{client.self.id}" }
|
83
|
+
let(:message) { SecureRandom.hex }
|
92
84
|
|
93
85
|
it 'responds to message' do
|
94
|
-
message = SecureRandom.hex
|
95
|
-
|
96
86
|
client.on :message do |data|
|
97
87
|
logger.debug data
|
98
88
|
# concurrent execution of tests causes messages to arrive in any order
|
@@ -105,13 +95,19 @@ RSpec.describe 'integration test', skip: (!ENV['SLACK_API_TOKEN'] || !ENV['CONCU
|
|
105
95
|
client.stop!
|
106
96
|
end
|
107
97
|
|
98
|
+
start_server
|
99
|
+
|
108
100
|
logger.debug "chat_postMessage, channel=#{channel}, message=#{message}"
|
109
101
|
client.web_client.chat_postMessage channel: channel, text: message
|
110
102
|
end
|
111
103
|
|
112
104
|
it 'sends message' do
|
113
|
-
client.
|
114
|
-
|
105
|
+
client.on :hello do
|
106
|
+
expect(client.message(channel: channel, text: message)).to be true
|
107
|
+
client.stop!
|
108
|
+
end
|
109
|
+
|
110
|
+
start_server
|
115
111
|
end
|
116
112
|
end
|
117
113
|
|
@@ -127,19 +123,23 @@ RSpec.describe 'integration test', skip: (!ENV['SLACK_API_TOKEN'] || !ENV['CONCU
|
|
127
123
|
|
128
124
|
context 'with websocket_ping set' do
|
129
125
|
before do
|
130
|
-
client.websocket_ping =
|
126
|
+
client.websocket_ping = 1
|
131
127
|
end
|
128
|
+
|
132
129
|
it 'sends pings' do
|
133
130
|
@reply_to = nil
|
134
131
|
client.on :pong do |data|
|
135
132
|
@reply_to = data.reply_to
|
136
|
-
queue.push
|
133
|
+
queue.push :pong
|
137
134
|
client.stop!
|
138
135
|
end
|
136
|
+
|
139
137
|
start_server
|
138
|
+
|
140
139
|
queue.pop_with_timeout(5)
|
141
140
|
expect(@reply_to).to be 1
|
142
141
|
end
|
142
|
+
|
143
143
|
it 'rebuilds the websocket connection when dropped' do
|
144
144
|
@reply_to = nil
|
145
145
|
client.on :pong do |data|
|
@@ -148,11 +148,13 @@ RSpec.describe 'integration test', skip: (!ENV['SLACK_API_TOKEN'] || !ENV['CONCU
|
|
148
148
|
client.instance_variable_get(:@socket).close
|
149
149
|
else
|
150
150
|
expect(@reply_to).to be 2
|
151
|
-
queue.push
|
151
|
+
queue.push :pong
|
152
152
|
client.stop!
|
153
153
|
end
|
154
154
|
end
|
155
|
+
|
155
156
|
start_server
|
157
|
+
|
156
158
|
queue.pop_with_timeout(10)
|
157
159
|
queue.pop_with_timeout(10)
|
158
160
|
end
|
@@ -162,16 +164,21 @@ RSpec.describe 'integration test', skip: (!ENV['SLACK_API_TOKEN'] || !ENV['CONCU
|
|
162
164
|
before do
|
163
165
|
client.websocket_ping = 0
|
164
166
|
end
|
167
|
+
|
165
168
|
it 'does not send pings' do
|
166
169
|
@reply_to = nil
|
170
|
+
|
167
171
|
client.on :pong do |data|
|
168
172
|
@reply_to = data.reply_to
|
169
173
|
end
|
174
|
+
|
170
175
|
client.on :hello do
|
171
176
|
client.stop!
|
172
177
|
end
|
178
|
+
|
173
179
|
start_server
|
174
180
|
wait_for_server
|
181
|
+
|
175
182
|
expect(@reply_to).to be nil
|
176
183
|
end
|
177
184
|
end
|