From e262523d0801f3d880238d147b06731ff5feecc3 Mon Sep 17 00:00:00 2001 From: Duncan Robertson Date: Fri, 9 Sep 2011 12:43:34 +0100 Subject: [PATCH 1/2] Add support for http_proxy environment variable If no proxy is provided, but the http_proxy environment var is set, this is used transparently. --- lib/faraday/connection.rb | 2 ++ test/connection_test.rb | 19 +++++++++++++++++++ test/env_test.rb | 7 +++++++ 3 files changed, 28 insertions(+) diff --git a/lib/faraday/connection.rb b/lib/faraday/connection.rb index a131b6bc..f407d3b3 100644 --- a/lib/faraday/connection.rb +++ b/lib/faraday/connection.rb @@ -33,6 +33,8 @@ module Faraday @parallel_manager = options[:parallel] self.url_prefix = url if url + + options[:proxy] = ENV['http_proxy'] if options[:proxy].nil? proxy(options[:proxy]) @params.update options[:params] if options[:params] diff --git a/test/connection_test.rb b/test/connection_test.rb index 4285bfc1..c207bf3a 100644 --- a/test/connection_test.rb +++ b/test/connection_test.rb @@ -1,6 +1,15 @@ require File.expand_path(File.join(File.dirname(__FILE__), 'helper')) class TestConnection < Faraday::TestCase + def setup + @tmp_http_proxy = ENV['http_proxy'] + ENV['http_proxy'] = nil + end + + def teardown + ENV['http_proxy'] = @tmp_http_proxy + end + def test_initialize_parses_host_out_of_given_url conn = Faraday::Connection.new "http://sushi.com" assert_equal 'sushi.com', conn.host @@ -197,6 +206,7 @@ class TestConnection < Faraday::TestCase end def test_proxy_accepts_string + ENV['http_proxy'] = "http://duncan.proxy.com:80" conn = Faraday::Connection.new conn.proxy 'http://proxy.com' assert_equal 'proxy.com', conn.proxy[:uri].host @@ -204,6 +214,7 @@ class TestConnection < Faraday::TestCase end def test_proxy_accepts_uri + ENV['http_proxy'] = "http://duncan.proxy.com:80" conn = Faraday::Connection.new conn.proxy Addressable::URI.parse('http://proxy.com') assert_equal 'proxy.com', conn.proxy[:uri].host @@ -211,6 +222,7 @@ class TestConnection < Faraday::TestCase end def test_proxy_accepts_hash_with_string_uri + ENV['http_proxy'] = "http://duncan.proxy.com:80" conn = Faraday::Connection.new conn.proxy :uri => 'http://proxy.com', :user => 'rick' assert_equal 'proxy.com', conn.proxy[:uri].host @@ -218,12 +230,19 @@ class TestConnection < Faraday::TestCase end def test_proxy_accepts_hash + ENV['http_proxy'] = "http://duncan.proxy.com:80" conn = Faraday::Connection.new conn.proxy :uri => Addressable::URI.parse('http://proxy.com'), :user => 'rick' assert_equal 'proxy.com', conn.proxy[:uri].host assert_equal 'rick', conn.proxy[:user] end + def test_proxy_accepts_http_env + ENV['http_proxy'] = "http://duncan.proxy.com:80" + conn = Faraday::Connection.new + assert_equal 'duncan.proxy.com', conn.proxy[:uri].host + end + def test_proxy_requires_uri conn = Faraday::Connection.new assert_raises ArgumentError do diff --git a/test/env_test.rb b/test/env_test.rb index 3a7eaaa3..164020e5 100644 --- a/test/env_test.rb +++ b/test/env_test.rb @@ -2,6 +2,9 @@ require File.expand_path(File.join(File.dirname(__FILE__), 'helper')) class EnvTest < Faraday::TestCase def setup + @tmp_http_proxy = ENV['http_proxy'] + ENV['http_proxy'] = "http://duncan.proxy.com:80" + @conn = Faraday.new :url => 'http://sushi.com/api', :headers => {'Mime-Version' => '1.0'}, :request => {:oauth => {:consumer_key => 'anonymous'}} @@ -12,6 +15,10 @@ class EnvTest < Faraday::TestCase @conn.proxy 'http://proxy.com' end + def teardown + ENV['http_proxy'] = @tmp_http_proxy + end + def test_request_create_stores_method env = make_env(:get) assert_equal :get, env[:method] From 22495617d2fd7ae1a447cb9fdf239a168860a5cd Mon Sep 17 00:00:00 2001 From: Duncan Robertson Date: Sat, 10 Sep 2011 09:45:52 +0100 Subject: [PATCH 2/2] Changes to http_proxy implimentation and tests after useful feedback --- lib/faraday/connection.rb | 3 +- test/connection_test.rb | 65 ++++++++++++++++++++++----------------- test/env_test.rb | 7 ----- 3 files changed, 37 insertions(+), 38 deletions(-) diff --git a/lib/faraday/connection.rb b/lib/faraday/connection.rb index f407d3b3..0644d2c8 100644 --- a/lib/faraday/connection.rb +++ b/lib/faraday/connection.rb @@ -34,8 +34,7 @@ module Faraday self.url_prefix = url if url - options[:proxy] = ENV['http_proxy'] if options[:proxy].nil? - proxy(options[:proxy]) + proxy(options.fetch(:proxy) { ENV['http_proxy'] }) @params.update options[:params] if options[:params] @headers.update options[:headers] if options[:headers] diff --git a/test/connection_test.rb b/test/connection_test.rb index c207bf3a..541ea36e 100644 --- a/test/connection_test.rb +++ b/test/connection_test.rb @@ -1,13 +1,15 @@ require File.expand_path(File.join(File.dirname(__FILE__), 'helper')) class TestConnection < Faraday::TestCase - def setup - @tmp_http_proxy = ENV['http_proxy'] - ENV['http_proxy'] = nil - end - def teardown - ENV['http_proxy'] = @tmp_http_proxy + def with_proxy_env(proxy) + old_proxy = ENV['http_proxy'] + ENV['http_proxy'] = proxy + begin + yield + ensure + ENV['http_proxy'] = old_proxy + end end def test_initialize_parses_host_out_of_given_url @@ -206,41 +208,46 @@ class TestConnection < Faraday::TestCase end def test_proxy_accepts_string - ENV['http_proxy'] = "http://duncan.proxy.com:80" - conn = Faraday::Connection.new - conn.proxy 'http://proxy.com' - assert_equal 'proxy.com', conn.proxy[:uri].host - assert_equal [:uri], conn.proxy.keys + with_proxy_env "http://duncan.proxy.com:80" do + conn = Faraday::Connection.new + conn.proxy 'http://proxy.com' + assert_equal 'proxy.com', conn.proxy[:uri].host + assert_equal [:uri], conn.proxy.keys + end end def test_proxy_accepts_uri - ENV['http_proxy'] = "http://duncan.proxy.com:80" - conn = Faraday::Connection.new - conn.proxy Addressable::URI.parse('http://proxy.com') - assert_equal 'proxy.com', conn.proxy[:uri].host - assert_equal [:uri], conn.proxy.keys + with_proxy_env "http://duncan.proxy.com:80" do + conn = Faraday::Connection.new + conn.proxy Addressable::URI.parse('http://proxy.com') + assert_equal 'proxy.com', conn.proxy[:uri].host + assert_equal [:uri], conn.proxy.keys + end end def test_proxy_accepts_hash_with_string_uri - ENV['http_proxy'] = "http://duncan.proxy.com:80" - conn = Faraday::Connection.new - conn.proxy :uri => 'http://proxy.com', :user => 'rick' - assert_equal 'proxy.com', conn.proxy[:uri].host - assert_equal 'rick', conn.proxy[:user] + with_proxy_env "http://duncan.proxy.com:80" do + conn = Faraday::Connection.new + conn.proxy :uri => 'http://proxy.com', :user => 'rick' + assert_equal 'proxy.com', conn.proxy[:uri].host + assert_equal 'rick', conn.proxy[:user] + end end def test_proxy_accepts_hash - ENV['http_proxy'] = "http://duncan.proxy.com:80" - conn = Faraday::Connection.new - conn.proxy :uri => Addressable::URI.parse('http://proxy.com'), :user => 'rick' - assert_equal 'proxy.com', conn.proxy[:uri].host - assert_equal 'rick', conn.proxy[:user] + with_proxy_env "http://duncan.proxy.com:80" do + conn = Faraday::Connection.new + conn.proxy :uri => Addressable::URI.parse('http://proxy.com'), :user => 'rick' + assert_equal 'proxy.com', conn.proxy[:uri].host + assert_equal 'rick', conn.proxy[:user] + end end def test_proxy_accepts_http_env - ENV['http_proxy'] = "http://duncan.proxy.com:80" - conn = Faraday::Connection.new - assert_equal 'duncan.proxy.com', conn.proxy[:uri].host + with_proxy_env "http://duncan.proxy.com:80" do + conn = Faraday::Connection.new + assert_equal 'duncan.proxy.com', conn.proxy[:uri].host + end end def test_proxy_requires_uri diff --git a/test/env_test.rb b/test/env_test.rb index 164020e5..3a7eaaa3 100644 --- a/test/env_test.rb +++ b/test/env_test.rb @@ -2,9 +2,6 @@ require File.expand_path(File.join(File.dirname(__FILE__), 'helper')) class EnvTest < Faraday::TestCase def setup - @tmp_http_proxy = ENV['http_proxy'] - ENV['http_proxy'] = "http://duncan.proxy.com:80" - @conn = Faraday.new :url => 'http://sushi.com/api', :headers => {'Mime-Version' => '1.0'}, :request => {:oauth => {:consumer_key => 'anonymous'}} @@ -15,10 +12,6 @@ class EnvTest < Faraday::TestCase @conn.proxy 'http://proxy.com' end - def teardown - ENV['http_proxy'] = @tmp_http_proxy - end - def test_request_create_stores_method env = make_env(:get) assert_equal :get, env[:method]