faraday 0.9.1 → 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 (62) hide show
  1. data/LICENSE.md +1 -1
  2. data/README.md +41 -16
  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 +2 -2
  8. data/lib/faraday/adapter/net_http_persistent.rb +2 -1
  9. data/lib/faraday/adapter/patron.rb +8 -2
  10. data/lib/faraday/connection.rb +8 -3
  11. data/lib/faraday/options.rb +9 -0
  12. data/lib/faraday/parameters.rb +54 -38
  13. data/lib/faraday/rack_builder.rb +3 -2
  14. data/lib/faraday/request/retry.rb +9 -3
  15. data/lib/faraday/response.rb +2 -2
  16. data/lib/faraday/utils.rb +13 -1
  17. metadata +61 -124
  18. checksums.yaml +0 -7
  19. data/.document +0 -6
  20. data/CHANGELOG.md +0 -20
  21. data/CONTRIBUTING.md +0 -36
  22. data/Gemfile +0 -25
  23. data/Rakefile +0 -71
  24. data/faraday.gemspec +0 -34
  25. data/script/cached-bundle +0 -46
  26. data/script/console +0 -7
  27. data/script/generate_certs +0 -42
  28. data/script/package +0 -7
  29. data/script/proxy-server +0 -42
  30. data/script/release +0 -17
  31. data/script/s3-put +0 -71
  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 -82
  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 -218
  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 -177
  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/parameters_test.rb +0 -64
  59. data/test/request_middleware_test.rb +0 -142
  60. data/test/response_middleware_test.rb +0 -72
  61. data/test/strawberry.rb +0 -2
  62. data/test/utils_test.rb +0 -58
@@ -1,46 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Usage: cached-bundle install --deployment
3
- #
4
- # After running `bundle`, caches the `./bundle` directory to S3.
5
- # On the next run, restores the cached directory before running `bundle`.
6
- # When `Gemfile` changes, the cache gets rebuilt.
7
- #
8
- # Requirements:
9
- # - Gemfile
10
- # - TRAVIS_REPO_SLUG
11
- # - TRAVIS_RUBY_VERSION
12
- # - AMAZON_S3_BUCKET
13
- # - script/s3-put
14
- # - bundle
15
- # - curl
16
- #
17
- # Author: Mislav Marohnić
18
-
19
- set -e
20
-
21
- compute_md5() {
22
- local output="$(openssl md5)"
23
- echo "${output##* }"
24
- }
25
-
26
- download() {
27
- curl --tcp-nodelay -qsfL "$1" -o "$2"
28
- }
29
-
30
- bundle_path="bundle"
31
- gemfile_hash="$(compute_md5 <"${BUNDLE_GEMFILE:-Gemfile}")"
32
- cache_name="${TRAVIS_RUBY_VERSION}-${gemfile_hash}.tgz"
33
- fetch_url="http://${AMAZON_S3_BUCKET}.s3.amazonaws.com/${TRAVIS_REPO_SLUG}/${cache_name}"
34
-
35
- if download "$fetch_url" "$cache_name"; then
36
- echo "Reusing cached bundle ${cache_name}"
37
- tar xzf "$cache_name"
38
- fi
39
-
40
- bundle "$@"
41
-
42
- if [ ! -f "$cache_name" ] && [ -n "$AMAZON_SECRET_ACCESS_KEY" ]; then
43
- echo "Caching \`${bundle_path}' to S3"
44
- tar czf "$cache_name" "$bundle_path"
45
- script/s3-put "$cache_name" "${AMAZON_S3_BUCKET}:${TRAVIS_REPO_SLUG}/${cache_name}"
46
- fi
@@ -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'
@@ -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
@@ -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
@@ -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
@@ -1,71 +0,0 @@
1
- #!/usr/bin/env bash
2
- # Usage: s3-put <FILE> <S3_BUCKET>[:<PATH>] [<CONTENT_TYPE>]
3
- #
4
- # Uploads a file to the Amazon S3 service.
5
- # Outputs the URL for the newly uploaded file.
6
- #
7
- # Requirements:
8
- # - AMAZON_ACCESS_KEY_ID
9
- # - AMAZON_SECRET_ACCESS_KEY
10
- # - openssl
11
- # - curl
12
- #
13
- # Author: Mislav Marohnić
14
-
15
- set -e
16
-
17
- authorization() {
18
- local signature="$(string_to_sign | hmac_sha1 | base64)"
19
- echo "AWS ${AMAZON_ACCESS_KEY_ID?}:${signature}"
20
- }
21
-
22
- hmac_sha1() {
23
- openssl dgst -binary -sha1 -hmac "${AMAZON_SECRET_ACCESS_KEY?}"
24
- }
25
-
26
- base64() {
27
- openssl enc -base64
28
- }
29
-
30
- bin_md5() {
31
- openssl dgst -binary -md5
32
- }
33
-
34
- string_to_sign() {
35
- echo "$http_method"
36
- echo "$content_md5"
37
- echo "$content_type"
38
- echo "$date"
39
- echo "x-amz-acl:$acl"
40
- printf "/$bucket/$remote_path"
41
- }
42
-
43
- date_string() {
44
- LC_TIME=C date "+%a, %d %h %Y %T %z"
45
- }
46
-
47
- file="$1"
48
- bucket="${2%%:*}"
49
- remote_path="${2#*:}"
50
- content_type="$3"
51
-
52
- if [ -z "$remote_path" ] || [ "$remote_path" = "$bucket" ]; then
53
- remote_path="${file##*/}"
54
- fi
55
-
56
- http_method=PUT
57
- acl="public-read"
58
- content_md5="$(bin_md5 < "$file" | base64)"
59
- date="$(date_string)"
60
-
61
- url="https://$bucket.s3.amazonaws.com/$remote_path"
62
-
63
- curl -qsSf -T "$file" \
64
- -H "Authorization: $(authorization)" \
65
- -H "x-amz-acl: $acl" \
66
- -H "Date: $date" \
67
- -H "Content-MD5: $content_md5" \
68
- -H "Content-Type: $content_type" \
69
- "$url"
70
-
71
- echo "$url"
@@ -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
@@ -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