diff --git a/lib/uri/generic.rb b/lib/uri/generic.rb index fce8a8a..cc131bd 100644 --- a/lib/uri/generic.rb +++ b/lib/uri/generic.rb @@ -90,7 +90,7 @@ def self.build2(args) elsif args.kind_of?(Hash) tmp = {} args.each do |key, value| - tmp[key] = if value + tmp[key] = if value.is_a?(String) URI::RFC2396_PARSER.escape(value) else value diff --git a/test/uri/test_generic.rb b/test/uri/test_generic.rb index 9006125..4fff536 100644 --- a/test/uri/test_generic.rb +++ b/test/uri/test_generic.rb @@ -16,6 +16,16 @@ def uri_to_ary(uri) uri.class.component.collect {|c| uri.send(c)} end + + def test_build2_preserves_non_string_components + components = {host: "example.test", port: 8080, path: "/a b"} + + uri = URI::HTTP.build2(components) + + assert_equal("http://example.test:8080/a%20b", uri.to_s) + assert_equal({host: "example.test", port: 8080, path: "/a b"}, components) + end + def test_to_s exp = 'http://example.com/'.freeze str = URI(exp).to_s