diff --git a/lib/faraday/options/proxy_options.rb b/lib/faraday/options/proxy_options.rb index 8d8b0238..028f3d2a 100644 --- a/lib/faraday/options/proxy_options.rb +++ b/lib/faraday/options/proxy_options.rb @@ -22,8 +22,10 @@ module Faraday when URI value = { uri: value } when Hash, Options - if (uri = value.delete(:uri)) - value[:uri] = Utils.URI(uri) + if value[:uri] + value = value.dup.tap do |duped| + duped[:uri] = Utils.URI(duped[:uri]) + end end end diff --git a/spec/faraday/options/proxy_options_spec.rb b/spec/faraday/options/proxy_options_spec.rb index 749247d1..15203edb 100644 --- a/spec/faraday/options/proxy_options_spec.rb +++ b/spec/faraday/options/proxy_options_spec.rb @@ -27,6 +27,33 @@ RSpec.describe Faraday::ProxyOptions do expect(options.inspect).to eq('#') end + it 'works with hash' do + hash = { user: 'user', password: 'pass', uri: 'http://@example.org' } + options = Faraday::ProxyOptions.from(hash) + expect(options.user).to eq('user') + expect(options.password).to eq('pass') + expect(options.uri).to be_a_kind_of(URI) + expect(options.path).to eq('') + expect(options.port).to eq(80) + expect(options.host).to eq('example.org') + expect(options.scheme).to eq('http') + expect(options.inspect).to match('#