From 91fba0a97181db5c3b7102cbc03c24b6fb8f1149 Mon Sep 17 00:00:00 2001 From: Earlopain <14981592+Earlopain@users.noreply.github.com> Date: Thu, 1 Feb 2024 22:15:53 +0100 Subject: [PATCH] Fix initial headers always being an instance of the default header class --- lib/httpx/options.rb | 4 ++-- lib/httpx/request.rb | 2 +- test/options_test.rb | 11 +++++++++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/httpx/options.rb b/lib/httpx/options.rb index 8ce2c453..49d32f9a 100644 --- a/lib/httpx/options.rb +++ b/lib/httpx/options.rb @@ -47,13 +47,13 @@ module HTTPX write_timeout: WRITE_TIMEOUT, request_timeout: REQUEST_TIMEOUT, }, + :headers_class => Class.new(Headers), :headers => {}, :window_size => WINDOW_SIZE, :buffer_size => BUFFER_SIZE, :body_threshold_size => MAX_BODY_THRESHOLD_SIZE, :request_class => Class.new(Request), :response_class => Class.new(Response), - :headers_class => Class.new(Headers), :request_body_class => Class.new(Request::Body), :response_body_class => Class.new(Response::Body), :connection_class => Class.new(Connection), @@ -154,7 +154,7 @@ module HTTPX end def option_headers(value) - Headers.new(value) + headers_class.new(value) end def option_timeout(value) diff --git a/lib/httpx/request.rb b/lib/httpx/request.rb index d6e3cd12..ecebf4b1 100644 --- a/lib/httpx/request.rb +++ b/lib/httpx/request.rb @@ -61,7 +61,7 @@ module HTTPX @uri = origin.merge("#{base_path}#{@uri}") end - @headers = @options.headers_class.new(@options.headers) + @headers = @options.headers.dup @headers["user-agent"] ||= USER_AGENT @headers["accept"] ||= "*/*" diff --git a/test/options_test.rb b/test/options_test.rb index db750062..595a4439 100644 --- a/test/options_test.rb +++ b/test/options_test.rb @@ -45,6 +45,17 @@ class OptionsTest < Minitest::Test assert opt2.headers.to_a == [%w[accept */*]], "headers are unexpected" end + def test_options_headers_with_instance + proc_headers_class = Class.new(HTTPX::Headers) do + def initialize(headers = nil) + super(headers.transform_values(&:call)) + end + end + + opts = Options.new(headers_class: proc_headers_class, headers: { "x-number" => -> { 1 + 1 } }) + assert_equal "2", opts.headers["x-number"] + end + def test_options_merge_hash opts = Options.new(body: "fat") merged_opts = opts.merge(body: "thin")