slack-ruby-client 0.14.1 → 0.14.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|