http 2.2.2 → 3.0.0.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +46 -13
  3. data/.travis.yml +17 -12
  4. data/CHANGES.md +25 -1
  5. data/Gemfile +11 -4
  6. data/Guardfile +2 -0
  7. data/README.md +4 -5
  8. data/Rakefile +14 -13
  9. data/http.gemspec +3 -1
  10. data/lib/http.rb +1 -0
  11. data/lib/http/chainable.rb +15 -14
  12. data/lib/http/client.rb +27 -24
  13. data/lib/http/connection.rb +6 -4
  14. data/lib/http/content_type.rb +1 -0
  15. data/lib/http/errors.rb +3 -2
  16. data/lib/http/feature.rb +2 -1
  17. data/lib/http/features/auto_deflate.rb +77 -20
  18. data/lib/http/features/auto_inflate.rb +2 -1
  19. data/lib/http/headers.rb +3 -2
  20. data/lib/http/headers/known.rb +23 -22
  21. data/lib/http/headers/mixin.rb +1 -0
  22. data/lib/http/mime_type.rb +1 -0
  23. data/lib/http/mime_type/adapter.rb +2 -1
  24. data/lib/http/mime_type/json.rb +2 -1
  25. data/lib/http/options.rb +15 -12
  26. data/lib/http/redirector.rb +4 -3
  27. data/lib/http/request.rb +25 -10
  28. data/lib/http/request/body.rb +67 -0
  29. data/lib/http/request/writer.rb +32 -37
  30. data/lib/http/response.rb +17 -2
  31. data/lib/http/response/body.rb +16 -12
  32. data/lib/http/response/parser.rb +1 -0
  33. data/lib/http/response/status.rb +1 -0
  34. data/lib/http/response/status/reasons.rb +1 -0
  35. data/lib/http/timeout/global.rb +1 -0
  36. data/lib/http/timeout/null.rb +2 -1
  37. data/lib/http/timeout/per_operation.rb +19 -6
  38. data/lib/http/uri.rb +8 -2
  39. data/lib/http/version.rb +1 -1
  40. data/spec/lib/http/client_spec.rb +104 -4
  41. data/spec/lib/http/content_type_spec.rb +1 -0
  42. data/spec/lib/http/features/auto_deflate_spec.rb +32 -64
  43. data/spec/lib/http/features/auto_inflate_spec.rb +1 -0
  44. data/spec/lib/http/headers/mixin_spec.rb +1 -0
  45. data/spec/lib/http/headers_spec.rb +36 -35
  46. data/spec/lib/http/options/body_spec.rb +1 -0
  47. data/spec/lib/http/options/features_spec.rb +1 -0
  48. data/spec/lib/http/options/form_spec.rb +1 -0
  49. data/spec/lib/http/options/headers_spec.rb +2 -1
  50. data/spec/lib/http/options/json_spec.rb +1 -0
  51. data/spec/lib/http/options/new_spec.rb +2 -1
  52. data/spec/lib/http/options/proxy_spec.rb +1 -0
  53. data/spec/lib/http/options_spec.rb +1 -0
  54. data/spec/lib/http/redirector_spec.rb +1 -0
  55. data/spec/lib/http/request/body_spec.rb +138 -0
  56. data/spec/lib/http/request/writer_spec.rb +44 -74
  57. data/spec/lib/http/request_spec.rb +14 -0
  58. data/spec/lib/http/response/body_spec.rb +20 -4
  59. data/spec/lib/http/response/status_spec.rb +27 -26
  60. data/spec/lib/http/response_spec.rb +10 -0
  61. data/spec/lib/http/uri_spec.rb +11 -0
  62. data/spec/lib/http_spec.rb +18 -6
  63. data/spec/regression_specs.rb +1 -0
  64. data/spec/spec_helper.rb +1 -0
  65. data/spec/support/black_hole.rb +9 -2
  66. data/spec/support/capture_warning.rb +1 -0
  67. data/spec/support/dummy_server.rb +2 -1
  68. data/spec/support/dummy_server/servlet.rb +1 -1
  69. data/spec/support/fakeio.rb +21 -0
  70. data/spec/support/http_handling_shared.rb +1 -0
  71. data/spec/support/proxy_server.rb +1 -0
  72. data/spec/support/servers/config.rb +1 -0
  73. data/spec/support/servers/runner.rb +1 -0
  74. data/spec/support/ssl_helper.rb +3 -2
  75. metadata +20 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 66bda3b695b673507461ef5f59bc3d14a145fc78
4
- data.tar.gz: 69c82f1484defda8becec34ef76caf0a59e2d378
3
+ metadata.gz: 4d74f7b02faf0fd77fd72d958ebcff214296aeca
4
+ data.tar.gz: 97f8a4bead5243682c117e8e54cf9f11edcef626
5
5
  SHA512:
6
- metadata.gz: c1149d111a7b16ea0d02c30a5a5126c393ea86cda749341a2056c17cf5c5004ee1bb3faf416c9bc483d28771c7c0ad9af349a866bd209a394460b579561142be
7
- data.tar.gz: 7e3a46cf89a76a1ff557f40740f3aa851a8dd3e9bc44f64146f62db7db4839f21fb5efce9aaf88826945c85d97820bfa7574bc8aea21a0e6551d7195120d5e51
6
+ metadata.gz: 6d1136aa3733a3c8873d084b09282268e60c1f6b0fe46393b31423eab90cd4c72ff321cede0d18f720ad6d8d1e712997f617f27a352815d3785058a7323b86d0
7
+ data.tar.gz: 6a678e67514d00cdf8d707f269d54a7f6c9f6a4dc0985603d2a117fe78691e5c73d7e5ae8a260b27816c01e1b1df960160310b31d64ae8474fe0bce52bce82d1
@@ -1,6 +1,26 @@
1
1
  AllCops:
2
2
  DisplayCopNames: true
3
3
 
4
+ ## Layout ######################################################################
5
+
6
+ Layout/DotPosition:
7
+ EnforcedStyle: trailing
8
+
9
+ Layout/SpaceAroundOperators:
10
+ AllowForAlignment: true
11
+
12
+ Layout/SpaceInsideHashLiteralBraces:
13
+ EnforcedStyle: no_space
14
+
15
+ ## Metrics #####################################################################
16
+
17
+ Metrics/AbcSize:
18
+ Enabled: false
19
+
20
+ Metrics/BlockLength:
21
+ Exclude:
22
+ - spec/**/*
23
+
4
24
  Metrics/BlockNesting:
5
25
  Max: 2
6
26
 
@@ -8,19 +28,22 @@ Metrics/ClassLength:
8
28
  CountComments: false
9
29
  Max: 125
10
30
 
11
- Metrics/PerceivedComplexity:
31
+ # TODO: Lower to 6
32
+ Metrics/CyclomaticComplexity:
12
33
  Max: 8
13
34
 
14
- Metrics/CyclomaticComplexity:
15
- Max: 8 # TODO: Lower to 6
35
+ Metrics/PerceivedComplexity:
36
+ Max: 8
16
37
 
38
+ # TODO: Lower to 80
17
39
  Metrics/LineLength:
18
40
  AllowURI: true
19
- Max: 143 # TODO: Lower to 80
41
+ Max: 143
20
42
 
43
+ # TODO: Lower to 15
21
44
  Metrics/MethodLength:
22
45
  CountComments: false
23
- Max: 25 # TODO: Lower to 15
46
+ Max: 25
24
47
 
25
48
  Metrics/ModuleLength:
26
49
  CountComments: false
@@ -30,9 +53,14 @@ Metrics/ParameterLists:
30
53
  Max: 5
31
54
  CountKeywordArgs: true
32
55
 
33
- Metrics/AbcSize:
56
+ ## Performance #################################################################
57
+
58
+ # XXX: requires ruby 2.4+
59
+ Performance/RegexpMatch:
34
60
  Enabled: false
35
61
 
62
+ ## Style #######################################################################
63
+
36
64
  Style/CollectionMethods:
37
65
  PreferredMethods:
38
66
  collect: 'map'
@@ -43,9 +71,6 @@ Style/CollectionMethods:
43
71
  Style/Documentation:
44
72
  Enabled: false
45
73
 
46
- Style/DotPosition:
47
- EnforcedStyle: trailing
48
-
49
74
  Style/DoubleNegation:
50
75
  Enabled: false
51
76
 
@@ -58,20 +83,28 @@ Style/Encoding:
58
83
  Style/EmptyCaseCondition:
59
84
  Enabled: false
60
85
 
86
+ # XXX: Lots of times it suggests making code terrible to read.
87
+ Style/GuardClause:
88
+ Enabled: false
89
+
61
90
  Style/HashSyntax:
62
91
  EnforcedStyle: hash_rockets
63
92
 
64
93
  Style/Lambda:
65
94
  Enabled: false
66
95
 
67
- Style/SpaceAroundOperators:
68
- AllowForAlignment: true
96
+ Style/OptionHash:
97
+ Enabled: true
69
98
 
70
- Style/SpaceInsideHashLiteralBraces:
71
- EnforcedStyle: no_space
99
+ # XXX: requires ruby 2.3+
100
+ Style/SafeNavigation:
101
+ Enabled: false
72
102
 
73
103
  Style/StringLiterals:
74
104
  EnforcedStyle: double_quotes
75
105
 
76
106
  Style/TrivialAccessors:
77
107
  Enabled: false
108
+
109
+ Style/YodaCondition:
110
+ Enabled: false
@@ -1,30 +1,35 @@
1
1
  language: ruby
2
2
  sudo: false
3
3
 
4
+ cache: bundler
5
+
4
6
  before_install:
5
- - gem update --system 2.6.10
7
+ - gem update --system
6
8
  - gem --version
7
- - gem install bundler --version 1.14.3 --no-rdoc --no-ri
9
+ - gem install bundler --no-rdoc --no-ri
8
10
  - bundle --version
9
11
 
10
- install: bundle _1.14.3_ install --without development doc
12
+ install: bundle install --without development doc
11
13
 
12
- script: bundle _1.14.3_ exec rake
14
+ script: bundle exec rake
13
15
 
14
- env:
15
- global:
16
- - JRUBY_OPTS="$JRUBY_OPTS --debug"
16
+ env: JRUBY_OPTS="$JRUBY_OPTS --debug"
17
17
 
18
18
  rvm:
19
- - jruby-9.1.7.0
20
- - 2.0.0
21
- - 2.1
19
+ # Include JRuby first because it takes the longest
20
+ - jruby-9.1.13.0
22
21
  - 2.2
23
- - 2.3.3
24
- - 2.4.0
22
+ - 2.3.4
23
+ - 2.4.1
25
24
 
26
25
  matrix:
27
26
  fast_finish: true
27
+ include:
28
+ # Only run RuboCop and Yardstick metrics on the latest Ruby
29
+ - rvm: 2.4.1
30
+ env: SUITE="rubocop"
31
+ - rvm: 2.4.1
32
+ env: SUITE="yardstick"
28
33
 
29
34
  branches:
30
35
  only:
data/CHANGES.md CHANGED
@@ -1,3 +1,27 @@
1
+ ## 3.0.0.pre
2
+
3
+ * Drop support of Ruby `2.0` and Ruby `2.1`.
4
+ ([@ixti])
5
+
6
+ * [#410](https://github.com/httprb/http/pull/410)
7
+ Infer `Host` header upon redirects.
8
+ ([@janko-m])
9
+
10
+ * [#409](https://github.com/httprb/http/pull/409)
11
+ Enables request body streaming on any IO object.
12
+ ([@janko-m])
13
+
14
+ * [#413](https://github.com/httprb/http/issues/413),
15
+ [#414](https://github.com/httprb/http/pull/414)
16
+ Fix encoding of body chunks.
17
+ ([@janko-m])
18
+
19
+ * [#368](https://github.com/httprb/http/pull/368),
20
+ [#357](https://github.com/httprb/http/issues/357)
21
+ Fix timeout issue.
22
+ ([@HoneyryderChuck])
23
+
24
+
1
25
  ## 2.2.2 (2017-04-27)
2
26
 
3
27
  * [#404](https://github.com/httprb/http/issues/404),
@@ -593,4 +617,4 @@ end
593
617
  [@britishtea]: https://github.com/britishtea
594
618
  [@janko-m]: https://github.com/janko-m
595
619
  [@Bonias]: https://github.com/Bonias
596
- [@nestegg]: https://github.com/nestegg
620
+ [@HoneyryderChuck]: https://github.com/HoneyryderChuck
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "https://rubygems.org"
2
4
  ruby RUBY_VERSION
3
5
 
@@ -15,15 +17,20 @@ group :development do
15
17
  end
16
18
 
17
19
  group :test do
20
+ gem "activemodel", :require => false # Used by certificate_authority
21
+ gem "certificate_authority", :require => false
22
+
18
23
  gem "backports"
24
+
19
25
  gem "coveralls", :require => false
20
26
  gem "simplecov", ">= 0.9"
21
- gem "rubocop", "= 0.40.0"
22
- gem "rspec", "~> 3.0"
27
+
28
+ gem "rspec", "~> 3.0"
23
29
  gem "rspec-its"
30
+
31
+ gem "rubocop", "= 0.49.1"
32
+
24
33
  gem "yardstick"
25
- gem "certificate_authority", :require => false
26
- gem "activemodel", :require => false # Used by certificate_authority
27
34
  end
28
35
 
29
36
  group :doc do
data/Guardfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # More info at https://github.com/guard/guard#readme
2
4
 
3
5
  guard :rspec, :cmd => "GUARD_RSPEC=1 bundle exec rspec --no-profile" do
data/README.md CHANGED
@@ -6,9 +6,9 @@
6
6
  [![Coverage Status](https://coveralls.io/repos/httprb/http/badge.svg?branch=master)](https://coveralls.io/r/httprb/http)
7
7
  [![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/httprb/http/blob/master/LICENSE.txt)
8
8
 
9
- _NOTE: This is the 2.x **stable** branch. For the 3.x **development** branch, please see:_
9
+ _NOTE: This is the 3.x **development** branch. For the 2.x **stable** branch, please see:_
10
10
 
11
- https://github.com/httprb/http/
11
+ https://github.com/httprb/http/tree/2-x-stable
12
12
 
13
13
  ## About
14
14
 
@@ -160,10 +160,9 @@ and call `#readpartial` on it repeatedly until it returns `nil`:
160
160
  This library aims to support and is [tested against][travis] the following Ruby
161
161
  versions:
162
162
 
163
- * Ruby 2.0.0
164
- * Ruby 2.1.x
165
163
  * Ruby 2.2.x
166
164
  * Ruby 2.3.x
165
+ * Ruby 2.4.x
167
166
  * JRuby 9.1.x.x
168
167
 
169
168
  If something doesn't work on one of these versions, it's a bug.
@@ -194,5 +193,5 @@ dropped.
194
193
 
195
194
  ## Copyright
196
195
 
197
- Copyright (c) 2011-2016 Tony Arcieri, Erik Michaels-Ober, Alexey V. Zapparov, Zachary Anker.
196
+ Copyright (c) 2011-2017 Tony Arcieri, Alexey V. Zapparov, Erik Michaels-Ober, Zachary Anker.
198
197
  See LICENSE.txt for further details.
data/Rakefile CHANGED
@@ -1,19 +1,12 @@
1
- #!/usr/bin/env rake
1
+ # frozen_string_literal: true
2
+
2
3
  require "bundler/gem_tasks"
3
4
 
4
5
  require "rspec/core/rake_task"
5
6
  RSpec::Core::RakeTask.new
6
7
 
7
- task :test => :spec
8
-
9
- begin
10
- require "rubocop/rake_task"
11
- RuboCop::RakeTask.new
12
- rescue LoadError
13
- task :rubocop do
14
- $stderr.puts "RuboCop is disabled"
15
- end
16
- end
8
+ require "rubocop/rake_task"
9
+ RuboCop::RakeTask.new
17
10
 
18
11
  require "yardstick/rake/measurement"
19
12
  Yardstick::Rake::Measurement.new do |measurement|
@@ -36,7 +29,7 @@ task :generate_status_codes do
36
29
  code = e.xpath("xmlns:value").text.to_s
37
30
  desc = e.xpath("xmlns:description").text.to_s
38
31
 
39
- next a if "Unassigned" == desc || "(Unused)" == desc
32
+ next a if %w[Unassigned (Unused)].include?(desc)
40
33
 
41
34
  a << "#{code} => #{desc.inspect}"
42
35
  end
@@ -68,4 +61,12 @@ task :generate_status_codes do
68
61
  end
69
62
  end
70
63
 
71
- task :default => [:spec, :rubocop, :verify_measurements]
64
+ if ENV["CI"].nil?
65
+ task :default => %i[spec rubocop verify_measurements]
66
+ else
67
+ case ENV["SUITE"]
68
+ when "rubocop" then task :default => :rubocop
69
+ when "yardstick" then task :default => :verify_measurements
70
+ else task :default => :spec
71
+ end
72
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  lib = File.expand_path("../lib", __FILE__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require "http/version"
@@ -26,7 +28,7 @@ Gem::Specification.new do |gem|
26
28
  gem.required_ruby_version = ">= 2.0"
27
29
 
28
30
  gem.add_runtime_dependency "http_parser.rb", "~> 0.6.0"
29
- gem.add_runtime_dependency "http-form_data", "~> 1.0.1"
31
+ gem.add_runtime_dependency "http-form_data", ">= 2.0.0-pre2", "< 3"
30
32
  gem.add_runtime_dependency "http-cookie", "~> 1.0"
31
33
  gem.add_runtime_dependency "addressable", "~> 2.3"
32
34
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "http/parser"
3
4
 
4
5
  require "http/errors"
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require "base64"
3
4
 
4
5
  require "http/headers"
@@ -8,70 +9,70 @@ module HTTP
8
9
  # Request a get sans response body
9
10
  # @param uri
10
11
  # @option options [Hash]
11
- def head(uri, options = {})
12
+ def head(uri, options = {}) # rubocop:disable Style/OptionHash
12
13
  request :head, uri, options
13
14
  end
14
15
 
15
16
  # Get a resource
16
17
  # @param uri
17
18
  # @option options [Hash]
18
- def get(uri, options = {})
19
+ def get(uri, options = {}) # rubocop:disable Style/OptionHash
19
20
  request :get, uri, options
20
21
  end
21
22
 
22
23
  # Post to a resource
23
24
  # @param uri
24
25
  # @option options [Hash]
25
- def post(uri, options = {})
26
+ def post(uri, options = {}) # rubocop:disable Style/OptionHash
26
27
  request :post, uri, options
27
28
  end
28
29
 
29
30
  # Put to a resource
30
31
  # @param uri
31
32
  # @option options [Hash]
32
- def put(uri, options = {})
33
+ def put(uri, options = {}) # rubocop:disable Style/OptionHash
33
34
  request :put, uri, options
34
35
  end
35
36
 
36
37
  # Delete a resource
37
38
  # @param uri
38
39
  # @option options [Hash]
39
- def delete(uri, options = {})
40
+ def delete(uri, options = {}) # rubocop:disable Style/OptionHash
40
41
  request :delete, uri, options
41
42
  end
42
43
 
43
44
  # Echo the request back to the client
44
45
  # @param uri
45
46
  # @option options [Hash]
46
- def trace(uri, options = {})
47
+ def trace(uri, options = {}) # rubocop:disable Style/OptionHash
47
48
  request :trace, uri, options
48
49
  end
49
50
 
50
51
  # Return the methods supported on the given URI
51
52
  # @param uri
52
53
  # @option options [Hash]
53
- def options(uri, options = {})
54
+ def options(uri, options = {}) # rubocop:disable Style/OptionHash
54
55
  request :options, uri, options
55
56
  end
56
57
 
57
58
  # Convert to a transparent TCP/IP tunnel
58
59
  # @param uri
59
60
  # @option options [Hash]
60
- def connect(uri, options = {})
61
+ def connect(uri, options = {}) # rubocop:disable Style/OptionHash
61
62
  request :connect, uri, options
62
63
  end
63
64
 
64
65
  # Apply partial modifications to a resource
65
66
  # @param uri
66
67
  # @option options [Hash]
67
- def patch(uri, options = {})
68
+ def patch(uri, options = {}) # rubocop:disable Style/OptionHash
68
69
  request :patch, uri, options
69
70
  end
70
71
 
71
72
  # Make an HTTP request with the given verb
72
73
  # @param uri
73
74
  # @option options [Hash]
74
- def request(verb, uri, options = {})
75
+ def request(verb, uri, options = {}) # rubocop:disable Style/OptionHash
75
76
  branch(options).request verb, uri
76
77
  end
77
78
 
@@ -85,7 +86,7 @@ module HTTP
85
86
  # @option options [Float] :read Read timeout
86
87
  # @option options [Float] :write Write timeout
87
88
  # @option options [Float] :connect Connect timeout
88
- def timeout(klass, options = {})
89
+ def timeout(klass, options = {}) # rubocop:disable Style/OptionHash
89
90
  if klass.is_a? Hash
90
91
  options = klass
91
92
  klass = :per_operation
@@ -98,7 +99,7 @@ module HTTP
98
99
  else raise ArgumentError, "Unsupported Timeout class: #{klass}"
99
100
  end
100
101
 
101
- [:read, :write, :connect].each do |k|
102
+ %i[read write connect].each do |k|
102
103
  next unless options.key? k
103
104
  options["#{k}_timeout".to_sym] = options.delete k
104
105
  end
@@ -170,8 +171,8 @@ module HTTP
170
171
  # @param opts
171
172
  # @return [HTTP::Client]
172
173
  # @see Redirector#initialize
173
- def follow(opts = {})
174
- branch default_options.with_follow opts
174
+ def follow(options = {}) # rubocop:disable Style/OptionHash
175
+ branch default_options.with_follow options
175
176
  end
176
177
 
177
178
  # Make a request with the given headers