Skip to content

Commit 01051c4

Browse files
committed
NO-ISSUE Add type for http client and use more safe way
1 parent ed9d045 commit 01051c4

2 files changed

Lines changed: 138 additions & 31 deletions

File tree

lib/line/bot/v2/http_client.rb

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -25,56 +25,56 @@ def initialize(base_url:, http_headers: {}, http_options: {})
2525

2626
# NOTE: line-bot-sdk-ruby users should not use this. Breaking changes may occur, so use at your own risk.
2727
def get(path:, query_params: nil, headers: nil)
28-
request = build_request(Net::HTTP::Get, path, query_params, headers)
29-
perform_request(request)
28+
request = build_request(http_class: Net::HTTP::Get, path: path, query_params: query_params, headers: headers)
29+
perform_request(request: request)
3030
end
3131

3232
# NOTE: line-bot-sdk-ruby users should not use this. Breaking changes may occur, so use at your own risk.
3333
def post(path:, query_params: nil, body_params: nil, headers: nil)
34-
request = build_request(Net::HTTP::Post, path, query_params, headers, body_params)
35-
perform_request(request)
34+
request = build_request(http_class: Net::HTTP::Post, path: path, query_params: query_params, headers: headers, body_params: body_params)
35+
perform_request(request: request)
3636
end
3737

3838
# NOTE: line-bot-sdk-ruby users should not use this. Breaking changes may occur, so use at your own risk.
3939
def put(path:, query_params: nil, body_params: nil, headers: nil)
40-
request = build_request(Net::HTTP::Put, path, query_params, headers, body_params)
41-
perform_request(request)
40+
request = build_request(http_class: Net::HTTP::Put, path: path, query_params: query_params, headers: headers, body_params: body_params)
41+
perform_request(request: request)
4242
end
4343

4444
# NOTE: line-bot-sdk-ruby users should not use this. Breaking changes may occur, so use at your own risk.
4545
def delete(path:, query_params: nil, headers: nil)
46-
request = build_request(Net::HTTP::Delete, path, query_params, headers)
47-
perform_request(request)
46+
request = build_request(http_class: Net::HTTP::Delete, path: path, query_params: query_params, headers: headers)
47+
perform_request(request: request)
4848
end
4949

5050
# NOTE: line-bot-sdk-ruby users should not use this. Breaking changes may occur, so use at your own risk.
5151
def post_form(path:, query_params: nil, form_params: nil, headers: nil)
52-
request = build_form_request(Net::HTTP::Post, path, query_params, form_params, headers)
53-
perform_request(request)
52+
request = build_form_request(http_class: Net::HTTP::Post, path: path, query_params: query_params, form_params: form_params, headers: headers)
53+
perform_request(request: request)
5454
end
5555

5656
# NOTE: line-bot-sdk-ruby users should not use this. Breaking changes may occur, so use at your own risk.
5757
def post_form_multipart(path:, query_params: nil, form_params: nil, headers: nil)
58-
request = build_multipart_request(Net::HTTP::Post::Multipart, path, query_params, form_params, headers)
59-
perform_request(request)
58+
request = build_multipart_request(http_class: Net::HTTP::Post::Multipart, path: path, query_params: query_params, form_params: form_params, headers: headers)
59+
perform_request(request: request)
6060
end
6161

6262
# NOTE: line-bot-sdk-ruby users should not use this. Breaking changes may occur, so use at your own risk.
6363
def put_form_multipart(path:, query_params: nil, form_params: nil, headers: nil)
64-
request = build_multipart_request(Net::HTTP::Put::Multipart, path, query_params, form_params, headers)
65-
perform_request(request)
64+
request = build_multipart_request(http_class: Net::HTTP::Put::Multipart, path: path, query_params: query_params, form_params: form_params, headers: headers)
65+
perform_request(request: request)
6666
end
6767

6868
private
6969

70-
def build_request(http_class, path, query_params, headers, body_params = nil)
71-
request_url = build_url(path, query_params)
72-
request_headers = build_headers(headers)
70+
def build_request(http_class:, path:, query_params:, headers:, body_params: nil)
71+
request_url = build_url(path: path, query_params: query_params)
72+
request_headers = build_headers(headers: headers)
7373
request = http_class.new(request_url, request_headers)
7474

7575
if body_params
7676
if body_params.is_a?(File)
77-
request['Content-Type'] = determine_content_type(body_params)
77+
request['Content-Type'] = determine_content_type(file: body_params)
7878
request.body = body_params.read
7979
else
8080
request['Content-Type'] = 'application/json'
@@ -89,9 +89,9 @@ def build_request(http_class, path, query_params, headers, body_params = nil)
8989
request
9090
end
9191

92-
def build_form_request(http_class, path, query_params, form_params, headers)
93-
request_url = build_url(path, query_params)
94-
request_headers = build_headers(headers)
92+
def build_form_request(http_class:, path:, query_params:, form_params:, headers:)
93+
request_url = build_url(path: path, query_params: query_params)
94+
request_headers = build_headers(headers: headers)
9595
request = http_class.new(request_url, request_headers)
9696

9797
if form_params
@@ -102,30 +102,30 @@ def build_form_request(http_class, path, query_params, form_params, headers)
102102
request
103103
end
104104

105-
def build_multipart_request(http_class, path, query_params, form_params, headers)
106-
request_url = build_url(path, query_params)
107-
request_headers = build_headers(headers)
105+
def build_multipart_request(http_class:, path:, query_params:, form_params:, headers:)
106+
request_url = build_url(path: path, query_params: query_params)
107+
request_headers = build_headers(headers: headers)
108108

109-
file_params, non_file_params = form_params.partition { |_, value| value.is_a?(File) }.map(&:to_h)
109+
file_params, non_file_params = form_params.partition { |_, value| value.is_a?(File) }.map(&:to_h) # steep:ignore NoMethod
110110
params = Line::Bot::V2::Utils.deep_to_hash(non_file_params).merge(
111111
file_params.transform_values { |value| UploadIO.new(value, 'text/plain', File.basename(value.path)) }
112112
)
113113

114114
http_class.new(request_url, params, request_headers)
115115
end
116116

117-
def build_url(path, query_params)
117+
def build_url(path:, query_params:)
118118
uri = URI.join(@base_url, path)
119119
uri.query = URI.encode_www_form(query_params) unless query_params.nil?
120120
uri
121121
end
122122

123-
def build_headers(headers = nil)
123+
def build_headers(headers: nil)
124124
headers.nil? ? @http_headers : @http_headers.merge(headers)
125125
end
126126

127-
def perform_request(request)
128-
Net::HTTP.start(request.uri.hostname, request.uri.port, use_ssl: request.uri.scheme == 'https') do |http|
127+
def perform_request(request:)
128+
Net::HTTP.start(request.uri.hostname, request.uri.port, use_ssl: request.uri.scheme == 'https') do |http| # steep:ignore ArgumentTypeMismatch
129129
@http_options.each do |key, value|
130130
http.send("#{key}=", value)
131131
end if @http_options
@@ -134,8 +134,8 @@ def perform_request(request)
134134
end
135135
end
136136

137-
def determine_content_type(file)
138-
case File.extname(file.path).downcase
137+
def determine_content_type(file:)
138+
case File.extname(path=file.path).downcase
139139
when '.txt'
140140
'text/plain'
141141
when '.jpg', '.jpeg'

sig/line/bot/v2/http_client.rbs

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
module Line
2+
module Bot
3+
module V2
4+
class HttpClient
5+
@base_url: String
6+
@http_headers: Hash[String | Symbol, untyped]
7+
@http_options: Hash[String | Symbol, untyped]
8+
9+
def initialize: (
10+
base_url: String,
11+
?http_headers: Hash[String | Symbol, untyped],
12+
?http_options: Hash[String | Symbol, untyped]
13+
) -> void
14+
15+
def get: (
16+
path: String,
17+
?query_params: Hash[String, untyped]?,
18+
?headers: Hash[String, String]?
19+
) -> Net::HTTPResponse
20+
21+
def post: (
22+
path: String,
23+
?query_params: Hash[String, untyped]?,
24+
?body_params: (File | Hash[untyped, untyped])?,
25+
?headers: Hash[String, String]?
26+
) -> Net::HTTPResponse
27+
28+
def put: (
29+
path: String,
30+
?query_params: Hash[String, untyped]?,
31+
?body_params: (File | Hash[untyped, untyped])?,
32+
?headers: Hash[String, String]?
33+
) -> Net::HTTPResponse
34+
35+
def delete: (
36+
path: String,
37+
?query_params: Hash[String, untyped]?,
38+
?headers: Hash[String, String]?
39+
) -> Net::HTTPResponse
40+
41+
def post_form: (
42+
path: String,
43+
?query_params: Hash[String, untyped]?,
44+
?form_params: Hash[untyped, untyped]?,
45+
?headers: Hash[String, String]?
46+
) -> Net::HTTPResponse
47+
48+
def post_form_multipart: (
49+
path: String,
50+
?query_params: Hash[String, untyped]?,
51+
?form_params: Hash[untyped, untyped]?,
52+
?headers: Hash[String, String]?
53+
) -> Net::HTTPResponse
54+
55+
def put_form_multipart: (
56+
path: String,
57+
?query_params: Hash[String, untyped]?,
58+
?form_params: Hash[untyped, untyped]?,
59+
?headers: Hash[String, String]?
60+
) -> Net::HTTPResponse
61+
62+
private
63+
64+
def build_request: (
65+
http_class: untyped,
66+
path: String,
67+
query_params: Hash[String, untyped]?,
68+
headers: Hash[String, String]?,
69+
?body_params: (File | Hash[untyped, untyped])?
70+
) -> Net::HTTPRequest
71+
72+
def build_form_request: (
73+
http_class: untyped,
74+
path: String,
75+
query_params: Hash[String, untyped]?,
76+
form_params: Hash[untyped, untyped]?,
77+
headers: Hash[String, String]?
78+
) -> Net::HTTPRequest
79+
80+
def build_multipart_request: (
81+
http_class: untyped,
82+
path: String,
83+
query_params: Hash[String, untyped]?,
84+
form_params: Hash[untyped, untyped]?,
85+
headers: Hash[String, String]?
86+
) -> Net::HTTPRequest
87+
88+
def build_url: (
89+
path: String,
90+
query_params: Hash[String, untyped]?
91+
) -> URI
92+
93+
def build_headers: (
94+
headers: Hash[String, String]?
95+
) -> Hash[String, String]
96+
97+
def perform_request: (
98+
request: Net::HTTPRequest
99+
) -> Net::HTTPResponse
100+
101+
def determine_content_type: (
102+
file: File
103+
) -> String
104+
end
105+
end
106+
end
107+
end

0 commit comments

Comments
 (0)