From 092e594a4b83eeb12bccbd0d47e6915255aa79fe Mon Sep 17 00:00:00 2001 From: HoneyryderChuck Date: Sun, 16 Apr 2023 03:25:34 +0300 Subject: [PATCH] Request.verb is now an upcased string (ex: "GET") The reference for a request verb is now the string which is used everywhere else, instead of the symbol corresponding to it. This was an artifact from the import from httprb, and there is no advantage in it, since these strings are frozen in most use cases, and the transformations from symbol to strings being performed everywhere are prooof that keeping the atom isn't really bringing any benefit. --- integration_tests/datadog_test.rb | 2 +- lib/httpx/adapters/datadog.rb | 2 +- lib/httpx/adapters/faraday.rb | 2 +- lib/httpx/adapters/sentry.rb | 2 +- lib/httpx/adapters/webmock.rb | 2 +- lib/httpx/chainable.rb | 8 ++-- lib/httpx/connection/http1.rb | 2 +- lib/httpx/connection/http2.rb | 2 +- lib/httpx/plugins/authentication/digest.rb | 2 +- lib/httpx/plugins/aws_sigv4.rb | 2 +- lib/httpx/plugins/follow_redirects.rb | 2 +- lib/httpx/plugins/grpc.rb | 2 +- lib/httpx/plugins/h2c.rb | 2 +- lib/httpx/plugins/proxy/http.rb | 6 +-- lib/httpx/plugins/response_cache.rb | 4 +- lib/httpx/plugins/retries.rb | 2 +- lib/httpx/plugins/webdav.rb | 14 +++--- lib/httpx/request.rb | 8 +++- lib/httpx/response.rb | 4 +- regression_tests/bug_0_14_5_test.rb | 2 +- sig/chainable.rbs | 6 +-- sig/httpx.rbs | 6 +-- sig/plugins/h2c.rbs | 2 +- sig/plugins/response_cache.rbs | 2 +- sig/request.rbs | 2 +- sig/session.rbs | 12 ++--- .../response_json_multi_json_test.rb | 2 +- standalone_tests/response_json_oj_test.rb | 2 +- standalone_tests/response_json_yajl_test.rb | 2 +- test/altsvc_test.rb | 2 +- test/aws_sigv4_test.rb | 28 ++++++------ test/error_response_test.rb | 2 +- test/https_test.rb | 2 +- test/parser_test.rb | 2 +- test/request_test.rb | 44 +++++++++---------- test/response_cache_store_test.rb | 34 +++++++------- test/response_test.rb | 4 +- test/session_test.rb | 2 +- test/support/requests/get.rb | 4 +- test/support/requests/plugins/expect.rb | 4 +- test/support/requests/plugins/h2c.rb | 4 +- test/support/requests/plugins/multipart.rb | 2 +- test/support/requests/plugins/upgrade.rb | 4 +- test/support/requests/with_body.rb | 6 +-- test/support/requests/with_chunked_body.rb | 2 +- 45 files changed, 129 insertions(+), 125 deletions(-) diff --git a/integration_tests/datadog_test.rb b/integration_tests/datadog_test.rb index f4113c41..185d4be4 100644 --- a/integration_tests/datadog_test.rb +++ b/integration_tests/datadog_test.rb @@ -36,7 +36,7 @@ class DatadogTest < Minitest::Test set_datadog uri = URI(build_uri("/status/200", "http://#{httpbin}")) - get_response, post_response = HTTPX.request([[:get, uri], [:post, uri]]) + get_response, post_response = HTTPX.request([["GET", uri], ["POST", uri]]) verify_status(get_response, 200) verify_status(post_response, 200) diff --git a/lib/httpx/adapters/datadog.rb b/lib/httpx/adapters/datadog.rb index 6d4b8a9a..6a4b9c47 100644 --- a/lib/httpx/adapters/datadog.rb +++ b/lib/httpx/adapters/datadog.rb @@ -68,7 +68,7 @@ module TRACING_MODULE # rubocop:disable Naming/ClassAndModuleCamelCase @request.on(:response, &method(:finish)) - verb = @request.verb.to_s.upcase + verb = @request.verb uri = @request.uri @span = build_span diff --git a/lib/httpx/adapters/faraday.rb b/lib/httpx/adapters/faraday.rb index 70c35782..d971efb3 100644 --- a/lib/httpx/adapters/faraday.rb +++ b/lib/httpx/adapters/faraday.rb @@ -44,7 +44,7 @@ module Faraday headers: env.request_headers, body: env.body, } - [meth, env.url, request_options] + [meth.to_s.upcase, env.url, request_options] end def options_from_env(env) diff --git a/lib/httpx/adapters/sentry.rb b/lib/httpx/adapters/sentry.rb index 2e79dc5a..631fb8f7 100644 --- a/lib/httpx/adapters/sentry.rb +++ b/lib/httpx/adapters/sentry.rb @@ -75,7 +75,7 @@ module HTTPX::Plugins uri = req.uri result = { - method: req.verb.to_s.upcase, + method: req.verb, } if ::Sentry.configuration.send_default_pii diff --git a/lib/httpx/adapters/webmock.rb b/lib/httpx/adapters/webmock.rb index d84b6c39..f73677eb 100644 --- a/lib/httpx/adapters/webmock.rb +++ b/lib/httpx/adapters/webmock.rb @@ -23,7 +23,7 @@ module WebMock uri.path = uri.normalized_path.gsub("[^:]//", "/") WebMock::RequestSignature.new( - request.verb, + request.verb.downcase.to_sym, uri.to_s, body: request.body.each.to_a.join, headers: request.headers.to_h diff --git a/lib/httpx/chainable.rb b/lib/httpx/chainable.rb index 7219e7a1..92df1a5b 100644 --- a/lib/httpx/chainable.rb +++ b/lib/httpx/chainable.rb @@ -2,11 +2,11 @@ module HTTPX module Chainable - %i[head get post put delete trace options connect patch].each do |meth| + %w[head get post put delete trace options connect patch].each do |meth| class_eval(<<-MOD, __FILE__, __LINE__ + 1) - def #{meth}(*uri, **options) # def get(*uri, **options) - request(:#{meth}, uri, **options) # request(:get, uri, **options) - end # end + def #{meth}(*uri, **options) # def get(*uri, **options) + request("#{meth.upcase}", uri, **options) # request("GET", uri, **options) + end # end MOD end diff --git a/lib/httpx/connection/http1.rb b/lib/httpx/connection/http1.rb index 34cb2cb3..b7407d59 100644 --- a/lib/httpx/connection/http1.rb +++ b/lib/httpx/connection/http1.rb @@ -312,7 +312,7 @@ module HTTPX end def join_headline(request) - "#{request.verb.to_s.upcase} #{request.path} HTTP/#{@version.join(".")}" + "#{request.verb} #{request.path} HTTP/#{@version.join(".")}" end def join_headers(request) diff --git a/lib/httpx/connection/http2.rb b/lib/httpx/connection/http2.rb index f812a5cc..199a46db 100644 --- a/lib/httpx/connection/http2.rb +++ b/lib/httpx/connection/http2.rb @@ -208,7 +208,7 @@ module HTTPX def set_protocol_headers(request) { ":scheme" => request.scheme, - ":method" => request.verb.to_s.upcase, + ":method" => request.verb, ":path" => request.path, ":authority" => request.authority, } diff --git a/lib/httpx/plugins/authentication/digest.rb b/lib/httpx/plugins/authentication/digest.rb index b1dc5128..d5d2e8fa 100644 --- a/lib/httpx/plugins/authentication/digest.rb +++ b/lib/httpx/plugins/authentication/digest.rb @@ -21,7 +21,7 @@ module HTTPX end def authenticate(request, authenticate) - "Digest #{generate_header(request.verb.to_s.upcase, request.path, authenticate)}" + "Digest #{generate_header(request.verb, request.path, authenticate)}" end private diff --git a/lib/httpx/plugins/aws_sigv4.rb b/lib/httpx/plugins/aws_sigv4.rb index e828bc50..eb991403 100644 --- a/lib/httpx/plugins/aws_sigv4.rb +++ b/lib/httpx/plugins/aws_sigv4.rb @@ -71,7 +71,7 @@ module HTTPX end.join # canonical request - creq = "#{request.verb.to_s.upcase}" \ + creq = "#{request.verb}" \ "\n#{request.canonical_path}" \ "\n#{request.canonical_query}" \ "\n#{canonical_headers}" \ diff --git a/lib/httpx/plugins/follow_redirects.rb b/lib/httpx/plugins/follow_redirects.rb index a0e252a1..5a812f49 100644 --- a/lib/httpx/plugins/follow_redirects.rb +++ b/lib/httpx/plugins/follow_redirects.rb @@ -103,7 +103,7 @@ module HTTPX max_redirects: max_redirects - 1) end - build_request(:get, redirect_uri, retry_options) + build_request("GET", redirect_uri, retry_options) end def __get_location_from_response(response) diff --git a/lib/httpx/plugins/grpc.rb b/lib/httpx/plugins/grpc.rb index 98c54dfd..9f597b16 100644 --- a/lib/httpx/plugins/grpc.rb +++ b/lib/httpx/plugins/grpc.rb @@ -264,7 +264,7 @@ module HTTPX Message.encode(input, deflater: deflater) end - build_request(:post, uri, headers: headers, body: body) + build_request("POST", uri, headers: headers, body: body) end end end diff --git a/lib/httpx/plugins/h2c.rb b/lib/httpx/plugins/h2c.rb index b378a42c..7da4ddf4 100644 --- a/lib/httpx/plugins/h2c.rb +++ b/lib/httpx/plugins/h2c.rb @@ -9,7 +9,7 @@ module HTTPX # https://gitlab.com/os85/httpx/wikis/Upgrade#h2c # module H2C - VALID_H2C_VERBS = %i[get options head].freeze + VALID_H2C_VERBS = %w[GET OPTIONS HEAD].freeze class << self def load_dependencies(*) diff --git a/lib/httpx/plugins/proxy/http.rb b/lib/httpx/plugins/proxy/http.rb index c4cad5b7..baff2ab9 100644 --- a/lib/httpx/plugins/proxy/http.rb +++ b/lib/httpx/plugins/proxy/http.rb @@ -141,9 +141,9 @@ module HTTPX module ProxyParser def join_headline(request) - return super if request.verb == :connect + return super if request.verb == "CONNECT" - "#{request.verb.to_s.upcase} #{request.uri} HTTP/#{@version.join(".")}" + "#{request.verb} #{request.uri} HTTP/#{@version.join(".")}" end def set_protocol_headers(request) @@ -161,7 +161,7 @@ module HTTPX class ConnectRequest < Request def initialize(uri, _options) - super(:connect, uri, {}) + super("CONNECT", uri, {}) @headers.delete("accept") end diff --git a/lib/httpx/plugins/response_cache.rb b/lib/httpx/plugins/response_cache.rb index 30c614b4..43b1c83a 100644 --- a/lib/httpx/plugins/response_cache.rb +++ b/lib/httpx/plugins/response_cache.rb @@ -8,7 +8,7 @@ module HTTPX # https://gitlab.com/os85/httpx/wikis/Response-Cache # module ResponseCache - CACHEABLE_VERBS = %i[get head].freeze + CACHEABLE_VERBS = %w[GET HEAD].freeze CACHEABLE_STATUS_CODES = [200, 203, 206, 300, 301, 410].freeze private_constant :CACHEABLE_VERBS private_constant :CACHEABLE_STATUS_CODES @@ -96,7 +96,7 @@ module HTTPX module RequestMethods def response_cache_key - @response_cache_key ||= Digest::SHA1.hexdigest("httpx-response-cache-#{@verb}#{@uri}") + @response_cache_key ||= Digest::SHA1.hexdigest("httpx-response-cache-#{@verb}-#{@uri}") end end diff --git a/lib/httpx/plugins/retries.rb b/lib/httpx/plugins/retries.rb index f413af23..4273f6f5 100644 --- a/lib/httpx/plugins/retries.rb +++ b/lib/httpx/plugins/retries.rb @@ -11,7 +11,7 @@ module HTTPX MAX_RETRIES = 3 # TODO: pass max_retries in a configure/load block - IDEMPOTENT_METHODS = %i[get options head put delete].freeze + IDEMPOTENT_METHODS = %w[GET OPTIONS HEAD PUT DELETE].freeze RETRYABLE_ERRORS = [ IOError, EOFError, diff --git a/lib/httpx/plugins/webdav.rb b/lib/httpx/plugins/webdav.rb index 1c94cd24..ded8ef88 100644 --- a/lib/httpx/plugins/webdav.rb +++ b/lib/httpx/plugins/webdav.rb @@ -10,11 +10,11 @@ module HTTPX module WebDav module InstanceMethods def copy(src, dest) - request(:copy, src, headers: { "destination" => @options.origin.merge(dest) }) + request("COPY", src, headers: { "destination" => @options.origin.merge(dest) }) end def move(src, dest) - request(:move, src, headers: { "destination" => @options.origin.merge(dest) }) + request("MOVE", src, headers: { "destination" => @options.origin.merge(dest) }) end def lock(path, timeout: nil, &blk) @@ -30,7 +30,7 @@ module HTTPX "" \ "null" \ "" - response = request(:lock, path, headers: headers, xml: xml) + response = request("LOCK", path, headers: headers, xml: xml) return response unless response.is_a?(Response) @@ -46,11 +46,11 @@ module HTTPX end def unlock(path, lock_token) - request(:unlock, path, headers: { "lock-token" => lock_token }) + request("UNLOCK", path, headers: { "lock-token" => lock_token }) end def mkcol(dir) - request(:mkcol, dir) + request("MKCOL", dir) end def propfind(path, xml = nil) @@ -64,13 +64,13 @@ module HTTPX xml end - request(:propfind, path, headers: { "depth" => "1" }, xml: body) + request("PROPFIND", path, headers: { "depth" => "1" }, xml: body) end def proppatch(path, xml) body = "" \ "#{xml}" - request(:proppatch, path, xml: body) + request("PROPPATCH", path, xml: body) end # %i[ orderpatch acl report search] end diff --git a/lib/httpx/request.rb b/lib/httpx/request.rb index 78bf6dac..026684d6 100644 --- a/lib/httpx/request.rb +++ b/lib/httpx/request.rb @@ -19,7 +19,11 @@ module HTTPX def_delegator :@body, :empty? def initialize(verb, uri, options = {}) - @verb = verb.to_s.downcase.to_sym + if verb.is_a?(Symbol) + warn "DEPRECATION WARNING: Using symbols for `verb` is deprecated, and will not be supported in httpx 1.0. " \ + "Use \"#{verb.to_s.upcase}\" instead." + end + @verb = verb.to_s.upcase @options = Options.new(options) @uri = Utils.to_uri(uri) if @uri.relative? @@ -138,7 +142,7 @@ module HTTPX # :nocov: def inspect "#" diff --git a/lib/httpx/response.rb b/lib/httpx/response.rb index 2b02a061..dd0a2db9 100644 --- a/lib/httpx/response.rb +++ b/lib/httpx/response.rb @@ -56,12 +56,12 @@ module HTTPX end def bodyless? - @request.verb == :head || + @request.verb == "HEAD" || no_data? end def complete? - bodyless? || (@request.verb == :connect && @status == 200) + bodyless? || (@request.verb == "CONNECT" && @status == 200) end # :nocov: diff --git a/regression_tests/bug_0_14_5_test.rb b/regression_tests/bug_0_14_5_test.rb index 4100ef34..6baca21c 100644 --- a/regression_tests/bug_0_14_5_test.rb +++ b/regression_tests/bug_0_14_5_test.rb @@ -13,7 +13,7 @@ class Bug_0_14_5_Test < Minitest::Test http.get("https://#{httpbin}/get") requests = 2.times.map do - http.build_request(:post, post_uri, body: "a" * (1 << 16)) # 65k body, must be above write buffer size + http.build_request("POST", post_uri, body: "a" * (1 << 16)) # 65k body, must be above write buffer size end responses = http.request(*requests) diff --git a/sig/chainable.rbs b/sig/chainable.rbs index 1420f1a0..4525e49c 100644 --- a/sig/chainable.rbs +++ b/sig/chainable.rbs @@ -2,9 +2,9 @@ module HTTPX module Chainable def request: (*Request, **untyped) -> Array[response] | (Request, **untyped) -> response - | (verb | string, uri | [uri], **untyped) -> response - | (Array[[verb | string, uri] | [verb | string, uri, options]], **untyped) -> Array[response] - | (verb | string, _Each[uri | [uri, options]], **untyped) -> Array[response] + | (verb, uri | [uri], **untyped) -> response + | (Array[[verb, uri] | [verb, uri, options]], **untyped) -> Array[response] + | (verb, _Each[uri | [uri, options]], **untyped) -> Array[response] def accept: (String) -> Session def wrap: () { (Session) -> void } -> void diff --git a/sig/httpx.rbs b/sig/httpx.rbs index 9194fc07..d1e84440 100644 --- a/sig/httpx.rbs +++ b/sig/httpx.rbs @@ -8,9 +8,9 @@ module HTTPX type uri = URI::HTTP | URI::HTTPS | string type generic_uri = String | URI::Generic - type verb = :options | :get | :head | :post | :put | :delete | :trace | :connect | - :propfind | :proppatch | :mkcol | :copy | :move | :lock | :unlock | :orderpatch | - :acl | :report | :patch | :search + type verb = "OPTIONS" | "GET" | "HEAD" | "POST" | "PUT" | "DELETE" | "TRACE" | "CONNECT" | + "PROPFIND" | "PROPPATCH" | "MKCOL" | "COPY" | "MOVE" | "LOCK" | "UNLOCK" | "ORDERPATCH" | + "ACL" | "REPORT" | "PATCH" | "SEARCH" type ip_family = Integer #Socket::AF_INET6 | Socket::AF_INET diff --git a/sig/plugins/h2c.rbs b/sig/plugins/h2c.rbs index b4e3aeb9..2a531942 100644 --- a/sig/plugins/h2c.rbs +++ b/sig/plugins/h2c.rbs @@ -1,7 +1,7 @@ module HTTPX module Plugins module H2C - VALID_H2C_VERBS: Array[Symbol] + VALID_H2C_VERBS: Array[verb] def self.load_dependencies: (*untyped) -> void def self.configure: (singleton(Session)) -> void diff --git a/sig/plugins/response_cache.rbs b/sig/plugins/response_cache.rbs index 42866637..02c1372d 100644 --- a/sig/plugins/response_cache.rbs +++ b/sig/plugins/response_cache.rbs @@ -1,7 +1,7 @@ module HTTPX module Plugins module ResponseCache - CACHEABLE_VERBS: Array[Symbol] + CACHEABLE_VERBS: Array[verb] def self?.cacheable_request?: (Request request) -> bool def self?.cacheable_response?: (response response) -> bool diff --git a/sig/request.rbs b/sig/request.rbs index ab325c6b..87ae2d90 100644 --- a/sig/request.rbs +++ b/sig/request.rbs @@ -6,7 +6,7 @@ module HTTPX METHODS: Array[Symbol] USER_AGENT: String - attr_reader verb: Symbol + attr_reader verb: verb attr_reader uri: URI::Generic attr_reader headers: Headers attr_reader body: Body diff --git a/sig/session.rbs b/sig/session.rbs index 93767ebd..0eccfdfd 100644 --- a/sig/session.rbs +++ b/sig/session.rbs @@ -17,7 +17,7 @@ module HTTPX def close: (*untyped) -> void - def build_request: (String | verb, generic_uri, ?options) -> Request + def build_request: (verb, generic_uri, ?options) -> Request private @@ -35,11 +35,11 @@ module HTTPX def build_altsvc_connection: (Connection existing_connection, Array[Connection] connections, URI::Generic alt_origin, String origin, Hash[String, String] alt_params, Options options) -> Connection? - def build_requests: (verb | string, uri, options) -> Array[Request] - | (Array[[verb | string, uri, options]], options) -> Array[Request] - | (Array[[verb | string, uri]], options) -> Array[Request] - | (verb | string, _Each[[uri, options]], Options) -> Array[Request] - | (verb | string, _Each[uri], options) -> Array[Request] + def build_requests: (verb, uri, options) -> Array[Request] + | (Array[[verb, uri, options]], options) -> Array[Request] + | (Array[[verb, uri]], options) -> Array[Request] + | (verb, _Each[[uri, options]], Options) -> Array[Request] + | (verb, _Each[uri], options) -> Array[Request] def build_connection: (URI::Generic, Options) -> Connection diff --git a/standalone_tests/response_json_multi_json_test.rb b/standalone_tests/response_json_multi_json_test.rb index c756f1a7..91938ec7 100644 --- a/standalone_tests/response_json_multi_json_test.rb +++ b/standalone_tests/response_json_multi_json_test.rb @@ -17,7 +17,7 @@ class ResponseYajlTest < Minitest::Test private - def request(verb = :get, uri = "http://google.com") + def request(verb = "GET", uri = "http://google.com") Request.new(verb, uri) end diff --git a/standalone_tests/response_json_oj_test.rb b/standalone_tests/response_json_oj_test.rb index 726bd16d..39db035f 100644 --- a/standalone_tests/response_json_oj_test.rb +++ b/standalone_tests/response_json_oj_test.rb @@ -17,7 +17,7 @@ class ResponseOjTest < Minitest::Test private - def request(verb = :get, uri = "http://google.com") + def request(verb = "GET", uri = "http://google.com") Request.new(verb, uri) end diff --git a/standalone_tests/response_json_yajl_test.rb b/standalone_tests/response_json_yajl_test.rb index ed8ff9d4..6778ff67 100644 --- a/standalone_tests/response_json_yajl_test.rb +++ b/standalone_tests/response_json_yajl_test.rb @@ -17,7 +17,7 @@ class ResponseYajlTest < Minitest::Test private - def request(verb = :get, uri = "http://google.com") + def request(verb = "GET", uri = "http://google.com") Request.new(verb, uri) end diff --git a/test/altsvc_test.rb b/test/altsvc_test.rb index b095f87e..9e8a5f88 100644 --- a/test/altsvc_test.rb +++ b/test/altsvc_test.rb @@ -56,7 +56,7 @@ class AltSvcTest < Minitest::Test entries = AltSvc.cached_altsvc("http://www.example-clear-cache.com") assert !entries.empty? - req = Request.new(:get, "http://www.example-clear-cache.com/") + req = Request.new("GET", "http://www.example-clear-cache.com/") res = Response.new(req, 200, "2.0", { "alt-svc" => "clear" }) AltSvc.emit(req, res) diff --git a/test/aws_sigv4_test.rb b/test/aws_sigv4_test.rb index 5829316d..f2f5d13f 100644 --- a/test/aws_sigv4_test.rb +++ b/test/aws_sigv4_test.rb @@ -6,18 +6,18 @@ class HTTPXAwsSigv4Test < Minitest::Test include ResponseHelpers def test_plugin_aws_sigv4_canonical_query - r1 = sigv4_session.build_request(:get, "http://domain.com?b=c&a=b") + r1 = sigv4_session.build_request("GET", "http://domain.com?b=c&a=b") assert r1.canonical_query == "a=b&b=c" - r2 = sigv4_session.build_request(:get, "http://domain.com?a=c&a=b") + r2 = sigv4_session.build_request("GET", "http://domain.com?a=c&a=b") assert r2.canonical_query == "a=b&a=c" - r3 = sigv4_session.build_request(:get, "http://domain.com?a=b&a=b") + r3 = sigv4_session.build_request("GET", "http://domain.com?a=b&a=b") assert r3.canonical_query == "a=b&a=b" - r4 = sigv4_session.build_request(:get, "http://domain.com?b&a=b") + r4 = sigv4_session.build_request("GET", "http://domain.com?b&a=b") assert r4.canonical_query == "a=b&b" end def test_plugin_aws_sigv4_x_amz_date - request = sigv4_session.build_request(:get, "http://domain.com") + request = sigv4_session.build_request("GET", "http://domain.com") # x-amz-date assert request.headers.key?("x-amz-date") amz_date = Time.parse(request.headers["x-amz-date"]) @@ -26,35 +26,35 @@ class HTTPXAwsSigv4Test < Minitest::Test # date already set date = Time.now.utc - (60 * 60 * 24) date_amz = date.strftime("%Y%m%dT%H%M%SZ") - x_date_request = sigv4_session.build_request(:get, "http://domain.com", headers: { "x-amz-date" => date_amz }) + x_date_request = sigv4_session.build_request("GET", "http://domain.com", headers: { "x-amz-date" => date_amz }) verify_header(x_date_request.headers, "x-amz-date", date_amz) end def test_plugin_aws_sigv4_x_amz_security_token - request = sigv4_session.build_request(:get, "http://domain.com") + request = sigv4_session.build_request("GET", "http://domain.com") assert !request.headers.key?("x-amz-security-token") - tk_request = sigv4_session(security_token: "token").build_request(:get, "http://domain.com") + tk_request = sigv4_session(security_token: "token").build_request("GET", "http://domain.com") assert tk_request.headers.key?("x-amz-security-token") verify_header(tk_request.headers, "x-amz-security-token", "token") # already set - token_request = sigv4_session(security_token: "token").build_request(:get, "http://domain.com", + token_request = sigv4_session(security_token: "token").build_request("GET", "http://domain.com", headers: { "x-amz-security-token" => "TOKEN" }) verify_header(token_request.headers, "x-amz-security-token", "TOKEN") end def test_plugin_aws_sigv4_x_amz_content_sha256 - request = sigv4_session.build_request(:get, "http://domain.com", body: "abcd") + request = sigv4_session.build_request("GET", "http://domain.com", body: "abcd") assert request.headers["x-amz-content-sha256"] == Digest::SHA256.hexdigest("abcd") # already set - hashed_request = sigv4_session.build_request(:get, "http://domain.com", headers: { "x-amz-content-sha256" => "HASH" }) + hashed_request = sigv4_session.build_request("GET", "http://domain.com", headers: { "x-amz-content-sha256" => "HASH" }) verify_header(hashed_request.headers, "x-amz-content-sha256", "HASH") end def test_plugin_aws_sigv4_x_amz_content_sha256_stringio - request = sigv4_session.build_request(:get, "http://domain.com", body: StringIO.new("abcd")) + request = sigv4_session.build_request("GET", "http://domain.com", body: StringIO.new("abcd")) assert request.headers["x-amz-content-sha256"] == Digest::SHA256.hexdigest("abcd") end @@ -63,7 +63,7 @@ class HTTPXAwsSigv4Test < Minitest::Test body.write("abcd") body.flush - request = sigv4_session.build_request(:get, "http://domain.com", body: body) + request = sigv4_session.build_request("GET", "http://domain.com", body: body) assert request.headers["x-amz-content-sha256"] == Digest::SHA256.hexdigest("abcd") ensure if body @@ -78,7 +78,7 @@ class HTTPXAwsSigv4Test < Minitest::Test region: "REGION", unsigned_headers: %w[accept-encoding accept user-agent content-type content-length] ).build_request( - :put, + "PUT", "http://domain.com", headers: { "Host" => "domain.com", diff --git a/test/error_response_test.rb b/test/error_response_test.rb index 0c8fdbcd..38d31b57 100644 --- a/test/error_response_test.rb +++ b/test/error_response_test.rb @@ -31,6 +31,6 @@ class ErrorResponseTest < Minitest::Test private def request_mock - Request.new(:get, "http://example.com/") + Request.new("GET", "http://example.com/") end end diff --git a/test/https_test.rb b/test/https_test.rb index e3792952..98334209 100644 --- a/test/https_test.rb +++ b/test/https_test.rb @@ -119,7 +119,7 @@ class HTTPSTest < Minitest::Test HTTPX.wrap do |http| total_time = start_time = nil trailered = false - request = http.build_request(:post, uri, body: %w[this is chunked]) + request = http.build_request("POST", uri, body: %w[this is chunked]) request.on(:headers) do |_written_request| start_time = HTTPX::Utils.now end diff --git a/test/parser_test.rb b/test/parser_test.rb index e6ec1648..5190dc20 100644 --- a/test/parser_test.rb +++ b/test/parser_test.rb @@ -32,7 +32,7 @@ class HTTP1ParserTest < Minitest::Test private def mock_request - Request.new(:get, "http://google.com") + Request.new("GET", "http://google.com") end end diff --git a/test/request_test.rb b/test/request_test.rb index ec0b77cc..42b249f6 100644 --- a/test/request_test.rb +++ b/test/request_test.rb @@ -6,15 +6,15 @@ class RequestTest < Minitest::Test include HTTPX def test_request_unsupported_body - ex = assert_raises(HTTPX::Error) { Request.new(:post, "http://example.com/", body: Object.new) } + ex = assert_raises(HTTPX::Error) { Request.new("POST", "http://example.com/", body: Object.new) } assert ex.message.include?("cannot determine size of body") end def test_request_verb - r1 = Request.new(:get, "http://example.com/") - assert r1.verb == :get, "unexpected verb (#{r1.verb})" + r1 = Request.new("GET", "http://example.com/") + assert r1.verb == "GET", "unexpected verb (#{r1.verb})" r2 = Request.new("GET", "http://example.com/") - assert r2.verb == :get, "unexpected verb (#{r1.verb})" + assert r2.verb == "GET", "unexpected verb (#{r1.verb})" end def test_request_headers @@ -22,63 +22,63 @@ class RequestTest < Minitest::Test end def test_request_scheme - r1 = Request.new(:get, "http://google.com/path") + r1 = Request.new("GET", "http://google.com/path") assert r1.scheme == "http", "unexpected scheme (#{r1.scheme}" - r2 = Request.new(:get, "https://google.com/path") + r2 = Request.new("GET", "https://google.com/path") assert r2.scheme == "https", "unexpected scheme (#{r2.scheme}" end def test_request_authority - r1 = Request.new(:get, "http://google.com/path") + r1 = Request.new("GET", "http://google.com/path") assert r1.authority == "google.com", "unexpected authority (#{r1.authority})" - r2 = Request.new(:get, "http://google.com:80/path") + r2 = Request.new("GET", "http://google.com:80/path") assert r2.authority == "google.com", "unexpected authority (#{r2.authority})" - r3 = Request.new(:get, "http://app.dev:8080/path") + r3 = Request.new("GET", "http://app.dev:8080/path") assert r3.authority == "app.dev:8080", "unexpected authority (#{r3.authority})" - r4 = Request.new(:get, "http://127.0.0.1:80/path") + r4 = Request.new("GET", "http://127.0.0.1:80/path") assert r4.authority == "127.0.0.1", "unexpected authority (#{r4.authority})" - r5 = Request.new(:get, "https://[::1]:443/path") + r5 = Request.new("GET", "https://[::1]:443/path") assert r5.authority == "[::1]", "unexpected authority (#{r5.authority})" - r6 = Request.new(:get, "http://127.0.0.1:81/path") + r6 = Request.new("GET", "http://127.0.0.1:81/path") assert r6.authority == "127.0.0.1:81", "unexpected authority (#{r6.authority})" - r7 = Request.new(:get, "https://[::1]:444/path") + r7 = Request.new("GET", "https://[::1]:444/path") assert r7.authority == "[::1]:444", "unexpected authority (#{r7.authority})" end def test_request_path - r1 = Request.new(:get, "http://google.com/") + r1 = Request.new("GET", "http://google.com/") assert r1.path == "/", "unexpected path (#{r1.path})" - r2 = Request.new(:get, "http://google.com/path") + r2 = Request.new("GET", "http://google.com/path") assert r2.path == "/path", "unexpected path (#{r2.path})" - r3 = Request.new(:get, "http://google.com/path?q=bang®ion=eu-west-1") + r3 = Request.new("GET", "http://google.com/path?q=bang®ion=eu-west-1") assert r3.path == "/path?q=bang®ion=eu-west-1", "unexpected path (#{r3.path})" - r4 = Request.new(:get, "https://google.com?q=bang bang") + r4 = Request.new("GET", "https://google.com?q=bang bang") assert r4.path == "/?q=bang%20bang", "must replace unsafe characters" end def test_request_body_raw - req = Request.new(:post, "http://example.com/", body: "bang") + req = Request.new("POST", "http://example.com/", body: "bang") assert !req.body.empty?, "body should exist" assert req.headers["content-type"] == "application/octet-stream", "content type is wrong" assert req.headers["content-length"] == "4", "content length is wrong" end def test_request_body_form - req = Request.new(:post, "http://example.com/", form: { "foo" => "bar" }) + req = Request.new("POST", "http://example.com/", form: { "foo" => "bar" }) assert !req.body.empty?, "body should exist" assert req.headers["content-type"] == "application/x-www-form-urlencoded", "content type is wrong" assert req.headers["content-length"] == "7", "content length is wrong" end def test_request_body_json - req = Request.new(:post, "http://example.com/", json: { "foo" => "bar" }) + req = Request.new("POST", "http://example.com/", json: { "foo" => "bar" }) assert !req.body.empty?, "body should exist" assert req.headers["content-type"] == "application/json; charset=utf-8", "content type is wrong" assert req.headers["content-length"] == "13", "content length is wrong" end def test_request_body_xml - req = Request.new(:post, "http://example.com/", xml: "") + req = Request.new("POST", "http://example.com/", xml: "") assert !req.body.empty?, "body should exist" assert req.headers["content-type"] == "application/xml; charset=utf-8", "content type is wrong" assert req.headers["content-length"] == "11", "content length is wrong" @@ -87,6 +87,6 @@ class RequestTest < Minitest::Test private def resource - @resource ||= Request.new(:get, "http://localhost:3000") + @resource ||= Request.new("GET", "http://localhost:3000") end end diff --git a/test/response_cache_store_test.rb b/test/response_cache_store_test.rb index b9505a0f..297034d9 100644 --- a/test/response_cache_store_test.rb +++ b/test/response_cache_store_test.rb @@ -7,21 +7,21 @@ class ResponseCacheStoreTest < Minitest::Test include HTTPX def test_store_cache - request = request_class.new(:get, "http://example.com/") + request = request_class.new("GET", "http://example.com/") response = cached_response(request) assert store.lookup(request) == response assert store.cached?(request) - request2 = request_class.new(:get, "http://example.com/", headers: { "accept" => "text/plain" }) + request2 = request_class.new("GET", "http://example.com/", headers: { "accept" => "text/plain" }) assert store.lookup(request2) == response - request3 = request_class.new(:post, "http://example.com/", headers: { "accept" => "text/plain" }) + request3 = request_class.new("POST", "http://example.com/", headers: { "accept" => "text/plain" }) assert store.lookup(request3).nil? end def test_store_error_status - request = request_class.new(:get, "http://example.com/") + request = request_class.new("GET", "http://example.com/") _response = cached_response(request, status: 404) assert !store.cached?(request) @@ -30,61 +30,61 @@ class ResponseCacheStoreTest < Minitest::Test end def test_store_no_store - request = request_class.new(:get, "http://example.com/") + request = request_class.new("GET", "http://example.com/") _response = cached_response(request, extra_headers: { "cache-control" => "private, no-store" }) assert !store.cached?(request) end def test_store_maxage - request = request_class.new(:get, "http://example.com/") + request = request_class.new("GET", "http://example.com/") response = cached_response(request, extra_headers: { "cache-control" => "max-age=2" }) assert store.lookup(request) == response sleep(3) assert store.lookup(request).nil? - request2 = request_class.new(:get, "http://example2.com/") + request2 = request_class.new("GET", "http://example2.com/") _response2 = cached_response(request2, extra_headers: { "cache-control" => "no-cache, max-age=2" }) assert store.lookup(request2).nil? end def test_store_expires - request = request_class.new(:get, "http://example.com/") + request = request_class.new("GET", "http://example.com/") response = cached_response(request, extra_headers: { "expires" => (Time.now + 2).httpdate }) assert store.lookup(request) == response sleep(3) assert store.lookup(request).nil? - request2 = request_class.new(:get, "http://example2.com/") + request2 = request_class.new("GET", "http://example2.com/") _response2 = cached_response(request2, extra_headers: { "cache-control" => "no-cache", "expires" => (Time.now + 2).httpdate }) assert store.lookup(request2).nil? end def test_prepare_vary - request = request_class.new(:get, "http://example.com/", headers: { "accept" => "text/plain" }) + request = request_class.new("GET", "http://example.com/", headers: { "accept" => "text/plain" }) cached_response(request, extra_headers: { "vary" => "Accept" }) - request2 = request_class.new(:get, "http://example.com/", headers: { "accept" => "text/html" }) + request2 = request_class.new("GET", "http://example.com/", headers: { "accept" => "text/html" }) store.prepare(request2) assert !request2.headers.key?("if-none-match") - request3 = request_class.new(:get, "http://example.com/", headers: { "accept" => "text/plain" }) + request3 = request_class.new("GET", "http://example.com/", headers: { "accept" => "text/plain" }) store.prepare(request3) assert request3.headers.key?("if-none-match") - request4 = request_class.new(:get, "http://example.com/", headers: { "accept" => "text/plain", "user-agent" => "Linux Bowser" }) + request4 = request_class.new("GET", "http://example.com/", headers: { "accept" => "text/plain", "user-agent" => "Linux Bowser" }) store.prepare(request4) assert request4.headers.key?("if-none-match") end def test_prepare_vary_asterisk - request = request_class.new(:get, "http://example.com/", headers: { "accept" => "text/plain" }) + request = request_class.new("GET", "http://example.com/", headers: { "accept" => "text/plain" }) cached_response(request, extra_headers: { "vary" => "*" }) - request2 = request_class.new(:get, "http://example.com/", headers: { "accept" => "text/html" }) + request2 = request_class.new("GET", "http://example.com/", headers: { "accept" => "text/html" }) store.prepare(request2) assert !request2.headers.key?("if-none-match") - request3 = request_class.new(:get, "http://example.com/", headers: { "accept" => "text/plain" }) + request3 = request_class.new("GET", "http://example.com/", headers: { "accept" => "text/plain" }) store.prepare(request3) assert request3.headers.key?("if-none-match") - request4 = request_class.new(:get, "http://example.com/", headers: { "accept" => "text/plain", "user-agent" => "Linux Bowser" }) + request4 = request_class.new("GET", "http://example.com/", headers: { "accept" => "text/plain", "user-agent" => "Linux Bowser" }) store.prepare(request4) assert !request4.headers.key?("if-none-match") end diff --git a/test/response_test.rb b/test/response_test.rb index 3e043a12..09dbaaa7 100644 --- a/test/response_test.rb +++ b/test/response_test.rb @@ -65,7 +65,7 @@ class ResponseTest < Minitest::Test body2.write("bar") assert body2 == "foobar", "body buffers chunks" - body3 = Response::Body.new(Response.new(request("head"), 200, "2.0", {}), Options.new(body_threshold_size: 1024)) + body3 = Response::Body.new(Response.new(request("HEAD"), 200, "2.0", {}), Options.new(body_threshold_size: 1024)) assert body3.empty?, "body must be empty after initialization" assert body3 == "", "HEAD request body must be empty (#{body3})" @@ -212,7 +212,7 @@ class ResponseTest < Minitest::Test private - def request(verb = :get, uri = "http://google.com") + def request(verb = "GET", uri = "http://google.com") Request.new(verb, uri) end diff --git a/test/session_test.rb b/test/session_test.rb index 1cde22f5..e06ab3fa 100644 --- a/test/session_test.rb +++ b/test/session_test.rb @@ -26,7 +26,7 @@ class SessionTest < Minitest::Test assert session.options.respond_to?(:foo), "options methods weren't added" assert session.options.foo == "options-foo", "option method is unexpected" - request = session.options.request_class.new(:get, "http://example.com/", session.options) + request = session.options.request_class.new("GET", "http://example.com/", session.options) assert request.respond_to?(:foo), "request methods haven't been added" assert request.foo == "request-foo", "request method is unexpected" assert request.headers.respond_to?(:foo), "headers methods haven't been added" diff --git a/test/support/requests/get.rb b/test/support/requests/get.rb index e16a8a6e..97be008e 100644 --- a/test/support/requests/get.rb +++ b/test/support/requests/get.rb @@ -30,7 +30,7 @@ module Requests def test_http_request uri = build_uri("/get") - response = HTTPX.request(:get, uri) + response = HTTPX.request("GET", uri) verify_status(response, 200) verify_body_length(response) end @@ -38,7 +38,7 @@ module Requests def test_http_get_build_request uri = build_uri("/get") HTTPX.wrap do |http| - request = http.build_request(:get, uri) + request = http.build_request("GET", uri) response = http.request(request) verify_status(response, 200) verify_body_length(response) diff --git a/test/support/requests/plugins/expect.rb b/test/support/requests/plugins/expect.rb index 523f2858..4fa88c7d 100644 --- a/test/support/requests/plugins/expect.rb +++ b/test/support/requests/plugins/expect.rb @@ -26,7 +26,7 @@ module Requests assert body == "echo: helloworld" verify_header(response.instance_variable_get(:@request).headers, "expect", "100-continue") - next_request = http.build_request(:post, build_uri("/", server.origin), body: "helloworld") + next_request = http.build_request("POST", build_uri("/", server.origin), body: "helloworld") verify_header(next_request.headers, "expect", "100-continue") end end @@ -58,7 +58,7 @@ module Requests assert body == "echo: helloworld" verify_no_header(response.instance_variable_get(:@request).headers, "expect") - next_request = http.build_request(:post, build_uri("/", server.origin), body: "helloworld") + next_request = http.build_request("POST", build_uri("/", server.origin), body: "helloworld") verify_no_header(next_request.headers, "expect") end end diff --git a/test/support/requests/plugins/h2c.rb b/test/support/requests/plugins/h2c.rb index 5509fab8..fe361c4c 100644 --- a/test/support/requests/plugins/h2c.rb +++ b/test/support/requests/plugins/h2c.rb @@ -7,8 +7,8 @@ module Requests HTTPX.plugin(SessionWithPool).plugin(:h2c).wrap do |session| uri = build_uri("/get") - request = session.build_request(:get, uri) - request2 = session.build_request(:get, uri) + request = session.build_request("GET", uri) + request2 = session.build_request("GET", uri) response = session.request(request) verify_status(response, 200) assert response.version == "2.0", "http h2c requests should be in HTTP/2" diff --git a/test/support/requests/plugins/multipart.rb b/test/support/requests/plugins/multipart.rb index e724e822..d1c839d6 100644 --- a/test/support/requests/plugins/multipart.rb +++ b/test/support/requests/plugins/multipart.rb @@ -225,7 +225,7 @@ module Requests .class.default_options .response_class .new( - HTTPX::Request.new(:get, "http://example.com"), + HTTPX::Request.new("GET", "http://example.com"), 200, "2.0", { "content-type" => "multipart/form-data; boundary=90" } diff --git a/test/support/requests/plugins/upgrade.rb b/test/support/requests/plugins/upgrade.rb index ae62e599..018f7c19 100644 --- a/test/support/requests/plugins/upgrade.rb +++ b/test/support/requests/plugins/upgrade.rb @@ -15,8 +15,8 @@ module Requests http.plugin(:upgrade).wrap do |session| uri = build_uri("/", "https://stadtschreiber.ruhr") - request = session.build_request(:get, uri) - request2 = session.build_request(:get, uri) + request = session.build_request("GET", uri) + request2 = session.build_request("GET", uri) response = session.request(request) verify_status(response, 200) diff --git a/test/support/requests/with_body.rb b/test/support/requests/with_body.rb index 76752b69..7662db74 100644 --- a/test/support/requests/with_body.rb +++ b/test/support/requests/with_body.rb @@ -106,8 +106,8 @@ module Requests define_method :"test_#{meth}_multiple_params" do uri = build_uri("/#{meth}") response1, response2 = HTTPX.request([ - [meth, uri, { body: "data" }], - [meth, uri, { form: { "foo" => "bar" } }], + [meth.upcase, uri, { body: "data" }], + [meth.upcase, uri, { form: { "foo" => "bar" } }], ], max_concurrent_requests: 1) # because httpbin sucks and can't handle pipeline requests verify_status(response1, 200) @@ -124,7 +124,7 @@ module Requests define_method :"test_#{meth}_build_request_body_params" do uri = build_uri("/#{meth}") HTTPX.wrap do |http| - request = http.build_request(meth, uri, body: "data") + request = http.build_request(meth.upcase, uri, body: "data") response = http.request(request) verify_status(response, 200) body = json_body(response) diff --git a/test/support/requests/with_chunked_body.rb b/test/support/requests/with_chunked_body.rb index 851334f8..0b1d0a4c 100644 --- a/test/support/requests/with_chunked_body.rb +++ b/test/support/requests/with_chunked_body.rb @@ -22,7 +22,7 @@ module Requests total_time = start_time = nil trailered = false - request = http.build_request(meth, uri, headers: { "trailer" => "X-Time-Spent" }, body: %w[this is a chunked response]) + request = http.build_request(meth.upcase, uri, headers: { "trailer" => "X-Time-Spent" }, body: %w[this is a chunked response]) request.on(:headers) do |_written_request| start_time = HTTPX::Utils.now end