faraday 0.9.1 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/LICENSE.md +1 -1
- data/README.md +192 -28
- data/lib/faraday/adapter/em_http.rb +8 -2
- data/lib/faraday/adapter/em_http_ssl_patch.rb +1 -1
- data/lib/faraday/adapter/em_synchrony.rb +16 -2
- data/lib/faraday/adapter/excon.rb +10 -8
- data/lib/faraday/adapter/httpclient.rb +27 -5
- data/lib/faraday/adapter/net_http.rb +34 -12
- data/lib/faraday/adapter/net_http_persistent.rb +35 -15
- data/lib/faraday/adapter/patron.rb +39 -16
- data/lib/faraday/adapter/test.rb +79 -28
- data/lib/faraday/adapter/typhoeus.rb +4 -115
- data/lib/faraday/adapter.rb +10 -1
- data/lib/faraday/autoload.rb +1 -1
- data/lib/faraday/connection.rb +72 -20
- data/lib/faraday/error.rb +18 -5
- data/lib/faraday/options.rb +42 -19
- data/lib/faraday/parameters.rb +56 -39
- data/lib/faraday/rack_builder.rb +27 -2
- data/lib/faraday/request/authorization.rb +1 -2
- data/lib/faraday/request/multipart.rb +7 -2
- data/lib/faraday/request/retry.rb +82 -18
- data/lib/faraday/request.rb +22 -0
- data/lib/faraday/response/logger.rb +29 -8
- data/lib/faraday/response.rb +6 -2
- data/lib/faraday/utils.rb +32 -3
- data/lib/faraday.rb +14 -34
- metadata +7 -94
- data/.document +0 -6
- data/CHANGELOG.md +0 -20
- data/CONTRIBUTING.md +0 -36
- data/Gemfile +0 -25
- data/Rakefile +0 -71
- data/faraday.gemspec +0 -34
- data/script/cached-bundle +0 -46
- data/script/console +0 -7
- data/script/generate_certs +0 -42
- data/script/package +0 -7
- data/script/proxy-server +0 -42
- data/script/release +0 -17
- data/script/s3-put +0 -71
- data/script/server +0 -36
- data/script/test +0 -172
- data/test/adapters/default_test.rb +0 -14
- data/test/adapters/em_http_test.rb +0 -20
- data/test/adapters/em_synchrony_test.rb +0 -20
- data/test/adapters/excon_test.rb +0 -20
- data/test/adapters/httpclient_test.rb +0 -21
- data/test/adapters/integration.rb +0 -254
- data/test/adapters/logger_test.rb +0 -82
- data/test/adapters/net_http_persistent_test.rb +0 -20
- data/test/adapters/net_http_test.rb +0 -14
- data/test/adapters/patron_test.rb +0 -20
- data/test/adapters/rack_test.rb +0 -31
- data/test/adapters/test_middleware_test.rb +0 -114
- data/test/adapters/typhoeus_test.rb +0 -28
- data/test/authentication_middleware_test.rb +0 -65
- data/test/composite_read_io_test.rb +0 -111
- data/test/connection_test.rb +0 -522
- data/test/env_test.rb +0 -218
- data/test/helper.rb +0 -81
- data/test/live_server.rb +0 -67
- data/test/middleware/instrumentation_test.rb +0 -88
- data/test/middleware/retry_test.rb +0 -177
- data/test/middleware_stack_test.rb +0 -173
- data/test/multibyte.txt +0 -1
- data/test/options_test.rb +0 -252
- data/test/parameters_test.rb +0 -64
- data/test/request_middleware_test.rb +0 -142
- data/test/response_middleware_test.rb +0 -72
- data/test/strawberry.rb +0 -2
- data/test/utils_test.rb +0 -58
    
        data/test/env_test.rb
    DELETED
    
    | @@ -1,218 +0,0 @@ | |
| 1 | 
            -
            require File.expand_path('../helper', __FILE__)
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            class EnvTest < Faraday::TestCase
         | 
| 4 | 
            -
              def setup
         | 
| 5 | 
            -
                @conn = Faraday.new :url => 'http://sushi.com/api',
         | 
| 6 | 
            -
                  :headers => {'Mime-Version' => '1.0'},
         | 
| 7 | 
            -
                  :request => {:oauth => {:consumer_key => 'anonymous'}}
         | 
| 8 | 
            -
             | 
| 9 | 
            -
                @conn.options.timeout      = 3
         | 
| 10 | 
            -
                @conn.options.open_timeout = 5
         | 
| 11 | 
            -
                @conn.ssl.verify           = false
         | 
| 12 | 
            -
                @conn.proxy 'http://proxy.com'
         | 
| 13 | 
            -
              end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
              def test_request_create_stores_method
         | 
| 16 | 
            -
                env = make_env(:get)
         | 
| 17 | 
            -
                assert_equal :get, env.method
         | 
| 18 | 
            -
              end
         | 
| 19 | 
            -
             | 
| 20 | 
            -
              def test_request_create_stores_uri
         | 
| 21 | 
            -
                env = make_env do |req|
         | 
| 22 | 
            -
                  req.url 'foo.json', 'a' => 1
         | 
| 23 | 
            -
                end
         | 
| 24 | 
            -
                assert_equal 'http://sushi.com/api/foo.json?a=1', env.url.to_s
         | 
| 25 | 
            -
              end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
              def test_request_create_stores_headers
         | 
| 28 | 
            -
                env = make_env do |req|
         | 
| 29 | 
            -
                  req['Server'] = 'Faraday'
         | 
| 30 | 
            -
                end
         | 
| 31 | 
            -
                headers = env.request_headers
         | 
| 32 | 
            -
                assert_equal '1.0', headers['mime-version']
         | 
| 33 | 
            -
                assert_equal 'Faraday', headers['server']
         | 
| 34 | 
            -
              end
         | 
| 35 | 
            -
             | 
| 36 | 
            -
              def test_request_create_stores_body
         | 
| 37 | 
            -
                env = make_env do |req|
         | 
| 38 | 
            -
                  req.body = 'hi'
         | 
| 39 | 
            -
                end
         | 
| 40 | 
            -
                assert_equal 'hi', env.body
         | 
| 41 | 
            -
              end
         | 
| 42 | 
            -
             | 
| 43 | 
            -
              def test_global_request_options
         | 
| 44 | 
            -
                env = make_env
         | 
| 45 | 
            -
                assert_equal 3, env.request.timeout
         | 
| 46 | 
            -
                assert_equal 5, env.request.open_timeout
         | 
| 47 | 
            -
              end
         | 
| 48 | 
            -
             | 
| 49 | 
            -
              def test_per_request_options
         | 
| 50 | 
            -
                env = make_env do |req|
         | 
| 51 | 
            -
                  req.options.timeout = 10
         | 
| 52 | 
            -
                  req.options.boundary = 'boo'
         | 
| 53 | 
            -
                  req.options.oauth[:consumer_secret] = 'xyz'
         | 
| 54 | 
            -
                end
         | 
| 55 | 
            -
                assert_equal 10, env.request.timeout
         | 
| 56 | 
            -
                assert_equal 5, env.request.open_timeout
         | 
| 57 | 
            -
                assert_equal 'boo', env.request.boundary
         | 
| 58 | 
            -
             | 
| 59 | 
            -
                oauth_expected = {:consumer_secret => 'xyz', :consumer_key => 'anonymous'}
         | 
| 60 | 
            -
                assert_equal oauth_expected, env.request.oauth
         | 
| 61 | 
            -
              end
         | 
| 62 | 
            -
             | 
| 63 | 
            -
              def test_request_create_stores_ssl_options
         | 
| 64 | 
            -
                env = make_env
         | 
| 65 | 
            -
                assert_equal false, env.ssl.verify
         | 
| 66 | 
            -
              end
         | 
| 67 | 
            -
             | 
| 68 | 
            -
              def test_request_create_stores_proxy_options
         | 
| 69 | 
            -
                env = make_env
         | 
| 70 | 
            -
                assert_equal 'proxy.com', env.request.proxy.host
         | 
| 71 | 
            -
              end
         | 
| 72 | 
            -
             | 
| 73 | 
            -
              private
         | 
| 74 | 
            -
             | 
| 75 | 
            -
              def make_env(method = :get, connection = @conn, &block)
         | 
| 76 | 
            -
                request = connection.build_request(method, &block)
         | 
| 77 | 
            -
                request.to_env(connection)
         | 
| 78 | 
            -
              end
         | 
| 79 | 
            -
            end
         | 
| 80 | 
            -
             | 
| 81 | 
            -
            class HeadersTest < Faraday::TestCase
         | 
| 82 | 
            -
              def setup
         | 
| 83 | 
            -
                @headers = Faraday::Utils::Headers.new
         | 
| 84 | 
            -
              end
         | 
| 85 | 
            -
             | 
| 86 | 
            -
              def test_normalizes_different_capitalizations
         | 
| 87 | 
            -
                @headers['Content-Type'] = 'application/json'
         | 
| 88 | 
            -
                assert_equal ['Content-Type'], @headers.keys
         | 
| 89 | 
            -
                assert_equal 'application/json', @headers['Content-Type']
         | 
| 90 | 
            -
                assert_equal 'application/json', @headers['CONTENT-TYPE']
         | 
| 91 | 
            -
                assert_equal 'application/json', @headers['content-type']
         | 
| 92 | 
            -
                assert @headers.include?('content-type')
         | 
| 93 | 
            -
             | 
| 94 | 
            -
                @headers['content-type'] = 'application/xml'
         | 
| 95 | 
            -
                assert_equal ['Content-Type'], @headers.keys
         | 
| 96 | 
            -
                assert_equal 'application/xml', @headers['Content-Type']
         | 
| 97 | 
            -
                assert_equal 'application/xml', @headers['CONTENT-TYPE']
         | 
| 98 | 
            -
                assert_equal 'application/xml', @headers['content-type']
         | 
| 99 | 
            -
              end
         | 
| 100 | 
            -
             | 
| 101 | 
            -
              def test_fetch_key
         | 
| 102 | 
            -
                @headers['Content-Type'] = 'application/json'
         | 
| 103 | 
            -
                block_called = false
         | 
| 104 | 
            -
                assert_equal 'application/json', @headers.fetch('content-type') { block_called = true }
         | 
| 105 | 
            -
                assert_equal 'application/json', @headers.fetch('Content-Type')
         | 
| 106 | 
            -
                assert_equal 'application/json', @headers.fetch('CONTENT-TYPE')
         | 
| 107 | 
            -
                assert_equal 'application/json', @headers.fetch(:content_type)
         | 
| 108 | 
            -
                assert_equal false, block_called
         | 
| 109 | 
            -
             | 
| 110 | 
            -
                assert_equal 'default', @headers.fetch('invalid', 'default')
         | 
| 111 | 
            -
                assert_equal false, @headers.fetch('invalid', false)
         | 
| 112 | 
            -
                assert_nil   @headers.fetch('invalid', nil)
         | 
| 113 | 
            -
             | 
| 114 | 
            -
                assert_equal 'Invalid key', @headers.fetch('Invalid') { |key| "#{key} key" }
         | 
| 115 | 
            -
             | 
| 116 | 
            -
                expected_error = defined?(KeyError) ? KeyError : IndexError
         | 
| 117 | 
            -
                assert_raises(expected_error) { @headers.fetch('invalid') }
         | 
| 118 | 
            -
              end
         | 
| 119 | 
            -
             | 
| 120 | 
            -
              def test_delete_key
         | 
| 121 | 
            -
                @headers['Content-Type'] = 'application/json'
         | 
| 122 | 
            -
                assert_equal 1, @headers.size
         | 
| 123 | 
            -
                assert @headers.include?('content-type')
         | 
| 124 | 
            -
                assert_equal 'application/json', @headers.delete('content-type')
         | 
| 125 | 
            -
                assert_equal 0, @headers.size
         | 
| 126 | 
            -
                assert !@headers.include?('content-type')
         | 
| 127 | 
            -
                assert_equal nil, @headers.delete('content-type')
         | 
| 128 | 
            -
              end
         | 
| 129 | 
            -
             | 
| 130 | 
            -
              def test_parse_response_headers_leaves_http_status_line_out
         | 
| 131 | 
            -
                @headers.parse("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n")
         | 
| 132 | 
            -
                assert_equal %w(Content-Type), @headers.keys
         | 
| 133 | 
            -
              end
         | 
| 134 | 
            -
             | 
| 135 | 
            -
              def test_parse_response_headers_parses_lower_cased_header_name_and_value
         | 
| 136 | 
            -
                @headers.parse("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n")
         | 
| 137 | 
            -
                assert_equal 'text/html', @headers['content-type']
         | 
| 138 | 
            -
              end
         | 
| 139 | 
            -
             | 
| 140 | 
            -
              def test_parse_response_headers_parses_lower_cased_header_name_and_value_with_colon
         | 
| 141 | 
            -
                @headers.parse("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nLocation: http://sushi.com/\r\n\r\n")
         | 
| 142 | 
            -
                assert_equal 'http://sushi.com/', @headers['location']
         | 
| 143 | 
            -
              end
         | 
| 144 | 
            -
             | 
| 145 | 
            -
              def test_parse_response_headers_parses_blank_lines
         | 
| 146 | 
            -
                @headers.parse("HTTP/1.1 200 OK\r\n\r\nContent-Type: text/html\r\n\r\n")
         | 
| 147 | 
            -
                assert_equal 'text/html', @headers['content-type']
         | 
| 148 | 
            -
              end
         | 
| 149 | 
            -
            end
         | 
| 150 | 
            -
             | 
| 151 | 
            -
            class ResponseTest < Faraday::TestCase
         | 
| 152 | 
            -
              def setup
         | 
| 153 | 
            -
                @env = Faraday::Env.from \
         | 
| 154 | 
            -
                  :status => 404, :body => 'yikes',
         | 
| 155 | 
            -
                  :response_headers => {'Content-Type' => 'text/plain'}
         | 
| 156 | 
            -
                @response = Faraday::Response.new @env
         | 
| 157 | 
            -
              end
         | 
| 158 | 
            -
             | 
| 159 | 
            -
              def test_finished
         | 
| 160 | 
            -
                assert @response.finished?
         | 
| 161 | 
            -
              end
         | 
| 162 | 
            -
             | 
| 163 | 
            -
              def test_error_on_finish
         | 
| 164 | 
            -
                assert_raises RuntimeError do
         | 
| 165 | 
            -
                  @response.finish({})
         | 
| 166 | 
            -
                end
         | 
| 167 | 
            -
              end
         | 
| 168 | 
            -
             | 
| 169 | 
            -
              def test_body_is_parsed_on_finish
         | 
| 170 | 
            -
                response = Faraday::Response.new
         | 
| 171 | 
            -
                response.on_complete { |env| env[:body] = env[:body].upcase }
         | 
| 172 | 
            -
                response.finish(@env)
         | 
| 173 | 
            -
             | 
| 174 | 
            -
                assert_equal "YIKES", response.body
         | 
| 175 | 
            -
              end
         | 
| 176 | 
            -
             | 
| 177 | 
            -
              def test_not_success
         | 
| 178 | 
            -
                assert !@response.success?
         | 
| 179 | 
            -
              end
         | 
| 180 | 
            -
             | 
| 181 | 
            -
              def test_status
         | 
| 182 | 
            -
                assert_equal 404, @response.status
         | 
| 183 | 
            -
              end
         | 
| 184 | 
            -
             | 
| 185 | 
            -
              def test_body
         | 
| 186 | 
            -
                assert_equal 'yikes', @response.body
         | 
| 187 | 
            -
              end
         | 
| 188 | 
            -
             | 
| 189 | 
            -
              def test_headers
         | 
| 190 | 
            -
                assert_equal 'text/plain', @response.headers['Content-Type']
         | 
| 191 | 
            -
                assert_equal 'text/plain', @response['content-type']
         | 
| 192 | 
            -
              end
         | 
| 193 | 
            -
             | 
| 194 | 
            -
              def test_apply_request
         | 
| 195 | 
            -
                @response.apply_request :body => 'a=b', :method => :post
         | 
| 196 | 
            -
                assert_equal 'yikes', @response.body
         | 
| 197 | 
            -
                assert_equal :post, @response.env[:method]
         | 
| 198 | 
            -
              end
         | 
| 199 | 
            -
             | 
| 200 | 
            -
              def test_marshal
         | 
| 201 | 
            -
                @response = Faraday::Response.new
         | 
| 202 | 
            -
                @response.on_complete { }
         | 
| 203 | 
            -
                @response.finish @env.merge(:params => 'moo')
         | 
| 204 | 
            -
             | 
| 205 | 
            -
                loaded = Marshal.load Marshal.dump(@response)
         | 
| 206 | 
            -
                assert_nil loaded.env[:params]
         | 
| 207 | 
            -
                assert_equal %w[body response_headers status], loaded.env.keys.map { |k| k.to_s }.sort
         | 
| 208 | 
            -
              end
         | 
| 209 | 
            -
             | 
| 210 | 
            -
              def test_hash
         | 
| 211 | 
            -
                hash = @response.to_hash
         | 
| 212 | 
            -
                assert_kind_of Hash, hash
         | 
| 213 | 
            -
                assert_equal @env.to_hash, hash
         | 
| 214 | 
            -
                assert_equal hash[:status], @response.status
         | 
| 215 | 
            -
                assert_equal hash[:response_headers], @response.headers
         | 
| 216 | 
            -
                assert_equal hash[:body], @response.body
         | 
| 217 | 
            -
              end
         | 
| 218 | 
            -
            end
         | 
    
        data/test/helper.rb
    DELETED
    
    | @@ -1,81 +0,0 @@ | |
| 1 | 
            -
            if RUBY_VERSION >= '1.9'
         | 
| 2 | 
            -
              require 'simplecov'
         | 
| 3 | 
            -
              require 'coveralls'
         | 
| 4 | 
            -
             | 
| 5 | 
            -
              SimpleCov.formatters = [SimpleCov::Formatter::HTMLFormatter, Coveralls::SimpleCov::Formatter]
         | 
| 6 | 
            -
             | 
| 7 | 
            -
              SimpleCov.start do
         | 
| 8 | 
            -
                add_filter '/bundle/'
         | 
| 9 | 
            -
                add_filter '/test/'
         | 
| 10 | 
            -
                minimum_coverage(87.27)
         | 
| 11 | 
            -
              end
         | 
| 12 | 
            -
            end
         | 
| 13 | 
            -
             | 
| 14 | 
            -
            gem 'minitest' if defined? Bundler
         | 
| 15 | 
            -
            require 'minitest/autorun'
         | 
| 16 | 
            -
             | 
| 17 | 
            -
            if ENV['LEFTRIGHT']
         | 
| 18 | 
            -
              begin
         | 
| 19 | 
            -
                require 'leftright'
         | 
| 20 | 
            -
              rescue LoadError
         | 
| 21 | 
            -
                puts "Run `gem install leftright` to install leftright."
         | 
| 22 | 
            -
              end
         | 
| 23 | 
            -
            end
         | 
| 24 | 
            -
             | 
| 25 | 
            -
            require File.expand_path('../../lib/faraday', __FILE__)
         | 
| 26 | 
            -
             | 
| 27 | 
            -
            require 'stringio'
         | 
| 28 | 
            -
            require 'uri'
         | 
| 29 | 
            -
             | 
| 30 | 
            -
            module Faraday
         | 
| 31 | 
            -
              module LiveServerConfig
         | 
| 32 | 
            -
                def live_server=(value)
         | 
| 33 | 
            -
                  @@live_server = case value
         | 
| 34 | 
            -
                  when /^http/
         | 
| 35 | 
            -
                    URI(value)
         | 
| 36 | 
            -
                  when /./
         | 
| 37 | 
            -
                    URI('http://127.0.0.1:4567')
         | 
| 38 | 
            -
                  end
         | 
| 39 | 
            -
                end
         | 
| 40 | 
            -
             | 
| 41 | 
            -
                def live_server?
         | 
| 42 | 
            -
                  defined? @@live_server
         | 
| 43 | 
            -
                end
         | 
| 44 | 
            -
             | 
| 45 | 
            -
                # Returns an object that responds to `host` and `port`.
         | 
| 46 | 
            -
                def live_server
         | 
| 47 | 
            -
                  live_server? and @@live_server
         | 
| 48 | 
            -
                end
         | 
| 49 | 
            -
              end
         | 
| 50 | 
            -
             | 
| 51 | 
            -
              class TestCase < MiniTest::Test
         | 
| 52 | 
            -
                extend LiveServerConfig
         | 
| 53 | 
            -
                self.live_server = ENV['LIVE']
         | 
| 54 | 
            -
             | 
| 55 | 
            -
                def test_default
         | 
| 56 | 
            -
                  assert true
         | 
| 57 | 
            -
                end unless defined? ::MiniTest
         | 
| 58 | 
            -
             | 
| 59 | 
            -
                def capture_warnings
         | 
| 60 | 
            -
                  old, $stderr = $stderr, StringIO.new
         | 
| 61 | 
            -
                  begin
         | 
| 62 | 
            -
                    yield
         | 
| 63 | 
            -
                    $stderr.string
         | 
| 64 | 
            -
                  ensure
         | 
| 65 | 
            -
                    $stderr = old
         | 
| 66 | 
            -
                  end
         | 
| 67 | 
            -
                end
         | 
| 68 | 
            -
             | 
| 69 | 
            -
                def self.jruby?
         | 
| 70 | 
            -
                  defined? RUBY_ENGINE and 'jruby' == RUBY_ENGINE
         | 
| 71 | 
            -
                end
         | 
| 72 | 
            -
             | 
| 73 | 
            -
                def self.rbx?
         | 
| 74 | 
            -
                  defined? RUBY_ENGINE and 'rbx' == RUBY_ENGINE
         | 
| 75 | 
            -
                end
         | 
| 76 | 
            -
             | 
| 77 | 
            -
                def self.ssl_mode?
         | 
| 78 | 
            -
                  ENV['SSL'] == 'yes'
         | 
| 79 | 
            -
                end
         | 
| 80 | 
            -
              end
         | 
| 81 | 
            -
            end
         | 
    
        data/test/live_server.rb
    DELETED
    
    | @@ -1,67 +0,0 @@ | |
| 1 | 
            -
            require 'sinatra/base'
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Faraday
         | 
| 4 | 
            -
            class LiveServer < Sinatra::Base
         | 
| 5 | 
            -
              set :environment, :test
         | 
| 6 | 
            -
              disable :logging
         | 
| 7 | 
            -
              disable :protection
         | 
| 8 | 
            -
             | 
| 9 | 
            -
              [:get, :post, :put, :patch, :delete, :options].each do |method|
         | 
| 10 | 
            -
                send(method, '/echo') do
         | 
| 11 | 
            -
                  kind = request.request_method.downcase
         | 
| 12 | 
            -
                  out = kind.dup
         | 
| 13 | 
            -
                  out << ' ?' << request.GET.inspect if request.GET.any?
         | 
| 14 | 
            -
                  out << ' ' << request.POST.inspect if request.POST.any?
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                  content_type 'text/plain'
         | 
| 17 | 
            -
                  return out
         | 
| 18 | 
            -
                end
         | 
| 19 | 
            -
              end
         | 
| 20 | 
            -
             | 
| 21 | 
            -
              get '/echo_header' do
         | 
| 22 | 
            -
                header = "HTTP_#{params[:name].tr('-', '_').upcase}"
         | 
| 23 | 
            -
                request.env.fetch(header) { 'NONE' }
         | 
| 24 | 
            -
              end
         | 
| 25 | 
            -
             | 
| 26 | 
            -
              post '/file' do
         | 
| 27 | 
            -
                if params[:uploaded_file].respond_to? :each_key
         | 
| 28 | 
            -
                  "file %s %s %d" % [
         | 
| 29 | 
            -
                    params[:uploaded_file][:filename],
         | 
| 30 | 
            -
                    params[:uploaded_file][:type],
         | 
| 31 | 
            -
                    params[:uploaded_file][:tempfile].size
         | 
| 32 | 
            -
                  ]
         | 
| 33 | 
            -
                else
         | 
| 34 | 
            -
                  status 400
         | 
| 35 | 
            -
                end
         | 
| 36 | 
            -
              end
         | 
| 37 | 
            -
             | 
| 38 | 
            -
              get '/multi' do
         | 
| 39 | 
            -
                [200, { 'Set-Cookie' => 'one, two' }, '']
         | 
| 40 | 
            -
              end
         | 
| 41 | 
            -
             | 
| 42 | 
            -
              get '/who-am-i' do
         | 
| 43 | 
            -
                request.env['REMOTE_ADDR']
         | 
| 44 | 
            -
              end
         | 
| 45 | 
            -
             | 
| 46 | 
            -
              get '/slow' do
         | 
| 47 | 
            -
                sleep 10
         | 
| 48 | 
            -
                [200, {}, 'ok']
         | 
| 49 | 
            -
              end
         | 
| 50 | 
            -
             | 
| 51 | 
            -
              get '/204' do
         | 
| 52 | 
            -
                status 204 # no content
         | 
| 53 | 
            -
              end
         | 
| 54 | 
            -
             | 
| 55 | 
            -
              get '/ssl' do
         | 
| 56 | 
            -
                request.secure?.to_s
         | 
| 57 | 
            -
              end
         | 
| 58 | 
            -
             | 
| 59 | 
            -
              error do |e|
         | 
| 60 | 
            -
                "#{e.class}\n#{e.to_s}\n#{e.backtrace.join("\n")}"
         | 
| 61 | 
            -
              end
         | 
| 62 | 
            -
            end
         | 
| 63 | 
            -
            end
         | 
| 64 | 
            -
             | 
| 65 | 
            -
            if $0 == __FILE__
         | 
| 66 | 
            -
              Faraday::LiveServer.run!
         | 
| 67 | 
            -
            end
         | 
| @@ -1,88 +0,0 @@ | |
| 1 | 
            -
            require File.expand_path("../../helper", __FILE__)
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Middleware
         | 
| 4 | 
            -
              class InstrumentationTest < Faraday::TestCase
         | 
| 5 | 
            -
                def setup
         | 
| 6 | 
            -
                  @instrumenter = FakeInstrumenter.new
         | 
| 7 | 
            -
                end
         | 
| 8 | 
            -
             | 
| 9 | 
            -
                def test_default_name
         | 
| 10 | 
            -
                  assert_equal 'request.faraday', options.name
         | 
| 11 | 
            -
                end
         | 
| 12 | 
            -
             | 
| 13 | 
            -
                def test_default_instrumenter
         | 
| 14 | 
            -
                  begin
         | 
| 15 | 
            -
                    instrumenter = options.instrumenter
         | 
| 16 | 
            -
                  rescue NameError => err
         | 
| 17 | 
            -
                    assert_match 'ActiveSupport', err.to_s
         | 
| 18 | 
            -
                  else
         | 
| 19 | 
            -
                    assert_equal ActiveSupport::Notifications, instrumenter
         | 
| 20 | 
            -
                  end
         | 
| 21 | 
            -
                end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                def test_name
         | 
| 24 | 
            -
                  assert_equal 'booya', options(:name => 'booya').name
         | 
| 25 | 
            -
                end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
                def test_instrumenter
         | 
| 28 | 
            -
                  assert_equal :boom, options(:instrumenter => :boom).instrumenter
         | 
| 29 | 
            -
                end
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                def test_instrumentation_with_default_name
         | 
| 32 | 
            -
                  assert_equal 0, @instrumenter.instrumentations.size
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                  faraday = conn
         | 
| 35 | 
            -
                  res = faraday.get '/'
         | 
| 36 | 
            -
                  assert_equal 'ok', res.body
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                  assert_equal 1, @instrumenter.instrumentations.size
         | 
| 39 | 
            -
                  name, env = @instrumenter.instrumentations.first
         | 
| 40 | 
            -
                  assert_equal 'request.faraday', name
         | 
| 41 | 
            -
                  assert_equal '/', env[:url].path
         | 
| 42 | 
            -
                end
         | 
| 43 | 
            -
             | 
| 44 | 
            -
                def test_instrumentation
         | 
| 45 | 
            -
                  assert_equal 0, @instrumenter.instrumentations.size
         | 
| 46 | 
            -
             | 
| 47 | 
            -
                  faraday = conn :name => 'booya'
         | 
| 48 | 
            -
                  res = faraday.get '/'
         | 
| 49 | 
            -
                  assert_equal 'ok', res.body
         | 
| 50 | 
            -
             | 
| 51 | 
            -
                  assert_equal 1, @instrumenter.instrumentations.size
         | 
| 52 | 
            -
                  name, env = @instrumenter.instrumentations.first
         | 
| 53 | 
            -
                  assert_equal 'booya', name
         | 
| 54 | 
            -
                  assert_equal '/', env[:url].path
         | 
| 55 | 
            -
                end
         | 
| 56 | 
            -
             | 
| 57 | 
            -
                class FakeInstrumenter
         | 
| 58 | 
            -
                  attr_reader :instrumentations
         | 
| 59 | 
            -
             | 
| 60 | 
            -
                  def initialize
         | 
| 61 | 
            -
                    @instrumentations = []
         | 
| 62 | 
            -
                  end
         | 
| 63 | 
            -
             | 
| 64 | 
            -
                  def instrument(name, env)
         | 
| 65 | 
            -
                    @instrumentations << [name, env]
         | 
| 66 | 
            -
                    yield
         | 
| 67 | 
            -
                  end
         | 
| 68 | 
            -
                end
         | 
| 69 | 
            -
             | 
| 70 | 
            -
                def options(hash = nil)
         | 
| 71 | 
            -
                  Faraday::Request::Instrumentation::Options.from hash
         | 
| 72 | 
            -
                end
         | 
| 73 | 
            -
             | 
| 74 | 
            -
                def conn(hash = nil)
         | 
| 75 | 
            -
                  hash ||= {}
         | 
| 76 | 
            -
                  hash[:instrumenter] = @instrumenter
         | 
| 77 | 
            -
             | 
| 78 | 
            -
                  Faraday.new do |f|
         | 
| 79 | 
            -
                    f.request :instrumentation, hash
         | 
| 80 | 
            -
                    f.adapter :test do |stub|
         | 
| 81 | 
            -
                      stub.get '/' do
         | 
| 82 | 
            -
                        [200, {}, 'ok']
         | 
| 83 | 
            -
                      end
         | 
| 84 | 
            -
                    end
         | 
| 85 | 
            -
                  end
         | 
| 86 | 
            -
                end
         | 
| 87 | 
            -
              end
         | 
| 88 | 
            -
            end
         | 
| @@ -1,177 +0,0 @@ | |
| 1 | 
            -
            require File.expand_path("../../helper", __FILE__)
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Middleware
         | 
| 4 | 
            -
              class RetryTest < Faraday::TestCase
         | 
| 5 | 
            -
                def setup
         | 
| 6 | 
            -
                  @times_called = 0
         | 
| 7 | 
            -
                end
         | 
| 8 | 
            -
             | 
| 9 | 
            -
                def conn(*retry_args)
         | 
| 10 | 
            -
                  Faraday.new do |b|
         | 
| 11 | 
            -
                    b.request :retry, *retry_args
         | 
| 12 | 
            -
                    b.adapter :test do |stub|
         | 
| 13 | 
            -
                      ['get', 'post'].each do |method|
         | 
| 14 | 
            -
                        stub.send(method, '/unstable') {
         | 
| 15 | 
            -
                          @times_called += 1
         | 
| 16 | 
            -
                          @explode.call @times_called
         | 
| 17 | 
            -
                        }
         | 
| 18 | 
            -
                      end
         | 
| 19 | 
            -
                    end
         | 
| 20 | 
            -
                  end
         | 
| 21 | 
            -
                end
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                def test_unhandled_error
         | 
| 24 | 
            -
                  @explode = lambda {|n| raise "boom!" }
         | 
| 25 | 
            -
                  assert_raises(RuntimeError) { conn.get("/unstable") }
         | 
| 26 | 
            -
                  assert_equal 1, @times_called
         | 
| 27 | 
            -
                end
         | 
| 28 | 
            -
             | 
| 29 | 
            -
                def test_handled_error
         | 
| 30 | 
            -
                  @explode = lambda {|n| raise Errno::ETIMEDOUT }
         | 
| 31 | 
            -
                  assert_raises(Errno::ETIMEDOUT) { conn.get("/unstable") }
         | 
| 32 | 
            -
                  assert_equal 3, @times_called
         | 
| 33 | 
            -
                end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                def test_legacy_max_retries
         | 
| 36 | 
            -
                  @explode = lambda {|n| raise Errno::ETIMEDOUT }
         | 
| 37 | 
            -
                  assert_raises(Errno::ETIMEDOUT) { conn(1).get("/unstable") }
         | 
| 38 | 
            -
                  assert_equal 2, @times_called
         | 
| 39 | 
            -
                end
         | 
| 40 | 
            -
             | 
| 41 | 
            -
                def test_legacy_max_negative_retries
         | 
| 42 | 
            -
                  @explode = lambda {|n| raise Errno::ETIMEDOUT }
         | 
| 43 | 
            -
                  assert_raises(Errno::ETIMEDOUT) { conn(-9).get("/unstable") }
         | 
| 44 | 
            -
                  assert_equal 1, @times_called
         | 
| 45 | 
            -
                end
         | 
| 46 | 
            -
             | 
| 47 | 
            -
                def test_new_max_retries
         | 
| 48 | 
            -
                  @explode = lambda {|n| raise Errno::ETIMEDOUT }
         | 
| 49 | 
            -
                  assert_raises(Errno::ETIMEDOUT) { conn(:max => 3).get("/unstable") }
         | 
| 50 | 
            -
                  assert_equal 4, @times_called
         | 
| 51 | 
            -
                end
         | 
| 52 | 
            -
             | 
| 53 | 
            -
                def test_new_max_negative_retries
         | 
| 54 | 
            -
                  @explode = lambda { |n| raise Errno::ETIMEDOUT }
         | 
| 55 | 
            -
                  assert_raises(Errno::ETIMEDOUT) { conn(:max => -9).get("/unstable") }
         | 
| 56 | 
            -
                  assert_equal 1, @times_called
         | 
| 57 | 
            -
                end
         | 
| 58 | 
            -
             | 
| 59 | 
            -
                def test_interval
         | 
| 60 | 
            -
                  @explode = lambda {|n| raise Errno::ETIMEDOUT }
         | 
| 61 | 
            -
                  started  = Time.now
         | 
| 62 | 
            -
                  assert_raises(Errno::ETIMEDOUT) {
         | 
| 63 | 
            -
                    conn(:max => 2, :interval => 0.1).get("/unstable")
         | 
| 64 | 
            -
                  }
         | 
| 65 | 
            -
                  assert_in_delta 0.2, Time.now - started, 0.04
         | 
| 66 | 
            -
                end
         | 
| 67 | 
            -
             | 
| 68 | 
            -
                def test_calls_sleep_amount
         | 
| 69 | 
            -
                  explode_app = MiniTest::Mock.new
         | 
| 70 | 
            -
                  explode_app.expect(:call, nil, [{:body=>nil}])
         | 
| 71 | 
            -
                  def explode_app.call(env)
         | 
| 72 | 
            -
                    raise Errno::ETIMEDOUT
         | 
| 73 | 
            -
                  end
         | 
| 74 | 
            -
             | 
| 75 | 
            -
                  retry_middleware = Faraday::Request::Retry.new(explode_app)
         | 
| 76 | 
            -
                  class << retry_middleware
         | 
| 77 | 
            -
                    attr_accessor :sleep_amount_retries
         | 
| 78 | 
            -
             | 
| 79 | 
            -
                    def sleep_amount(retries)
         | 
| 80 | 
            -
                      self.sleep_amount_retries.delete(retries)
         | 
| 81 | 
            -
                      0
         | 
| 82 | 
            -
                    end
         | 
| 83 | 
            -
                  end
         | 
| 84 | 
            -
                  retry_middleware.sleep_amount_retries = [2, 1]
         | 
| 85 | 
            -
             | 
| 86 | 
            -
                  assert_raises(Errno::ETIMEDOUT) {
         | 
| 87 | 
            -
                    retry_middleware.call({:method => :get})
         | 
| 88 | 
            -
                  }
         | 
| 89 | 
            -
             | 
| 90 | 
            -
                  assert_empty retry_middleware.sleep_amount_retries
         | 
| 91 | 
            -
                end
         | 
| 92 | 
            -
             | 
| 93 | 
            -
                def test_exponential_backoff
         | 
| 94 | 
            -
                  middleware = Faraday::Request::Retry.new(nil, :max => 5, :interval => 0.1, :backoff_factor => 2)
         | 
| 95 | 
            -
                  assert_equal middleware.sleep_amount(5), 0.1
         | 
| 96 | 
            -
                  assert_equal middleware.sleep_amount(4), 0.2
         | 
| 97 | 
            -
                  assert_equal middleware.sleep_amount(3), 0.4
         | 
| 98 | 
            -
                end
         | 
| 99 | 
            -
             | 
| 100 | 
            -
                def test_random_additional_interval_amount
         | 
| 101 | 
            -
                  middleware = Faraday::Request::Retry.new(nil, :max => 2, :interval => 0.1, :interval_randomness => 1.0)
         | 
| 102 | 
            -
                  sleep_amount = middleware.sleep_amount(2)
         | 
| 103 | 
            -
                  assert_operator sleep_amount, :>=, 0.1
         | 
| 104 | 
            -
                  assert_operator sleep_amount, :<=, 0.2
         | 
| 105 | 
            -
                  middleware = Faraday::Request::Retry.new(nil, :max => 2, :interval => 0.1, :interval_randomness => 0.5)
         | 
| 106 | 
            -
                  sleep_amount = middleware.sleep_amount(2)
         | 
| 107 | 
            -
                  assert_operator sleep_amount, :>=, 0.1
         | 
| 108 | 
            -
                  assert_operator sleep_amount, :<=, 0.15
         | 
| 109 | 
            -
                  middleware = Faraday::Request::Retry.new(nil, :max => 2, :interval => 0.1, :interval_randomness => 0.25)
         | 
| 110 | 
            -
                  sleep_amount = middleware.sleep_amount(2)
         | 
| 111 | 
            -
                  assert_operator sleep_amount, :>=, 0.1
         | 
| 112 | 
            -
                  assert_operator sleep_amount, :<=, 0.125
         | 
| 113 | 
            -
                end
         | 
| 114 | 
            -
             | 
| 115 | 
            -
                def test_custom_exceptions
         | 
| 116 | 
            -
                  @explode = lambda {|n| raise "boom!" }
         | 
| 117 | 
            -
                  assert_raises(RuntimeError) {
         | 
| 118 | 
            -
                    conn(:exceptions => StandardError).get("/unstable")
         | 
| 119 | 
            -
                  }
         | 
| 120 | 
            -
                  assert_equal 3, @times_called
         | 
| 121 | 
            -
                end
         | 
| 122 | 
            -
             | 
| 123 | 
            -
                def test_should_stop_retrying_if_block_returns_false_checking_env
         | 
| 124 | 
            -
                  @explode = lambda {|n| raise Errno::ETIMEDOUT }
         | 
| 125 | 
            -
                  check = lambda { |env,exception| env[:method] != :post }
         | 
| 126 | 
            -
                  assert_raises(Errno::ETIMEDOUT) {
         | 
| 127 | 
            -
                    conn(:retry_if => check).post("/unstable")
         | 
| 128 | 
            -
                  }
         | 
| 129 | 
            -
                  assert_equal 1, @times_called
         | 
| 130 | 
            -
                end
         | 
| 131 | 
            -
             | 
| 132 | 
            -
                def test_should_stop_retrying_if_block_returns_false_checking_exception
         | 
| 133 | 
            -
                  @explode = lambda {|n| raise Errno::ETIMEDOUT }
         | 
| 134 | 
            -
                  check = lambda { |env,exception| !exception.kind_of?(Errno::ETIMEDOUT) }
         | 
| 135 | 
            -
                  assert_raises(Errno::ETIMEDOUT) {
         | 
| 136 | 
            -
                    conn(:retry_if => check).post("/unstable")
         | 
| 137 | 
            -
                  }
         | 
| 138 | 
            -
                  assert_equal 1, @times_called
         | 
| 139 | 
            -
                end
         | 
| 140 | 
            -
             | 
| 141 | 
            -
                def test_should_not_call_retry_if_for_idempotent_methods_if_methods_unspecified
         | 
| 142 | 
            -
                  @explode = lambda {|n| raise Errno::ETIMEDOUT }
         | 
| 143 | 
            -
                  check = lambda { |env,exception| raise "this should have never been called" }
         | 
| 144 | 
            -
                  assert_raises(Errno::ETIMEDOUT) {
         | 
| 145 | 
            -
                    conn(:retry_if => check).get("/unstable")
         | 
| 146 | 
            -
                  }
         | 
| 147 | 
            -
                  assert_equal 3, @times_called
         | 
| 148 | 
            -
                end
         | 
| 149 | 
            -
             | 
| 150 | 
            -
                def test_should_not_retry_for_non_idempotent_method_if_methods_unspecified
         | 
| 151 | 
            -
                  @explode = lambda {|n| raise Errno::ETIMEDOUT }
         | 
| 152 | 
            -
                  assert_raises(Errno::ETIMEDOUT) {
         | 
| 153 | 
            -
                    conn.post("/unstable")
         | 
| 154 | 
            -
                  }
         | 
| 155 | 
            -
                  assert_equal 1, @times_called
         | 
| 156 | 
            -
                end
         | 
| 157 | 
            -
             | 
| 158 | 
            -
                def test_should_not_call_retry_if_for_specified_methods
         | 
| 159 | 
            -
                  @explode = lambda {|n| raise Errno::ETIMEDOUT }
         | 
| 160 | 
            -
                  check = lambda { |env,exception| raise "this should have never been called" }
         | 
| 161 | 
            -
                  assert_raises(Errno::ETIMEDOUT) {
         | 
| 162 | 
            -
                    conn(:retry_if => check, :methods => [:post]).post("/unstable")
         | 
| 163 | 
            -
                  }
         | 
| 164 | 
            -
                  assert_equal 3, @times_called
         | 
| 165 | 
            -
                end
         | 
| 166 | 
            -
             | 
| 167 | 
            -
                def test_should_call_retry_if_for_empty_method_list
         | 
| 168 | 
            -
                  @explode = lambda {|n| raise Errno::ETIMEDOUT }
         | 
| 169 | 
            -
                  check = lambda { |env,exception| @times_called < 2 }
         | 
| 170 | 
            -
                  assert_raises(Errno::ETIMEDOUT) {
         | 
| 171 | 
            -
                    conn(:retry_if => check, :methods => []).get("/unstable")
         | 
| 172 | 
            -
                  }
         | 
| 173 | 
            -
                  assert_equal 2, @times_called
         | 
| 174 | 
            -
                end
         | 
| 175 | 
            -
             | 
| 176 | 
            -
              end
         | 
| 177 | 
            -
            end
         |