Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 31 additions & 31 deletions lib/line/bot/v2/http_client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,56 +25,56 @@ def initialize(base_url:, http_headers: {}, http_options: {})

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

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

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

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

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

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

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

private

def build_request(http_class, path, query_params, headers, body_params = nil)
request_url = build_url(path, query_params)
request_headers = build_headers(headers)
def build_request(http_class:, path:, query_params:, headers:, body_params: nil)
request_url = build_url(path: path, query_params: query_params)
request_headers = build_headers(headers: headers)
request = http_class.new(request_url, request_headers)

if body_params
if body_params.is_a?(File)
request['Content-Type'] = determine_content_type(body_params)
request['Content-Type'] = determine_content_type(file: body_params)
request.body = body_params.read
else
request['Content-Type'] = 'application/json'
Expand All @@ -89,9 +89,9 @@ def build_request(http_class, path, query_params, headers, body_params = nil)
request
end

def build_form_request(http_class, path, query_params, form_params, headers)
request_url = build_url(path, query_params)
request_headers = build_headers(headers)
def build_form_request(http_class:, path:, query_params:, form_params:, headers:)
request_url = build_url(path: path, query_params: query_params)
request_headers = build_headers(headers: headers)
request = http_class.new(request_url, request_headers)

if form_params
Expand All @@ -102,30 +102,30 @@ def build_form_request(http_class, path, query_params, form_params, headers)
request
end

def build_multipart_request(http_class, path, query_params, form_params, headers)
request_url = build_url(path, query_params)
request_headers = build_headers(headers)
def build_multipart_request(http_class:, path:, query_params:, form_params:, headers:)
request_url = build_url(path: path, query_params: query_params)
request_headers = build_headers(headers: headers)

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

http_class.new(request_url, params, request_headers)
end

def build_url(path, query_params)
def build_url(path:, query_params:)
uri = URI.join(@base_url, path)
uri.query = URI.encode_www_form(query_params) unless query_params.nil?
uri
end

def build_headers(headers = nil)
def build_headers(headers: nil)
headers.nil? ? @http_headers : @http_headers.merge(headers)
end

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

def determine_content_type(file)
case File.extname(file.path).downcase
def determine_content_type(file:)
case File.extname(path=file.path).downcase
when '.txt'
'text/plain'
when '.jpg', '.jpeg'
Expand Down
107 changes: 107 additions & 0 deletions sig/line/bot/v2/http_client.rbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
module Line
module Bot
module V2
class HttpClient
@base_url: String
@http_headers: Hash[String | Symbol, untyped]
@http_options: Hash[String | Symbol, untyped]

def initialize: (
base_url: String,
?http_headers: Hash[String | Symbol, untyped],
?http_options: Hash[String | Symbol, untyped]
) -> void

def get: (
path: String,
?query_params: Hash[String, untyped]?,
?headers: Hash[String, String]?
) -> Net::HTTPResponse

def post: (
path: String,
?query_params: Hash[String, untyped]?,
?body_params: (File | Hash[untyped, untyped])?,
?headers: Hash[String, String]?
) -> Net::HTTPResponse

def put: (
path: String,
?query_params: Hash[String, untyped]?,
?body_params: (File | Hash[untyped, untyped])?,
?headers: Hash[String, String]?
) -> Net::HTTPResponse

def delete: (
path: String,
?query_params: Hash[String, untyped]?,
?headers: Hash[String, String]?
) -> Net::HTTPResponse

def post_form: (
path: String,
?query_params: Hash[String, untyped]?,
?form_params: Hash[untyped, untyped]?,
?headers: Hash[String, String]?
) -> Net::HTTPResponse

def post_form_multipart: (
path: String,
?query_params: Hash[String, untyped]?,
?form_params: Hash[untyped, untyped]?,
?headers: Hash[String, String]?
) -> Net::HTTPResponse

def put_form_multipart: (
path: String,
?query_params: Hash[String, untyped]?,
?form_params: Hash[untyped, untyped]?,
?headers: Hash[String, String]?
) -> Net::HTTPResponse

private

def build_request: (
http_class: untyped,
path: String,
query_params: Hash[String, untyped]?,
headers: Hash[String, String]?,
?body_params: (File | Hash[untyped, untyped])?
) -> Net::HTTPRequest

def build_form_request: (
http_class: untyped,
path: String,
query_params: Hash[String, untyped]?,
form_params: Hash[untyped, untyped]?,
headers: Hash[String, String]?
) -> Net::HTTPRequest

def build_multipart_request: (
http_class: untyped,
path: String,
query_params: Hash[String, untyped]?,
form_params: Hash[untyped, untyped]?,
headers: Hash[String, String]?
) -> Net::HTTPRequest

def build_url: (
path: String,
query_params: Hash[String, untyped]?
) -> URI

def build_headers: (
headers: Hash[String, String]?
) -> Hash[String, String]

def perform_request: (
request: Net::HTTPRequest
) -> Net::HTTPResponse

def determine_content_type: (
file: File
) -> String
end
end
end
end
7 changes: 7 additions & 0 deletions sig/line/bot/v2/reserved_words.rbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module Line
module Bot
module V2
RESERVED_WORDS: Array[Symbol]
end
end
end
23 changes: 23 additions & 0 deletions sig/line/bot/v2/utils.rbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
module Line
module Bot
module V2
module Utils
def self.deep_underscore: (Hash[untyped, untyped]) -> Hash[Symbol, untyped]

def self.deep_symbolize: (untyped) -> untyped

def self.deep_to_hash: (untyped) -> untyped

def self.deep_camelize: (untyped) -> untyped

def self.deep_compact: (untyped) -> untyped

def self.deep_convert_reserved_words: (untyped) -> untyped

def self.hash_to_struct: (Hash[untyped, untyped]) -> ::Struct[untyped]

def self.camelize: (String | Symbol) -> String
end
end
end
end
7 changes: 7 additions & 0 deletions sig/line/bot/v2/version.rbs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module Line
module Bot
module V2
VERSION: String
end
end
end