slack-ruby-client 0.14.5 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/FUNDING.yml +1 -0
- data/.rubocop.yml +11 -3
- data/.rubocop_todo.yml +61 -23
- data/.travis.yml +1 -5
- data/CHANGELOG.md +43 -4
- data/CONTRIBUTING.md +17 -6
- data/Dangerfile +1 -1
- data/Gemfile +1 -2
- data/LICENSE.md +1 -1
- data/README.md +86 -52
- data/UPGRADING.md +20 -2
- data/bin/commands.rb +23 -0
- data/bin/commands/admin_analytics.rb +16 -0
- data/bin/commands/admin_apps.rb +15 -2
- data/bin/commands/admin_apps_approved.rb +17 -0
- data/bin/commands/admin_apps_restricted.rb +17 -0
- data/bin/commands/admin_barriers.rb +47 -0
- data/bin/commands/admin_conversations.rb +159 -0
- data/bin/commands/admin_conversations_ekm.rb +17 -0
- data/bin/commands/admin_conversations_restrictAccess.rb +37 -0
- data/bin/commands/admin_conversations_whitelist.rb +37 -0
- data/bin/commands/admin_emoji.rb +54 -0
- data/bin/commands/admin_inviteRequests.rb +36 -0
- data/bin/commands/admin_inviteRequests_approved.rb +16 -0
- data/bin/commands/admin_inviteRequests_denied.rb +16 -0
- data/bin/commands/admin_teams.rb +27 -0
- data/bin/commands/admin_teams_admins.rb +16 -0
- data/bin/commands/admin_teams_owners.rb +16 -0
- data/bin/commands/admin_teams_settings.rb +64 -0
- data/bin/commands/admin_usergroups.rb +48 -0
- data/bin/commands/admin_users.rb +97 -0
- data/bin/commands/admin_users_session.rb +22 -0
- data/bin/commands/api.rb +0 -1
- data/bin/commands/apps_connections.rb +13 -0
- data/bin/commands/apps_event_authorizations.rb +16 -0
- data/bin/commands/auth_teams.rb +16 -0
- data/bin/commands/bots.rb +1 -0
- data/bin/commands/calls.rb +52 -0
- data/bin/commands/calls_participants.rb +25 -0
- data/bin/commands/channels.rb +1 -155
- data/bin/commands/chat.rb +14 -12
- data/bin/commands/chat_scheduledMessages.rb +1 -0
- data/bin/commands/conversations.rb +15 -4
- data/bin/commands/dnd.rb +3 -1
- data/bin/commands/files.rb +7 -5
- data/bin/commands/files_remote.rb +3 -3
- data/bin/commands/groups.rb +1 -162
- data/bin/commands/im.rb +1 -63
- data/bin/commands/migration.rb +1 -0
- data/bin/commands/mpim.rb +1 -61
- data/bin/commands/oauth.rb +1 -1
- data/bin/commands/pins.rb +0 -2
- data/bin/commands/reactions.rb +1 -0
- data/bin/commands/search.rb +4 -1
- data/bin/commands/team.rb +3 -0
- data/bin/commands/usergroups.rb +6 -1
- data/bin/commands/usergroups_users.rb +2 -0
- data/bin/commands/users.rb +5 -3
- data/bin/commands/users_profile.rb +5 -5
- data/bin/commands/views.rb +1 -1
- data/bin/commands/workflows.rb +38 -0
- data/lib/slack-ruby-client.rb +5 -4
- data/lib/slack/events/request.rb +7 -3
- data/lib/slack/messages/message.rb +0 -4
- data/lib/slack/real_time/client.rb +2 -1
- data/lib/slack/real_time/concurrency.rb +0 -2
- data/lib/slack/real_time/concurrency/async.rb +1 -3
- data/lib/slack/real_time/config.rb +5 -14
- data/lib/slack/real_time/models/base.rb +0 -4
- data/lib/slack/real_time/socket.rb +2 -2
- data/lib/slack/real_time/stores/base.rb +3 -1
- data/lib/slack/version.rb +1 -1
- data/lib/slack/web/api/endpoints.rb +47 -0
- data/lib/slack/web/api/endpoints/admin_analytics.rb +28 -0
- data/lib/slack/web/api/endpoints/admin_apps.rb +22 -2
- data/lib/slack/web/api/endpoints/admin_apps_approved.rb +35 -0
- data/lib/slack/web/api/endpoints/admin_apps_restricted.rb +35 -0
- data/lib/slack/web/api/endpoints/admin_barriers.rb +82 -0
- data/lib/slack/web/api/endpoints/admin_conversations.rb +246 -0
- data/lib/slack/web/api/endpoints/admin_conversations_ekm.rb +35 -0
- data/lib/slack/web/api/endpoints/admin_conversations_restrictAccess.rb +61 -0
- data/lib/slack/web/api/endpoints/admin_conversations_whitelist.rb +64 -0
- data/lib/slack/web/api/endpoints/admin_emoji.rb +88 -0
- data/lib/slack/web/api/endpoints/admin_inviteRequests.rb +61 -0
- data/lib/slack/web/api/endpoints/admin_inviteRequests_approved.rb +33 -0
- data/lib/slack/web/api/endpoints/admin_inviteRequests_denied.rb +33 -0
- data/lib/slack/web/api/endpoints/admin_teams.rb +50 -0
- data/lib/slack/web/api/endpoints/admin_teams_admins.rb +34 -0
- data/lib/slack/web/api/endpoints/admin_teams_owners.rb +34 -0
- data/lib/slack/web/api/endpoints/admin_teams_settings.rb +99 -0
- data/lib/slack/web/api/endpoints/admin_usergroups.rb +77 -0
- data/lib/slack/web/api/endpoints/admin_users.rb +161 -0
- data/lib/slack/web/api/endpoints/admin_users_session.rb +38 -0
- data/lib/slack/web/api/endpoints/api.rb +0 -2
- data/lib/slack/web/api/endpoints/apps_connections.rb +21 -0
- data/lib/slack/web/api/endpoints/apps_event_authorizations.rb +34 -0
- data/lib/slack/web/api/endpoints/auth_teams.rb +33 -0
- data/lib/slack/web/api/endpoints/bots.rb +2 -0
- data/lib/slack/web/api/endpoints/calls.rb +83 -0
- data/lib/slack/web/api/endpoints/calls_participants.rb +42 -0
- data/lib/slack/web/api/endpoints/channels.rb +1 -245
- data/lib/slack/web/api/endpoints/chat.rb +23 -19
- data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +3 -1
- data/lib/slack/web/api/endpoints/conversations.rb +37 -19
- data/lib/slack/web/api/endpoints/dnd.rb +4 -0
- data/lib/slack/web/api/endpoints/files.rb +8 -4
- data/lib/slack/web/api/endpoints/files_remote.rb +4 -4
- data/lib/slack/web/api/endpoints/groups.rb +0 -253
- data/lib/slack/web/api/endpoints/im.rb +0 -101
- data/lib/slack/web/api/endpoints/migration.rb +2 -0
- data/lib/slack/web/api/endpoints/mpim.rb +0 -96
- data/lib/slack/web/api/endpoints/oauth.rb +1 -4
- data/lib/slack/web/api/endpoints/pins.rb +3 -8
- data/lib/slack/web/api/endpoints/reactions.rb +5 -3
- data/lib/slack/web/api/endpoints/search.rb +6 -0
- data/lib/slack/web/api/endpoints/stars.rb +2 -2
- data/lib/slack/web/api/endpoints/team.rb +6 -0
- data/lib/slack/web/api/endpoints/usergroups.rb +10 -0
- data/lib/slack/web/api/endpoints/usergroups_users.rb +4 -0
- data/lib/slack/web/api/endpoints/users.rb +7 -5
- data/lib/slack/web/api/endpoints/users_profile.rb +3 -3
- data/lib/slack/web/api/endpoints/views.rb +1 -1
- data/lib/slack/web/api/endpoints/workflows.rb +61 -0
- data/lib/slack/web/api/errors.rb +848 -0
- data/lib/slack/web/api/errors/internal_error.rb +14 -0
- data/lib/slack/web/api/errors/slack_error.rb +12 -0
- data/lib/slack/web/api/mixins.rb +1 -0
- data/lib/slack/web/api/mixins/channels.id.rb +1 -3
- data/lib/slack/web/api/mixins/conversations.id.rb +25 -0
- data/lib/slack/web/api/mixins/groups.id.rb +1 -3
- data/lib/slack/web/api/mixins/ids.id.rb +3 -5
- data/lib/slack/web/api/mixins/users.id.rb +1 -3
- data/lib/slack/web/api/patches/{chat.6.block-kit-support.patch → chat.1.patch} +26 -24
- data/lib/slack/web/api/templates/endpoints.erb +1 -0
- data/lib/slack/web/api/templates/errors.erb +20 -0
- data/lib/slack/web/api/templates/method.erb +4 -1
- data/lib/slack/web/api/templates/method_spec.erb +1 -1
- data/lib/slack/web/client.rb +1 -1
- data/lib/slack/web/config.rb +2 -0
- data/lib/slack/web/faraday/connection.rb +23 -20
- data/lib/slack/web/faraday/response/raise_error.rb +16 -2
- data/lib/slack/web/faraday/response/wrap_error.rb +24 -0
- data/lib/slack/web/pagination/cursor.rb +2 -2
- data/lib/tasks/real_time.rake +1 -1
- data/lib/tasks/web.rake +21 -4
- data/slack-ruby-client.gemspec +5 -5
- data/spec/fixtures/slack/web/channels_info.yml +108 -15
- data/spec/fixtures/slack/web/{groups_info.yml → conversations_info.yml} +4 -4
- data/spec/fixtures/slack/web/conversations_setTopic.yml +69 -0
- data/spec/fixtures/slack/web/conversations_setTopic_one_page.yml +142 -0
- data/spec/fixtures/slack/web/conversations_setTopic_paginated.yml +208 -0
- data/spec/fixtures/slack/web/views_open_error.yml +76 -0
- data/spec/slack/events/request_spec.rb +13 -8
- data/spec/slack/real_time/client_spec.rb +18 -1
- data/spec/slack/real_time/concurrency/with_concurrency_spec.rb +10 -0
- data/spec/slack/real_time/concurrency/without_concurrency_spec.rb +10 -0
- data/spec/slack/real_time/rtm_connect_spec.rb +1 -1
- data/spec/slack/real_time/rtm_start_spec.rb +1 -1
- data/spec/slack/web/api/endpoints/admin_analytics_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/admin_apps_approved_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_apps_restricted_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_apps_spec.rb +5 -0
- data/spec/slack/web/api/endpoints/admin_barriers_spec.rb +38 -0
- data/spec/slack/web/api/endpoints/admin_conversations_ekm_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_conversations_restrictAccess_spec.rb +32 -0
- data/spec/slack/web/api/endpoints/admin_conversations_spec.rb +93 -0
- data/spec/slack/web/api/endpoints/admin_emoji_spec.rb +37 -0
- data/spec/slack/web/api/endpoints/admin_inviteRequests_approved_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_inviteRequests_denied_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_inviteRequests_spec.rb +18 -0
- data/spec/slack/web/api/endpoints/admin_teams_admins_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/admin_teams_owners_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/admin_teams_settings_spec.rb +53 -0
- data/spec/slack/web/api/endpoints/admin_teams_spec.rb +16 -0
- data/spec/slack/web/api/endpoints/admin_usergroups_spec.rb +37 -0
- data/spec/slack/web/api/endpoints/admin_users_session_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_users_spec.rb +67 -0
- data/spec/slack/web/api/endpoints/apps_connections_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/apps_event_authorizations_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/apps_permissions_spec.rb +2 -2
- data/spec/slack/web/api/endpoints/apps_permissions_users_spec.rb +3 -3
- data/spec/slack/web/api/endpoints/apps_spec.rb +2 -2
- data/spec/slack/web/api/endpoints/auth_teams_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/calls_participants_spec.rb +24 -0
- data/spec/slack/web/api/endpoints/calls_spec.rb +31 -0
- data/spec/slack/web/api/endpoints/conversations_spec.rb +20 -12
- data/spec/slack/web/api/endpoints/custom_specs/conversations_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/files_comments_spec.rb +2 -2
- data/spec/slack/web/api/endpoints/files_remote_spec.rb +3 -3
- data/spec/slack/web/api/endpoints/files_spec.rb +4 -4
- data/spec/slack/web/api/endpoints/im_spec.rb +0 -31
- data/spec/slack/web/api/endpoints/mpim_spec.rb +0 -31
- data/spec/slack/web/api/endpoints/oauth_spec.rb +3 -14
- data/spec/slack/web/api/endpoints/pins_spec.rb +1 -4
- data/spec/slack/web/api/endpoints/reactions_spec.rb +3 -3
- data/spec/slack/web/api/endpoints/reminders_spec.rb +2 -2
- data/spec/slack/web/api/endpoints/usergroups_users_spec.rb +2 -2
- data/spec/slack/web/api/endpoints/workflows_spec.rb +26 -0
- data/spec/slack/web/api/errors/slack_error_spec.rb +22 -0
- data/spec/slack/web/api/mixins/channels_spec.rb +1 -1
- data/spec/slack/web/api/mixins/conversations_list_spec.rb +21 -0
- data/spec/slack/web/api/mixins/conversations_spec.rb +43 -0
- data/spec/slack/web/api/mixins/groups_spec.rb +1 -1
- data/spec/slack/web/api/mixins/users_spec.rb +1 -1
- data/spec/slack/web/client_spec.rb +121 -0
- data/spec/slack/web/faraday/response/raise_error_spec.rb +33 -9
- data/spec/support/vcr.rb +4 -0
- metadata +145 -55
- data/examples/hi_real_time/Gemfile +0 -6
- data/examples/hi_real_time/hi.gif +0 -0
- data/examples/hi_real_time/hi.rb +0 -41
- data/examples/hi_real_time_async_celluloid/Gemfile +0 -7
- data/examples/hi_real_time_async_celluloid/Procfile +0 -2
- data/examples/hi_real_time_async_celluloid/hi.rb +0 -39
- data/examples/hi_real_time_async_eventmachine/Gemfile +0 -7
- data/examples/hi_real_time_async_eventmachine/Procfile +0 -2
- data/examples/hi_real_time_async_eventmachine/hi.rb +0 -39
- data/lib/slack/real_time/concurrency/celluloid.rb +0 -142
- data/lib/slack/real_time/concurrency/eventmachine.rb +0 -85
- data/lib/slack/web/api/patches/chat.1.text-attachments-required.patch +0 -13
- data/lib/slack/web/api/patches/chat.2.attachments-json.patch +0 -17
- data/lib/slack/web/api/patches/chat.3.update-attachments-support.patch +0 -21
- data/lib/slack/web/api/patches/chat.4.postEphemeral-attachments-support.patch +0 -17
- data/lib/slack/web/api/patches/chat.5.postEphemeral-text-or-attachments.patch +0 -15
- data/spec/slack/real_time/concurrency/celluloid_spec.rb +0 -116
- data/spec/slack/real_time/concurrency/eventmachine_spec.rb +0 -57
- data/spec/slack/web/api/endpoints/custom_specs/channels_spec.rb +0 -13
- data/spec/slack/web/api/endpoints/custom_specs/groups_spec.rb +0 -13
- data/spec/slack/web/api/endpoints/views_spec.rb +0 -29
- data/spec/slack/web/api/errors/service_unavailable_spec.rb +0 -17
|
Binary file
|
data/examples/hi_real_time/hi.rb
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require 'slack-ruby-client'
|
|
3
|
-
|
|
4
|
-
Slack.configure do |config|
|
|
5
|
-
config.token = ENV['SLACK_API_TOKEN']
|
|
6
|
-
config.logger = Logger.new(STDOUT)
|
|
7
|
-
config.logger.level = Logger::INFO
|
|
8
|
-
raise 'Missing ENV[SLACK_API_TOKEN]!' unless config.token
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
client = Slack::RealTime::Client.new
|
|
12
|
-
|
|
13
|
-
client.on :hello do
|
|
14
|
-
puts(
|
|
15
|
-
"Successfully connected, welcome '#{client.self.name}' to " \
|
|
16
|
-
"the '#{client.team.name}' team at https://#{client.team.domain}.slack.com."
|
|
17
|
-
)
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
client.on :message do |data|
|
|
21
|
-
puts data
|
|
22
|
-
|
|
23
|
-
client.typing channel: data.channel
|
|
24
|
-
|
|
25
|
-
case data.text
|
|
26
|
-
when 'bot hi'
|
|
27
|
-
client.message channel: data.channel, text: "Hi <@#{data.user}>!"
|
|
28
|
-
when /^bot/
|
|
29
|
-
client.message channel: data.channel, text: "Sorry <@#{data.user}>, what?"
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
client.on :close do |_data|
|
|
34
|
-
puts 'Connection closing, exiting.'
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
client.on :closed do |_data|
|
|
38
|
-
puts 'Connection has been disconnected.'
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
client.start!
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require 'slack-ruby-client'
|
|
3
|
-
|
|
4
|
-
raise 'Missing ENV[SLACK_API_TOKENS]!' unless ENV.key?('SLACK_API_TOKENS')
|
|
5
|
-
|
|
6
|
-
$stdout.sync = true
|
|
7
|
-
logger = Logger.new($stdout)
|
|
8
|
-
logger.level = Logger::DEBUG
|
|
9
|
-
threads = []
|
|
10
|
-
|
|
11
|
-
ENV['SLACK_API_TOKENS'].split.each do |token|
|
|
12
|
-
logger.info "Starting #{token[0..12]} ..."
|
|
13
|
-
|
|
14
|
-
client = Slack::RealTime::Client.new(token: token)
|
|
15
|
-
|
|
16
|
-
client.on :hello do
|
|
17
|
-
logger.info(
|
|
18
|
-
"Successfully connected, welcome '#{client.self.name}' to " \
|
|
19
|
-
"the '#{client.team.name}' team at https://#{client.team.domain}.slack.com."
|
|
20
|
-
)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
client.on :message do |data|
|
|
24
|
-
logger.info data
|
|
25
|
-
|
|
26
|
-
client.typing channel: data.channel
|
|
27
|
-
|
|
28
|
-
case data.text
|
|
29
|
-
when 'bot hi'
|
|
30
|
-
client.message channel: data.channel, text: "Hi <@#{data.user}>!"
|
|
31
|
-
when /^bot/
|
|
32
|
-
client.message channel: data.channel, text: "Sorry <@#{data.user}>, what?"
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
threads << client.start_async
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
threads.each(&:join)
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require 'slack-ruby-client'
|
|
3
|
-
|
|
4
|
-
raise 'Missing ENV[SLACK_API_TOKENS]!' unless ENV.key?('SLACK_API_TOKENS')
|
|
5
|
-
|
|
6
|
-
$stdout.sync = true
|
|
7
|
-
logger = Logger.new($stdout)
|
|
8
|
-
logger.level = Logger::DEBUG
|
|
9
|
-
threads = []
|
|
10
|
-
|
|
11
|
-
ENV['SLACK_API_TOKENS'].split.each do |token|
|
|
12
|
-
logger.info "Starting #{token[0..12]} ..."
|
|
13
|
-
|
|
14
|
-
client = Slack::RealTime::Client.new(token: token)
|
|
15
|
-
|
|
16
|
-
client.on :hello do
|
|
17
|
-
logger.info(
|
|
18
|
-
"Successfully connected, welcome '#{client.self.name}' to " \
|
|
19
|
-
"the '#{client.team.name}' team at https://#{client.team.domain}.slack.com."
|
|
20
|
-
)
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
client.on :message do |data|
|
|
24
|
-
logger.info data
|
|
25
|
-
|
|
26
|
-
client.typing channel: data.channel
|
|
27
|
-
|
|
28
|
-
case data.text
|
|
29
|
-
when 'bot hi'
|
|
30
|
-
client.message channel: data.channel, text: "Hi <@#{data.user}>!"
|
|
31
|
-
when /^bot/
|
|
32
|
-
client.message channel: data.channel, text: "Sorry <@#{data.user}>, what?"
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
threads << client.start_async
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
threads.each(&:join)
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require 'websocket/driver'
|
|
3
|
-
require 'socket'
|
|
4
|
-
require 'forwardable'
|
|
5
|
-
require 'celluloid/current'
|
|
6
|
-
require 'celluloid/io'
|
|
7
|
-
|
|
8
|
-
module Slack
|
|
9
|
-
module RealTime
|
|
10
|
-
module Concurrency
|
|
11
|
-
module Celluloid
|
|
12
|
-
class Socket < Slack::RealTime::Socket
|
|
13
|
-
include ::Celluloid::IO
|
|
14
|
-
include ::Celluloid::Internals::Logger
|
|
15
|
-
|
|
16
|
-
BLOCK_SIZE = 4096
|
|
17
|
-
|
|
18
|
-
extend ::Forwardable
|
|
19
|
-
def_delegators :driver, :text, :binary
|
|
20
|
-
|
|
21
|
-
attr_reader :socket
|
|
22
|
-
|
|
23
|
-
def initialize(*args)
|
|
24
|
-
super
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def connect!
|
|
28
|
-
super
|
|
29
|
-
run_loop
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def run_loop
|
|
33
|
-
@closing = false
|
|
34
|
-
@socket = build_socket
|
|
35
|
-
@connected = @socket.connect
|
|
36
|
-
driver.start
|
|
37
|
-
loop { read } if socket
|
|
38
|
-
rescue EOFError, Errno::ECONNRESET, Errno::EPIPE => e
|
|
39
|
-
logger.debug("#{self.class}##{__method__}") { e }
|
|
40
|
-
unless @closing
|
|
41
|
-
driver.emit(
|
|
42
|
-
:close,
|
|
43
|
-
WebSocket::Driver::CloseEvent.new(1001, 'server closed connection')
|
|
44
|
-
)
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def disconnect!
|
|
49
|
-
super
|
|
50
|
-
@ping_timer&.cancel
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def close
|
|
54
|
-
@closing = true
|
|
55
|
-
super
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
def read
|
|
59
|
-
buffer = socket.readpartial(BLOCK_SIZE)
|
|
60
|
-
raise EOFError unless buffer && !buffer.empty?
|
|
61
|
-
|
|
62
|
-
async.handle_read(buffer)
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def handle_read(buffer)
|
|
66
|
-
logger.debug("#{self.class}##{__method__}") { buffer }
|
|
67
|
-
driver&.parse buffer
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
def write(data)
|
|
71
|
-
logger.debug("#{self.class}##{__method__}") { data }
|
|
72
|
-
socket.write(data)
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
def start_async(client)
|
|
76
|
-
@client = client
|
|
77
|
-
Actor.new(future.run_ping_loop)
|
|
78
|
-
Actor.new(future.run_client_loop)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def run_client_loop
|
|
82
|
-
@client.run_loop
|
|
83
|
-
rescue StandardError => e
|
|
84
|
-
logger.debug("#{self.class}##{__method__}") { e }
|
|
85
|
-
raise e
|
|
86
|
-
end
|
|
87
|
-
|
|
88
|
-
def run_ping_loop
|
|
89
|
-
return unless @client.run_ping?
|
|
90
|
-
|
|
91
|
-
@ping_timer = every @client.websocket_ping_timer do
|
|
92
|
-
@client.run_ping!
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
def restart_async(client, new_url)
|
|
97
|
-
@last_message_at = current_time
|
|
98
|
-
@url = new_url
|
|
99
|
-
@client = client
|
|
100
|
-
Actor.new(future.run_client_loop)
|
|
101
|
-
end
|
|
102
|
-
|
|
103
|
-
def connected?
|
|
104
|
-
!@connected.nil? && !@driver.nil?
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
protected
|
|
108
|
-
|
|
109
|
-
class Actor
|
|
110
|
-
attr_reader :future
|
|
111
|
-
|
|
112
|
-
def initialize(future)
|
|
113
|
-
@future = future
|
|
114
|
-
end
|
|
115
|
-
|
|
116
|
-
def join
|
|
117
|
-
@future.value
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
def build_socket
|
|
122
|
-
socket = ::Celluloid::IO::TCPSocket.new(addr, port)
|
|
123
|
-
socket = ::Celluloid::IO::SSLSocket.new(socket, build_ssl_context) if secure?
|
|
124
|
-
socket
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
def build_ssl_context
|
|
128
|
-
OpenSSL::SSL::SSLContext.new(:TLSv1_2_client)
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
def build_driver
|
|
132
|
-
::WebSocket::Driver.client(self)
|
|
133
|
-
end
|
|
134
|
-
|
|
135
|
-
def connect
|
|
136
|
-
@driver = build_driver
|
|
137
|
-
end
|
|
138
|
-
end
|
|
139
|
-
end
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
end
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
require 'faye/websocket'
|
|
3
|
-
require 'eventmachine'
|
|
4
|
-
|
|
5
|
-
module Slack
|
|
6
|
-
module RealTime
|
|
7
|
-
module Concurrency
|
|
8
|
-
module Eventmachine
|
|
9
|
-
class Client < Faye::WebSocket::Client
|
|
10
|
-
def initialize(url, protocols = nil, options = {})
|
|
11
|
-
@logger =
|
|
12
|
-
options.fetch(:logger) || Slack::RealTime::Config.logger || Slack::Config.logger
|
|
13
|
-
super url, protocols, options.except(:logger)
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def parse(data)
|
|
17
|
-
logger.debug("#{self.class}##{__method__}") { data }
|
|
18
|
-
super data
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def write(data)
|
|
22
|
-
logger.debug("#{self.class}##{__method__}") { data }
|
|
23
|
-
super data
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
protected
|
|
27
|
-
|
|
28
|
-
attr_reader :logger
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
class Socket < Slack::RealTime::Socket
|
|
32
|
-
def start_async(client)
|
|
33
|
-
@thread = ensure_reactor_running
|
|
34
|
-
|
|
35
|
-
if client.run_ping?
|
|
36
|
-
EventMachine.add_periodic_timer client.websocket_ping_timer do
|
|
37
|
-
client.run_ping!
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
client.run_loop
|
|
42
|
-
|
|
43
|
-
@thread
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def restart_async(client, new_url)
|
|
47
|
-
@url = new_url
|
|
48
|
-
@last_message_at = current_time
|
|
49
|
-
@thread = ensure_reactor_running
|
|
50
|
-
|
|
51
|
-
client.run_loop
|
|
52
|
-
|
|
53
|
-
@thread
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def disconnect!
|
|
57
|
-
super
|
|
58
|
-
EventMachine.stop_event_loop if EventMachine.reactor_running?
|
|
59
|
-
@thread = nil
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def send_data(message)
|
|
63
|
-
logger.debug("#{self.class}##{__method__}") { message }
|
|
64
|
-
driver.send(message)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
protected
|
|
68
|
-
|
|
69
|
-
# @return [Thread]
|
|
70
|
-
def ensure_reactor_running
|
|
71
|
-
return if EventMachine.reactor_running?
|
|
72
|
-
|
|
73
|
-
reactor = Thread.new { EventMachine.run }
|
|
74
|
-
Thread.pass until EventMachine.reactor_running?
|
|
75
|
-
reactor
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
def connect
|
|
79
|
-
@driver = Client.new(url, nil, options.merge(logger: logger))
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
end
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
diff --git a/lib/slack/web/api/endpoints/chat.rb b/lib/slack/web/api/endpoints/chat.rb
|
|
2
|
-
index 1f7a8d7..2ec4bed 100644
|
|
3
|
-
--- a/lib/slack/web/api/endpoints/chat.rb
|
|
4
|
-
+++ b/lib/slack/web/api/endpoints/chat.rb
|
|
5
|
-
@@ -49,7 +49,7 @@ module Slack
|
|
6
|
-
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.postMessage.json
|
|
7
|
-
def chat_postMessage(options = {})
|
|
8
|
-
throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
|
|
9
|
-
- throw ArgumentError.new('Required arguments :text missing') if options[:text].nil?
|
|
10
|
-
+ throw ArgumentError.new('Required arguments :text or :attachments missing') if options[:text].nil? && options[:attachments].nil?
|
|
11
|
-
post('chat.postMessage', options)
|
|
12
|
-
end
|
|
13
|
-
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
diff --git a/lib/slack/web/api/endpoints/chat.rb b/lib/slack/web/api/endpoints/chat.rb
|
|
2
|
-
index 1f7a8d7..89b1562 100644
|
|
3
|
-
--- a/lib/slack/web/api/endpoints/chat.rb
|
|
4
|
-
+++ b/lib/slack/web/api/endpoints/chat.rb
|
|
5
|
-
@@ -50,6 +50,12 @@ module Slack
|
|
6
|
-
def chat_postMessage(options = {})
|
|
7
|
-
throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
|
|
8
|
-
throw ArgumentError.new('Required arguments :text or :attachments missing') if options[:text].nil? && options[:attachments].nil?
|
|
9
|
-
+ # attachments must be passed as an encoded JSON string
|
|
10
|
-
+ if options.key?(:attachments)
|
|
11
|
-
+ attachments = options[:attachments]
|
|
12
|
-
+ attachments = JSON.dump(attachments) unless attachments.is_a?(String)
|
|
13
|
-
+ options = options.merge(attachments: attachments)
|
|
14
|
-
+ end
|
|
15
|
-
post('chat.postMessage', options)
|
|
16
|
-
end
|
|
17
|
-
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
diff --git a/lib/slack/web/api/endpoints/chat.rb b/lib/slack/web/api/endpoints/chat.rb
|
|
2
|
-
index 5186416..490bc91 100644
|
|
3
|
-
--- a/lib/slack/web/api/endpoints/chat.rb
|
|
4
|
-
+++ b/lib/slack/web/api/endpoints/chat.rb
|
|
5
|
-
@@ -154,9 +154,15 @@ module Slack
|
|
6
|
-
# @see https://github.com/slack-ruby/slack-api-ref/blob/master/methods/chat/chat.update.json
|
|
7
|
-
def chat_update(options = {})
|
|
8
|
-
throw ArgumentError.new('Required arguments :channel missing') if options[:channel].nil?
|
|
9
|
-
- throw ArgumentError.new('Required arguments :text missing') if options[:text].nil?
|
|
10
|
-
+ throw ArgumentError.new('Required arguments :text or :attachments missing') if options[:text].nil? && options[:attachments].nil?
|
|
11
|
-
throw ArgumentError.new('Required arguments :ts missing') if options[:ts].nil?
|
|
12
|
-
options = options.merge(channel: channels_id(options)['channel']['id']) if options[:channel]
|
|
13
|
-
+ # attachments must be passed as an encoded JSON string
|
|
14
|
-
+ if options.key?(:attachments)
|
|
15
|
-
+ attachments = options[:attachments]
|
|
16
|
-
+ attachments = JSON.dump(attachments) unless attachments.is_a?(String)
|
|
17
|
-
+ options = options.merge(attachments: attachments)
|
|
18
|
-
+ end
|
|
19
|
-
post('chat.update', options)
|
|
20
|
-
end
|
|
21
|
-
end
|