faraday 0.9.0 → 0.9.2

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.
Files changed (61) hide show
  1. data/LICENSE.md +1 -1
  2. data/README.md +52 -23
  3. data/lib/faraday.rb +1 -1
  4. data/lib/faraday/adapter/em_synchrony.rb +8 -0
  5. data/lib/faraday/adapter/excon.rb +1 -0
  6. data/lib/faraday/adapter/httpclient.rb +14 -3
  7. data/lib/faraday/adapter/net_http.rb +26 -20
  8. data/lib/faraday/adapter/net_http_persistent.rb +5 -3
  9. data/lib/faraday/adapter/patron.rb +13 -3
  10. data/lib/faraday/autoload.rb +0 -1
  11. data/lib/faraday/connection.rb +8 -3
  12. data/lib/faraday/options.rb +9 -0
  13. data/lib/faraday/parameters.rb +62 -58
  14. data/lib/faraday/rack_builder.rb +3 -2
  15. data/lib/faraday/request/retry.rb +40 -4
  16. data/lib/faraday/response.rb +2 -2
  17. data/lib/faraday/response/logger.rb +26 -1
  18. data/lib/faraday/utils.rb +13 -1
  19. metadata +61 -120
  20. checksums.yaml +0 -7
  21. data/.document +0 -6
  22. data/CHANGELOG.md +0 -15
  23. data/CONTRIBUTING.md +0 -36
  24. data/Gemfile +0 -29
  25. data/Rakefile +0 -71
  26. data/faraday.gemspec +0 -34
  27. data/script/console +0 -7
  28. data/script/generate_certs +0 -42
  29. data/script/package +0 -7
  30. data/script/proxy-server +0 -42
  31. data/script/release +0 -17
  32. data/script/server +0 -36
  33. data/script/test +0 -172
  34. data/test/adapters/default_test.rb +0 -14
  35. data/test/adapters/em_http_test.rb +0 -20
  36. data/test/adapters/em_synchrony_test.rb +0 -20
  37. data/test/adapters/excon_test.rb +0 -20
  38. data/test/adapters/httpclient_test.rb +0 -21
  39. data/test/adapters/integration.rb +0 -254
  40. data/test/adapters/logger_test.rb +0 -37
  41. data/test/adapters/net_http_persistent_test.rb +0 -20
  42. data/test/adapters/net_http_test.rb +0 -14
  43. data/test/adapters/patron_test.rb +0 -20
  44. data/test/adapters/rack_test.rb +0 -31
  45. data/test/adapters/test_middleware_test.rb +0 -114
  46. data/test/adapters/typhoeus_test.rb +0 -28
  47. data/test/authentication_middleware_test.rb +0 -65
  48. data/test/composite_read_io_test.rb +0 -111
  49. data/test/connection_test.rb +0 -522
  50. data/test/env_test.rb +0 -210
  51. data/test/helper.rb +0 -81
  52. data/test/live_server.rb +0 -67
  53. data/test/middleware/instrumentation_test.rb +0 -88
  54. data/test/middleware/retry_test.rb +0 -109
  55. data/test/middleware_stack_test.rb +0 -173
  56. data/test/multibyte.txt +0 -1
  57. data/test/options_test.rb +0 -252
  58. data/test/request_middleware_test.rb +0 -142
  59. data/test/response_middleware_test.rb +0 -72
  60. data/test/strawberry.rb +0 -2
  61. data/test/utils_test.rb +0 -58
data/.document DELETED
@@ -1,6 +0,0 @@
1
- CONTRIBUTING.md
2
- LICENSE.md
3
- README.md
4
- bin/*
5
- lib/**/*.rb
6
- test/**/*.rb
data/CHANGELOG.md DELETED
@@ -1,15 +0,0 @@
1
- # Faraday Changelog
2
-
3
- ## v0.9.0
4
-
5
- * Add HTTPClient adapter (@hakanensari)
6
- * Improve Retry handler (@mislav)
7
- * Remove autoloading by default (@technoweenie)
8
- * Improve internal docs (@technoweenie, @mislav)
9
- * Respect user/password in http proxy string (@mislav)
10
- * Adapter options are structs. Reinforces consistent options across adapters
11
- (@technoweenie)
12
- * Stop stripping trailing / off base URLs in a Faraday::Connection. (@technoweenie)
13
- * Add a configurable URI parser. (@technoweenie)
14
- * Remove need to manually autoload when using the authorization header helpers on `Faraday::Connection`. (@technoweenie)
15
- * `Faraday::Adapter::Test` respects the `Faraday::RequestOptions#params_encoder` option. (@technoweenie)
data/CONTRIBUTING.md DELETED
@@ -1,36 +0,0 @@
1
- ## Contributing
2
-
3
- You can run the test suite against a live server by running `script/test`. It
4
- automatically starts a test server in background. Only tests in
5
- `test/adapters/*_test.rb` require a server, though.
6
-
7
- ``` sh
8
- # run the whole suite
9
- $ script/test
10
-
11
- # run only specific files
12
- $ script/test excon typhoeus
13
-
14
- # run tests using SSL
15
- $ SSL=yes script/test
16
- ```
17
-
18
- We will accept middleware that:
19
-
20
- 1. is useful to a broader audience, but can be implemented relatively
21
- simple; and
22
- 2. which isn't already present in [faraday_middleware][] project.
23
-
24
- We will accept adapters that:
25
-
26
- 1. support SSL & streaming;
27
- 1. are proven and may have better performance than existing ones; or
28
- 2. if they have features not present in included adapters.
29
-
30
- We are pushing towards a 1.0 release, when we will have to follow [Semantic
31
- Versioning][semver]. If your patch includes changes to break compatiblitity,
32
- note that so we can add it to the [Changelog][].
33
-
34
- [semver]: http://semver.org/
35
- [changelog]: https://github.com/technoweenie/faraday/wiki/Changelog
36
- [faraday_middleware]: https://github.com/pengwynn/faraday_middleware/wiki
data/Gemfile DELETED
@@ -1,29 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'ffi-ncurses', '~> 0.3', :platforms => :jruby
4
- gem 'jruby-openssl', '~> 0.8.8', :platforms => :jruby
5
- gem 'rake'
6
-
7
- group :test do
8
- gem 'coveralls', :require => false
9
- gem 'em-http-request', '>= 1.1', :require => 'em-http'
10
- gem 'em-synchrony', '>= 1.0.3', :require => ['em-synchrony', 'em-synchrony/em-http']
11
- gem 'excon', '>= 0.27.4'
12
- gem 'httpclient', '>= 2.2'
13
- gem 'leftright', '>= 0.9', :require => false
14
- gem 'mime-types', '~> 1.25', :platforms => [:jruby, :ruby_18]
15
- gem 'minitest', '>= 5.0.5'
16
- gem 'net-http-persistent', '>= 2.5', :require => false
17
- gem 'patron', '>= 0.4.2', :platforms => :ruby
18
- gem 'rack-test', '>= 0.6', :require => 'rack/test'
19
- gem 'simplecov'
20
- gem 'sinatra', '~> 1.3'
21
- gem 'typhoeus', '~> 0.3.3', :platforms => :ruby
22
- end
23
-
24
- platforms :rbx do
25
- gem 'rubinius-coverage'
26
- gem 'rubysl'
27
- end
28
-
29
- gemspec
data/Rakefile DELETED
@@ -1,71 +0,0 @@
1
- require 'date'
2
- require 'fileutils'
3
- require 'openssl'
4
- require 'rake/testtask'
5
- require 'bundler'
6
- Bundler::GemHelper.install_tasks
7
-
8
- task :default => :test
9
-
10
- ## helper functions
11
-
12
- def name
13
- @name ||= Dir['*.gemspec'].first.split('.').first
14
- end
15
-
16
- def version
17
- line = File.read("lib/#{name}.rb")[/^\s*VERSION\s*=\s*.*/]
18
- line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
19
- end
20
-
21
- def gemspec_file
22
- "#{name}.gemspec"
23
- end
24
-
25
- def gem_file
26
- "#{name}-#{version}.gem"
27
- end
28
-
29
- def replace_header(head, header_name)
30
- head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
31
- end
32
-
33
- # Adapted from WEBrick::Utils. Skips cert extensions so it
34
- # can be used as a CA bundle
35
- def create_self_signed_cert(bits, cn, comment)
36
- rsa = OpenSSL::PKey::RSA.new(bits)
37
- cert = OpenSSL::X509::Certificate.new
38
- cert.version = 2
39
- cert.serial = 1
40
- name = OpenSSL::X509::Name.new(cn)
41
- cert.subject = name
42
- cert.issuer = name
43
- cert.not_before = Time.now
44
- cert.not_after = Time.now + (365*24*60*60)
45
- cert.public_key = rsa.public_key
46
- cert.sign(rsa, OpenSSL::Digest::SHA1.new)
47
- return [cert, rsa]
48
- end
49
-
50
- ## standard tasks
51
-
52
- desc "Run all tests"
53
- task :test do
54
- exec 'script/test'
55
- end
56
-
57
- desc "Generate certificates for SSL tests"
58
- task :'test:generate_certs' do
59
- cert, key = create_self_signed_cert(1024, [['CN', 'localhost']], 'Faraday Test CA')
60
- FileUtils.mkdir_p 'tmp'
61
- File.open('tmp/faraday-cert.key', 'w') {|f| f.puts(key) }
62
- File.open('tmp/faraday-cert.crt', 'w') {|f| f.puts(cert.to_s) }
63
- end
64
-
65
- file 'tmp/faraday-cert.key' => :'test:generate_certs'
66
- file 'tmp/faraday-cert.crt' => :'test:generate_certs'
67
-
68
- desc "Open an irb session preloaded with this library"
69
- task :console do
70
- sh "irb -rubygems -r ./lib/#{name}.rb"
71
- end
data/faraday.gemspec DELETED
@@ -1,34 +0,0 @@
1
- lib = "faraday"
2
- lib_file = File.expand_path("../lib/#{lib}.rb", __FILE__)
3
- File.read(lib_file) =~ /\bVERSION\s*=\s*["'](.+?)["']/
4
- version = $1
5
-
6
- Gem::Specification.new do |spec|
7
- spec.specification_version = 2 if spec.respond_to? :specification_version=
8
- spec.required_rubygems_version = '>= 1.3.5'
9
-
10
- spec.name = lib
11
- spec.version = version
12
-
13
- spec.summary = "HTTP/REST API client library."
14
-
15
- spec.authors = ["Rick Olson"]
16
- spec.email = 'technoweenie@gmail.com'
17
- spec.homepage = 'https://github.com/lostisland/faraday'
18
- spec.licenses = ['MIT']
19
-
20
- spec.add_dependency 'multipart-post', '>= 1.2', '< 3'
21
- spec.add_development_dependency 'bundler', '~> 1.0'
22
-
23
- spec.files = %w(.document CHANGELOG.md CONTRIBUTING.md Gemfile LICENSE.md README.md Rakefile)
24
- spec.files << "#{lib}.gemspec"
25
- spec.files += Dir.glob("lib/**/*.rb")
26
- spec.files += Dir.glob("test/**/*.{rb,txt}")
27
- spec.files += Dir.glob("script/*")
28
-
29
- dev_null = File.exist?('/dev/null') ? '/dev/null' : 'NUL'
30
- git_files = `git ls-files -z 2>#{dev_null}`
31
- spec.files &= git_files.split("\0") if $?.success?
32
-
33
- spec.test_files = Dir.glob("test/**/*.rb")
34
- end
data/script/console DELETED
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Usage: script/console
3
- # Starts an IRB console with this library loaded.
4
-
5
- gemspec="$(ls *.gemspec | head -1)"
6
-
7
- exec bundle exec irb -r "${gemspec%.*}"
@@ -1,42 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # Usage: generate_certs
3
- # Generate test certs for testing Faraday with SSL
4
-
5
- require 'openssl'
6
- require 'fileutils'
7
-
8
- $shell = ARGV.include? '-s'
9
-
10
- # Adapted from WEBrick::Utils. Skips cert extensions so it
11
- # can be used as a CA bundle
12
- def create_self_signed_cert(bits, cn, comment)
13
- rsa = OpenSSL::PKey::RSA.new(bits)
14
- cert = OpenSSL::X509::Certificate.new
15
- cert.version = 2
16
- cert.serial = 1
17
- name = OpenSSL::X509::Name.new(cn)
18
- cert.subject = name
19
- cert.issuer = name
20
- cert.not_before = Time.now
21
- cert.not_after = Time.now + (365*24*60*60)
22
- cert.public_key = rsa.public_key
23
- cert.sign(rsa, OpenSSL::Digest::SHA1.new)
24
- return [cert, rsa]
25
- end
26
-
27
- def write(file, contents, env_var)
28
- FileUtils.mkdir_p(File.dirname(file))
29
- File.open(file, 'w') {|f| f.puts(contents) }
30
- puts %(export #{env_var}="#{file}") if $shell
31
- end
32
-
33
-
34
- # One cert / CA for ease of testing when ignoring verification
35
- cert, key = create_self_signed_cert(1024, [['CN', 'localhost']], 'Faraday Test CA')
36
- write 'tmp/faraday-cert.key', key, 'SSL_KEY'
37
- write 'tmp/faraday-cert.crt', cert, 'SSL_FILE'
38
-
39
- # And a second CA to prove that verification can fail
40
- cert, key = create_self_signed_cert(1024, [['CN', 'real-ca.com']], 'A different CA')
41
- write 'tmp/faraday-different-ca-cert.key', key, 'SSL_KEY_ALT'
42
- write 'tmp/faraday-different-ca-cert.crt', cert, 'SSL_FILE_ALT'
data/script/package DELETED
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Usage: script/gem
3
- # Updates the gemspec and builds a new gem in the pkg directory.
4
-
5
- mkdir -p pkg
6
- gem build *.gemspec
7
- mv *.gem pkg
data/script/proxy-server DELETED
@@ -1,42 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # Usage: script/proxy-server [-p PORT] [-u USER:PASSWORD]
3
- require 'webrick'
4
- require 'webrick/httpproxy'
5
-
6
- port = 4001
7
-
8
- if found = ARGV.index('-p')
9
- port = ARGV[found + 1].to_i
10
- end
11
- if found = ARGV.index('-u')
12
- username, password = ARGV[found + 1].split(':', 2)
13
- end
14
-
15
- match_credentials = lambda { |credentials|
16
- got_username, got_password = credentials.to_s.unpack("m*")[0].split(":", 2)
17
- got_username == username && got_password == password
18
- }
19
-
20
- log_io = $stdout
21
- log_io.sync = true
22
-
23
- webrick_opts = {
24
- :Port => port, :Logger => WEBrick::Log::new(log_io),
25
- :AccessLog => [[log_io, "[%{X-Faraday-Adapter}i] %m %U -> %s %b"]],
26
- :ProxyAuthProc => lambda { |req, res|
27
- if username
28
- type, credentials = req.header['proxy-authorization'].first.to_s.split(/\s+/, 2)
29
- unless "Basic" == type && match_credentials.call(credentials)
30
- res['proxy-authenticate'] = %{Basic realm="testing"}
31
- raise WEBrick::HTTPStatus::ProxyAuthenticationRequired
32
- end
33
- end
34
- }
35
- }
36
-
37
- proxy = WEBrick::HTTPProxyServer.new(webrick_opts)
38
-
39
- trap(:TERM) { proxy.shutdown }
40
- trap(:INT) { proxy.shutdown }
41
-
42
- proxy.start
data/script/release DELETED
@@ -1,17 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Usage: script/release
3
- # Build the package, tag a commit, push it to origin, and then release the
4
- # package publicly.
5
-
6
- set -e
7
-
8
- version="$(script/package | grep Version: | awk '{print $2}')"
9
- [ -n "$version" ] || exit 1
10
-
11
- git commit --allow-empty -a -m "Release $version"
12
- git tag "v$version"
13
- git push origin
14
- git push origin "v$version"
15
- git push legacy
16
- git push legacy "v$version"
17
- gem push pkg/*-${version}.gem
data/script/server DELETED
@@ -1,36 +0,0 @@
1
- #!/usr/bin/env ruby
2
- old_verbose, $VERBOSE = $VERBOSE, nil
3
- begin
4
- require File.expand_path('../../test/live_server', __FILE__)
5
- ensure
6
- $VERBOSE = old_verbose
7
- end
8
- require 'webrick'
9
-
10
- port = 4000
11
- if found = ARGV.index('-p')
12
- port = ARGV[found + 1].to_i
13
- end
14
-
15
- log_io = $stdout
16
- log_io.sync = true
17
-
18
- webrick_opts = {
19
- :Port => port, :Logger => WEBrick::Log::new(log_io),
20
- :AccessLog => [[log_io, "[%{X-Faraday-Adapter}i] %m %U -> %s %b"]]
21
- }
22
-
23
- if ENV['SSL_KEY']
24
- require 'openssl'
25
- require 'webrick/https'
26
- webrick_opts.update \
27
- :SSLEnable => true,
28
- :SSLPrivateKey => OpenSSL::PKey::RSA.new(File.read(ENV['SSL_KEY'])),
29
- :SSLCertificate => OpenSSL::X509::Certificate.new(File.read(ENV['SSL_FILE'])),
30
- :SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE
31
- end
32
-
33
- Rack::Handler::WEBrick.run(Faraday::LiveServer, webrick_opts) do |server|
34
- trap(:INT) { server.stop }
35
- trap(:TERM) { server.stop }
36
- end
data/script/test DELETED
@@ -1,172 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Usage: script/test [file] [adapter]... -- [test/unit options]
3
- # Runs the test suite against a local server spawned automatically in a
4
- # thread. After tests are done, the server is shut down.
5
- #
6
- # If filename arguments are given, only those files are run. If arguments given
7
- # are not filenames, they are taken as words that filter the list of files to run.
8
- #
9
- # Examples:
10
- #
11
- # $ script/test
12
- # $ script/test test/env_test.rb
13
- # $ script/test excon typhoeus
14
- #
15
- # # Run only tests matching /ssl/ for the net_http adapter, with SSL enabled.
16
- # $ SSL=yes script/test net_http -- -n /ssl/
17
- #
18
- # # Run against multiple rbenv versions
19
- # $ RBENV_VERSIONS="1.9.3-p194 ree-1.8.7-2012.02" script/test
20
- set -e
21
-
22
- if [[ "$RUBYOPT" != *"bundler/setup"* ]]; then
23
- export RUBYOPT="-rbundler/setup $RUBYOPT"
24
- fi
25
-
26
- port=3999
27
- proxy_port=3998
28
- scheme=http
29
-
30
- if [ "$SSL" = "yes" ]; then
31
- scheme=https
32
- if [ -z "$SSL_KEY" ] || [ -z "$SSL_FILE" ]; then
33
- eval "$(script/generate_certs -s)"
34
- fi
35
- fi
36
-
37
- find_test_files() {
38
- find "$1" -name '*_test.rb'
39
- }
40
-
41
- filter_matching() {
42
- pattern="$1"
43
- shift
44
- for line in "$@"; do
45
- [[ $line == *"$pattern"* ]] && echo "$line"
46
- done
47
- }
48
-
49
- start_server() {
50
- mkdir -p log
51
- script/server -p $port >log/test.log 2>&1 &
52
- echo $!
53
- }
54
-
55
- start_proxy() {
56
- mkdir -p log
57
- script/proxy-server -p $proxy_port -u "faraday@test.local:there is cake" >log/proxy.log 2>&1 &
58
- echo $!
59
- }
60
-
61
- server_started() {
62
- lsof -i :${1?} >/dev/null
63
- }
64
-
65
- timestamp() {
66
- date +%s
67
- }
68
-
69
- wait_for_server() {
70
- timeout=$(( `timestamp` + $1 ))
71
- while true; do
72
- if server_started "$2"; then
73
- break
74
- elif [ `timestamp` -gt "$timeout" ]; then
75
- echo "timed out after $1 seconds" >&2
76
- return 1
77
- fi
78
- done
79
- }
80
-
81
- filtered=
82
- IFS=$'\n' test_files=($(find_test_files "test"))
83
- declare -a explicit_files
84
-
85
- # Process filter arguments:
86
- # - test filenames as taken as-is
87
- # - other words are taken as pattern to match the list of known files against
88
- # - arguments after "--" are forwarded to the ruby process
89
- while [ $# -gt 0 ]; do
90
- arg="$1"
91
- shift
92
- if [ "$arg" = "--" ]; then
93
- break
94
- elif [ -f "$arg" ]; then
95
- filtered=true
96
- explicit_files[${#explicit_files[@]}+1]="$arg"
97
- else
98
- filtered=true
99
- IFS=$'\n' explicit_files=(
100
- ${explicit_files[@]}
101
- $(filter_matching "$arg" "${test_files[@]}" || true)
102
- )
103
- fi
104
- done
105
-
106
- # If there were filter args, replace test files list with the results
107
- if [ -n "$filtered" ]; then
108
- if [ ${#explicit_files[@]} -eq 0 ]; then
109
- echo "Error: no test files match" >&2
110
- exit 1
111
- else
112
- test_files=(${explicit_files[@]})
113
- echo running "${test_files[@]}"
114
- fi
115
- fi
116
-
117
- # If there are any adapter tests, spin up the HTTP server
118
- if [ -n "$(filter_matching "adapters" "${test_files[@]}")" ]; then
119
- if server_started $port; then
120
- echo "aborted: another instance of server running on $port" >&2
121
- exit 1
122
- fi
123
- server_pid=$(start_server)
124
- proxy_pid=$(start_proxy)
125
- wait_for_server 30 $port || {
126
- cat log/test.log
127
- kill "$server_pid"
128
- kill "$proxy_pid"
129
- exit 1
130
- }
131
- wait_for_server 5 $proxy_port
132
- cleanup() {
133
- if [ $? -ne 0 ] && [ -n "$TRAVIS" ]; then
134
- cat log/test.log
135
- fi
136
- kill "$server_pid"
137
- kill "$proxy_pid"
138
- }
139
- trap cleanup INT EXIT
140
- export LIVE="${scheme}://localhost:${port}"
141
- export LIVE_PROXY="http://faraday%40test.local:there%20is%20cake@localhost:${proxy_port}"
142
- fi
143
-
144
- warnings="${TMPDIR:-/tmp}/faraday-warnings.$$"
145
-
146
- run_test_files() {
147
- # Save warnings on stderr to a separate file
148
- RUBYOPT="$RUBYOPT -w" ruby -e 'while f=ARGV.shift and f!="--"; load f; end' "${test_files[@]}" -- "$@" \
149
- 2> >(tee >(grep 'warning:' >"$warnings") | grep -v 'warning:')
150
- }
151
-
152
- check_warnings() {
153
- # Display Ruby warnings from this project's source files. Abort if any were found.
154
- num="$(grep -F "$PWD" "$warnings" | grep -v "${PWD}/bundle" | sort | uniq -c | sort -rn | tee /dev/stderr | wc -l)"
155
- rm -f "$warnings"
156
- if [ "$num" -gt 0 ]; then
157
- echo "FAILED: this test suite doesn't tolerate Ruby syntax warnings!" >&2
158
- exit 1
159
- fi
160
- }
161
-
162
- if [ -n "$RBENV_VERSIONS" ]; then
163
- IFS=' ' versions=($RBENV_VERSIONS)
164
- for version in "${versions[@]}"; do
165
- echo "[${version}]"
166
- RBENV_VERSION="$version" run_test_files "$@"
167
- done
168
- else
169
- run_test_files "$@"
170
- fi
171
-
172
- check_warnings