Skip to content

Commit 8378342

Browse files
authored
Merge pull request #1 from dblock/gregsaab-add_files_upload_v2
Simplify the connection approach.
2 parents f5a2b7d + 0530d23 commit 8378342

File tree

12 files changed

+121
-87
lines changed

12 files changed

+121
-87
lines changed

.rubocop_todo.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# This configuration was generated by
22
# `rubocop --auto-gen-config`
3-
# on 2025-02-03 19:01:09 UTC using RuboCop version 1.26.1.
3+
# on 2025-02-04 16:47:31 UTC using RuboCop version 1.26.1.
44
# The point is for the user to remove these configuration records
55
# one by one as the offenses are removed from the code base.
66
# Note that changes in the inspected code, or installation of new
@@ -47,14 +47,14 @@ Lint/RedundantCopDisableDirective:
4747
# Offense count: 13
4848
# Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
4949
Metrics/AbcSize:
50-
Max: 36
50+
Max: 34
5151

5252
# Offense count: 5
5353
# Configuration parameters: IgnoredMethods.
5454
Metrics/CyclomaticComplexity:
55-
Max: 11
55+
Max: 9
5656

57-
# Offense count: 14
57+
# Offense count: 15
5858
# Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
5959
Metrics/MethodLength:
6060
Max: 26
@@ -64,10 +64,10 @@ Metrics/MethodLength:
6464
Metrics/ParameterLists:
6565
Max: 6
6666

67-
# Offense count: 3
67+
# Offense count: 2
6868
# Configuration parameters: IgnoredMethods.
6969
Metrics/PerceivedComplexity:
70-
Max: 11
70+
Max: 9
7171

7272
# Offense count: 2
7373
# This cop supports safe auto-correction (--auto-correct).
@@ -94,7 +94,7 @@ RSpec/ContextMethod:
9494
RSpec/ContextWording:
9595
Enabled: false
9696

97-
# Offense count: 66
97+
# Offense count: 67
9898
# Configuration parameters: CountAsOne.
9999
RSpec/ExampleLength:
100100
Max: 18

lib/slack-ruby-client.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@
3333
require_relative 'slack/web/api/options'
3434
require_relative 'slack/web/faraday/response/raise_error'
3535
require_relative 'slack/web/faraday/response/wrap_error'
36+
require_relative 'slack/web/faraday/connection_options'
3637
require_relative 'slack/web/faraday/connection'
38+
require_relative 'slack/web/faraday/plain_text_connection'
3739
require_relative 'slack/web/faraday/request'
3840
require_relative 'slack/web/api/mixins'
3941
require_relative 'slack/web/api/endpoints'

lib/slack/web/api/helpers/files.rb

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,18 @@ def files_upload_external(options = {})
3838
upload_url_request_params = options.slice(:filename, :alt_txt, :snippet_type)
3939
upload_url_request_params[:length] = content.bytesize
4040

41-
# 1. get the upload url
41+
# Get the upload url.
4242
get_upload_url_response = files_getUploadURLExternal(upload_url_request_params)
4343
upload_url = get_upload_url_response[:upload_url]
4444
file_id = get_upload_url_response[:file_id]
4545

46-
# 2. upload the file and do not process the return body
47-
post(upload_url, content)
46+
# Upload the file.
47+
plain_text_connection.post do |request|
48+
request.url upload_url
49+
request.body = content
50+
end
4851

49-
# 3. complete the upload
52+
# Complete the upload.
5053
complete_upload_request_params = options.slice(:channels, :initial_comment, :thread_ts)
5154
complete_upload_request_params[:files] = [{ id: file_id, title: title }].to_json
5255

lib/slack/web/client.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ module Slack
33
module Web
44
class Client
55
include Faraday::Connection
6+
include Faraday::PlainTextConnection
67
include Faraday::Request
78
include Api::Endpoints
89
include Api::Helpers

lib/slack/web/faraday/connection.rb

Lines changed: 18 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -3,40 +3,31 @@ module Slack
33
module Web
44
module Faraday
55
module Connection
6-
def create_connection(expect_json_response: true)
7-
options = {
8-
headers: { 'Accept' => 'application/json; charset=utf-8' }
9-
}
10-
options[:headers]['User-Agent'] = user_agent if user_agent
11-
options[:proxy] = proxy if proxy
12-
options[:ssl] = { ca_path: ca_path, ca_file: ca_file } if ca_path || ca_file
6+
include ConnectionOptions
137

14-
request_options = {}
15-
request_options[:timeout] = timeout if timeout
16-
request_options[:open_timeout] = open_timeout if open_timeout
17-
options[:request] = request_options if request_options.any?
8+
private
189

19-
::Faraday::Connection.new(endpoint, options) do |connection|
20-
connection.request :multipart
21-
connection.request :url_encoded
22-
connection.use ::Slack::Web::Faraday::Response::RaiseError if expect_json_response
23-
connection.response :mashify, mash_class: Slack::Messages::Message
24-
connection.response :json, content_type: /\b*$/ if expect_json_response
25-
connection.use ::Slack::Web::Faraday::Response::WrapError
26-
connection.response :logger, logger if logger
27-
connection.adapter adapter
10+
def options
11+
@options ||= begin
12+
options = connection_options.dup
13+
options[:headers]['Accept'] = 'application/json; charset=utf-8'
14+
options
2815
end
2916
end
3017

3118
def connection
32-
@connection ||= create_connection
19+
@connection ||=
20+
::Faraday::Connection.new(endpoint, options) do |connection|
21+
connection.request :multipart
22+
connection.request :url_encoded
23+
connection.use ::Slack::Web::Faraday::Response::RaiseError
24+
connection.response :mashify, mash_class: Slack::Messages::Message
25+
connection.response :json, content_type: /\b*$/
26+
connection.use ::Slack::Web::Faraday::Response::WrapError
27+
connection.response :logger, logger if logger
28+
connection.adapter adapter
29+
end
3330
end
34-
35-
def connection_without_response_parsing
36-
@connection_without_response_parsing ||= create_connection(expect_json_response: false)
37-
end
38-
39-
private :create_connection
4031
end
4132
end
4233
end
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# frozen_string_literal: true
2+
module Slack
3+
module Web
4+
module Faraday
5+
module ConnectionOptions
6+
def connection_options
7+
@connection_options ||= begin
8+
options = { headers: {} }
9+
options[:headers]['User-Agent'] = user_agent if user_agent
10+
options[:proxy] = proxy if proxy
11+
options[:ssl] = { ca_path: ca_path, ca_file: ca_file } if ca_path || ca_file
12+
13+
request_options = {}
14+
request_options[:timeout] = timeout if timeout
15+
request_options[:open_timeout] = open_timeout if open_timeout
16+
options[:request] = request_options if request_options.any?
17+
18+
options
19+
end
20+
end
21+
end
22+
end
23+
end
24+
end
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# frozen_string_literal: true
2+
module Slack
3+
module Web
4+
module Faraday
5+
module PlainTextConnection
6+
include ConnectionOptions
7+
8+
private
9+
10+
def plain_text_connection
11+
@plain_text_connection ||=
12+
::Faraday::Connection.new(endpoint, connection_options) do |connection|
13+
connection.request :multipart
14+
connection.request :url_encoded
15+
connection.use ::Slack::Web::Faraday::Response::WrapError
16+
connection.response :logger, logger if logger
17+
connection.adapter adapter
18+
end
19+
end
20+
end
21+
end
22+
end
23+
end

lib/slack/web/faraday/request.rb

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,7 @@ def delete(path, options = {})
2222
private
2323

2424
def request(method, path, options)
25-
expect_json_response = options.is_a? Hash
26-
connection_to_use = expect_json_response ? connection : connection_without_response_parsing
27-
response = connection_to_use.send(method) do |request|
25+
response = connection.send(method) do |request|
2826
case method
2927
when :get, :delete
3028
request.url(path, options)
@@ -35,7 +33,7 @@ def request(method, path, options)
3533
end
3634
request.headers['Authorization'] = "Bearer #{token}" if token
3735

38-
request.options.merge!(options.delete(:request)) if options.respond_to?(:key) && options.key?(:request)
36+
request.options.merge!(options.delete(:request)) if options.key?(:request)
3937
end
4038
response.body
4139
rescue ::Faraday::ParsingError => e

spec/fixtures/slack/web/files_upload_external.yml

Lines changed: 0 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

spec/fixtures/slack/web/files_upload_external_with_all_options.yml

Lines changed: 0 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)