http 4.4.1 → 5.0.1

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 (68) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +65 -0
  3. data/.gitignore +6 -10
  4. data/.rspec +0 -4
  5. data/.rubocop.yml +8 -110
  6. data/.rubocop/layout.yml +8 -0
  7. data/.rubocop/style.yml +32 -0
  8. data/.rubocop_todo.yml +192 -0
  9. data/.yardopts +1 -1
  10. data/CHANGES.md +112 -3
  11. data/Gemfile +18 -10
  12. data/LICENSE.txt +1 -1
  13. data/README.md +17 -20
  14. data/Rakefile +2 -10
  15. data/http.gemspec +3 -3
  16. data/lib/http/chainable.rb +23 -17
  17. data/lib/http/client.rb +36 -30
  18. data/lib/http/connection.rb +11 -7
  19. data/lib/http/content_type.rb +12 -7
  20. data/lib/http/feature.rb +3 -1
  21. data/lib/http/features/auto_deflate.rb +6 -6
  22. data/lib/http/features/auto_inflate.rb +6 -5
  23. data/lib/http/features/instrumentation.rb +1 -1
  24. data/lib/http/features/logging.rb +19 -21
  25. data/lib/http/headers.rb +50 -13
  26. data/lib/http/mime_type/adapter.rb +3 -1
  27. data/lib/http/mime_type/json.rb +1 -0
  28. data/lib/http/options.rb +5 -8
  29. data/lib/http/redirector.rb +2 -1
  30. data/lib/http/request.rb +28 -11
  31. data/lib/http/request/body.rb +1 -0
  32. data/lib/http/request/writer.rb +3 -2
  33. data/lib/http/response.rb +17 -15
  34. data/lib/http/response/body.rb +2 -2
  35. data/lib/http/response/inflater.rb +1 -1
  36. data/lib/http/response/parser.rb +74 -62
  37. data/lib/http/response/status.rb +4 -3
  38. data/lib/http/timeout/global.rb +17 -31
  39. data/lib/http/timeout/null.rb +2 -1
  40. data/lib/http/timeout/per_operation.rb +31 -54
  41. data/lib/http/uri.rb +5 -5
  42. data/lib/http/version.rb +1 -1
  43. data/spec/lib/http/client_spec.rb +119 -30
  44. data/spec/lib/http/connection_spec.rb +8 -5
  45. data/spec/lib/http/features/auto_inflate_spec.rb +4 -2
  46. data/spec/lib/http/features/instrumentation_spec.rb +28 -21
  47. data/spec/lib/http/features/logging_spec.rb +8 -9
  48. data/spec/lib/http/headers_spec.rb +53 -18
  49. data/spec/lib/http/options/headers_spec.rb +1 -1
  50. data/spec/lib/http/options/merge_spec.rb +16 -16
  51. data/spec/lib/http/redirector_spec.rb +46 -1
  52. data/spec/lib/http/request/writer_spec.rb +13 -1
  53. data/spec/lib/http/request_spec.rb +5 -5
  54. data/spec/lib/http/response/parser_spec.rb +33 -4
  55. data/spec/lib/http/response/status_spec.rb +3 -3
  56. data/spec/lib/http/response_spec.rb +5 -3
  57. data/spec/lib/http_spec.rb +30 -3
  58. data/spec/spec_helper.rb +21 -21
  59. data/spec/support/black_hole.rb +1 -1
  60. data/spec/support/dummy_server.rb +7 -7
  61. data/spec/support/dummy_server/servlet.rb +17 -6
  62. data/spec/support/fuubar.rb +21 -0
  63. data/spec/support/http_handling_shared.rb +4 -4
  64. data/spec/support/simplecov.rb +19 -0
  65. data/spec/support/ssl_helper.rb +4 -4
  66. metadata +18 -12
  67. data/.coveralls.yml +0 -1
  68. data/.travis.yml +0 -39
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cce9a8685f3b60f994e77174f79c2306f607d62016bf64b74fcebc4f86377ec0
4
- data.tar.gz: 353702b62a1b9d3b2ea86ac5ac3ad88e9efa734c77e180128fa06c6c301895d3
3
+ metadata.gz: afbab6dd50416f2205ca49ae54217bff2f35e3fcf7738a8a5288644e801b4d42
4
+ data.tar.gz: f4d7ee837eaeda6cd50ad6cd58dd1b7c125516a98e821d5e176a8591b2f6baff
5
5
  SHA512:
6
- metadata.gz: 84ddc4cf98e603d175a9ecb8db03abd32187888070abd96a437c4121750ac2b86b6cada5d00d527b398ff4a403c2b6448d45bed61c45dbd3be8658f4ad38b121
7
- data.tar.gz: 750edced9ae715483d750f0b18777f84a4ee24848ec761c67d2c5b89d00ebbc99fbc1e02932d3d30a33eaea43e1d081ba97bcacaf2231f6693e50d218ee24e87
6
+ metadata.gz: 94e587b821c4839152e67d31b704cc9a20ceae5e2bb168893786aeaea32edeee80967678b348f9b2051552ebe3a6e018e1b15ca67c3231bcd51553e78486cd8f
7
+ data.tar.gz: 1f0dc3544496196b8c1193509b0b3a7bf7152178488ebf071b692288caf44bc59e5edfe382f918b9f6cc4de1dfc43fdf2334ea16ce67787ef3a0ed03b1b5eb52
@@ -0,0 +1,65 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ env:
10
+ BUNDLE_WITHOUT: "development"
11
+ JRUBY_OPTS: "--dev --debug"
12
+
13
+ jobs:
14
+ test:
15
+ runs-on: ${{ matrix.os }}
16
+
17
+ strategy:
18
+ matrix:
19
+ ruby: [ ruby-2.5, ruby-2.6, ruby-2.7, ruby-3.0 ]
20
+ os: [ ubuntu-latest ]
21
+
22
+ steps:
23
+ - uses: actions/checkout@v2
24
+
25
+ - uses: ruby/setup-ruby@v1
26
+ with:
27
+ ruby-version: ${{ matrix.ruby }}
28
+ bundler-cache: true
29
+
30
+ - name: bundle exec rspec
31
+ run: bundle exec rspec --format progress --force-colour
32
+
33
+ - name: Prepare Coveralls test coverage report
34
+ uses: coverallsapp/github-action@v1.1.2
35
+ with:
36
+ github-token: ${{ secrets.GITHUB_TOKEN }}
37
+ flag-name: "${{ matrix.ruby }} @${{ matrix.os }}"
38
+ path-to-lcov: ./coverage/lcov/lcov.info
39
+ parallel: true
40
+
41
+ coveralls:
42
+ needs: test
43
+ runs-on: ubuntu-latest
44
+ steps:
45
+ - name: Finalize Coveralls test coverage report
46
+ uses: coverallsapp/github-action@master
47
+ with:
48
+ github-token: ${{ secrets.GITHUB_TOKEN }}
49
+ parallel-finished: true
50
+
51
+ lint:
52
+ runs-on: ubuntu-latest
53
+
54
+ steps:
55
+ - uses: actions/checkout@v2
56
+
57
+ - uses: ruby/setup-ruby@v1
58
+ with:
59
+ ruby-version: 2.5
60
+ bundler-cache: true
61
+
62
+ - name: bundle exec rubocop
63
+ run: bundle exec rubocop --format progress --color
64
+
65
+ - run: bundle exec rake verify_measurements
data/.gitignore CHANGED
@@ -1,19 +1,15 @@
1
1
  *.gem
2
- .bundle
3
2
  .config
4
3
  .rvmrc
5
- .ruby-version
6
4
  .yardoc
7
- Gemfile.lock
8
5
  InstalledFiles
9
6
  _yardoc
10
- coverage
7
+
8
+ .bundle
9
+ .ruby-version
11
10
  doc
12
- lib/bundler/man
13
- measurement
11
+ coverage
14
12
  pkg
15
- rdoc
16
- spec/reports
17
- test/tmp
18
- test/version_tmp
13
+ spec/examples.txt
19
14
  tmp
15
+ Gemfile.lock
data/.rspec CHANGED
@@ -1,5 +1 @@
1
- --backtrace
2
- --color
3
- --format=documentation
4
- --order random
5
1
  --require spec_helper
data/.rubocop.yml CHANGED
@@ -1,112 +1,10 @@
1
+ inherit_from:
2
+ - .rubocop_todo.yml
3
+ - .rubocop/layout.yml
4
+ - .rubocop/style.yml
5
+
1
6
  AllCops:
2
- TargetRubyVersion: 2.3
7
+ DefaultFormatter: fuubar
3
8
  DisplayCopNames: true
4
-
5
- ## Layout ######################################################################
6
-
7
- Layout/DotPosition:
8
- EnforcedStyle: trailing
9
-
10
- Layout/SpaceAroundOperators:
11
- AllowForAlignment: true
12
-
13
- Layout/SpaceInsideHashLiteralBraces:
14
- EnforcedStyle: no_space
15
-
16
- ## Metrics #####################################################################
17
-
18
- Metrics/AbcSize:
19
- Enabled: false
20
-
21
- Metrics/BlockLength:
22
- Exclude:
23
- - "spec/**/*"
24
- - "**/*.gemspec"
25
-
26
- Metrics/BlockNesting:
27
- Max: 2
28
-
29
- Metrics/ClassLength:
30
- CountComments: false
31
- Max: 125
32
-
33
- # TODO: Lower to 6
34
- Metrics/CyclomaticComplexity:
35
- Max: 8
36
-
37
- Metrics/PerceivedComplexity:
38
- Max: 8
39
-
40
- # TODO: Lower to 80
41
- Metrics/LineLength:
42
- AllowURI: true
43
- Max: 143
44
-
45
- # TODO: Lower to 15
46
- Metrics/MethodLength:
47
- CountComments: false
48
- Max: 25
49
-
50
- Metrics/ModuleLength:
51
- CountComments: false
52
- Max: 120
53
-
54
- Metrics/ParameterLists:
55
- Max: 5
56
- CountKeywordArgs: true
57
-
58
- ## Performance #################################################################
59
-
60
- # XXX: requires ruby 2.4+
61
- Performance/RegexpMatch:
62
- Enabled: false
63
-
64
- ## Style #######################################################################
65
-
66
- Style/CollectionMethods:
67
- PreferredMethods:
68
- collect: 'map'
69
- reduce: 'inject'
70
- find: 'detect'
71
- find_all: 'select'
72
-
73
- Style/Documentation:
74
- Enabled: false
75
-
76
- Style/DoubleNegation:
77
- Enabled: false
78
-
79
- Style/EachWithObject:
80
- Enabled: false
81
-
82
- Style/Encoding:
83
- Enabled: false
84
-
85
- Style/EmptyCaseCondition:
86
- Enabled: false
87
-
88
- # XXX: Lots of times it suggests making code terrible to read.
89
- Style/GuardClause:
90
- Enabled: false
91
-
92
- Style/HashSyntax:
93
- EnforcedStyle: hash_rockets
94
-
95
- Style/Lambda:
96
- Enabled: false
97
-
98
- Style/OptionHash:
99
- Enabled: true
100
-
101
- # XXX: requires ruby 2.3+
102
- Style/SafeNavigation:
103
- Enabled: false
104
-
105
- Style/StringLiterals:
106
- EnforcedStyle: double_quotes
107
-
108
- Style/TrivialAccessors:
109
- Enabled: false
110
-
111
- Style/YodaCondition:
112
- Enabled: false
9
+ NewCops: enable
10
+ TargetRubyVersion: 2.5
@@ -0,0 +1,8 @@
1
+ Layout/DotPosition:
2
+ Enabled: true
3
+ EnforcedStyle: leading
4
+
5
+ Layout/HashAlignment:
6
+ Enabled: true
7
+ EnforcedColonStyle: table
8
+ EnforcedHashRocketStyle: table
@@ -0,0 +1,32 @@
1
+ Style/Documentation:
2
+ Enabled: false
3
+
4
+ Style/DocumentDynamicEvalDefinition:
5
+ Enabled: true
6
+ Exclude:
7
+ - 'spec/**/*.rb'
8
+
9
+ Style/FormatStringToken:
10
+ Enabled: true
11
+ EnforcedStyle: unannotated
12
+
13
+ Style/HashSyntax:
14
+ Enabled: true
15
+ EnforcedStyle: hash_rockets
16
+
17
+ Style/OptionHash:
18
+ Enabled: true
19
+
20
+ Style/RescueStandardError:
21
+ Enabled: true
22
+ EnforcedStyle: implicit
23
+
24
+ Style/StringLiterals:
25
+ Enabled: true
26
+ EnforcedStyle: double_quotes
27
+
28
+ Style/WordArray:
29
+ Enabled: true
30
+
31
+ Style/YodaCondition:
32
+ Enabled: false
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,192 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config --auto-gen-only-exclude --exclude-limit 42`
3
+ # on 2021-04-10 09:49:03 UTC using RuboCop version 1.12.1.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 53
10
+ # Cop supports --auto-correct.
11
+ # Configuration parameters: EnforcedStyle.
12
+ # SupportedStyles: leading, trailing
13
+ Layout/DotPosition:
14
+ Exclude:
15
+ - 'lib/http/options.rb'
16
+ - 'spec/lib/http/client_spec.rb'
17
+ - 'spec/lib/http/features/auto_deflate_spec.rb'
18
+ - 'spec/lib/http/headers_spec.rb'
19
+ - 'spec/lib/http/options/features_spec.rb'
20
+ - 'spec/lib/http/redirector_spec.rb'
21
+ - 'spec/lib/http/response/body_spec.rb'
22
+ - 'spec/lib/http_spec.rb'
23
+ - 'spec/support/http_handling_shared.rb'
24
+
25
+ # Offense count: 174
26
+ # Cop supports --auto-correct.
27
+ # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces.
28
+ # SupportedStyles: space, no_space, compact
29
+ # SupportedStylesForEmptyBraces: space, no_space
30
+ Layout/SpaceInsideHashLiteralBraces:
31
+ Exclude:
32
+ - 'lib/http/chainable.rb'
33
+ - 'spec/lib/http/client_spec.rb'
34
+ - 'spec/lib/http/features/auto_inflate_spec.rb'
35
+ - 'spec/lib/http/features/instrumentation_spec.rb'
36
+ - 'spec/lib/http/features/logging_spec.rb'
37
+ - 'spec/lib/http/headers_spec.rb'
38
+ - 'spec/lib/http/options/features_spec.rb'
39
+ - 'spec/lib/http/options/merge_spec.rb'
40
+ - 'spec/lib/http/options/new_spec.rb'
41
+ - 'spec/lib/http/redirector_spec.rb'
42
+ - 'spec/lib/http/request_spec.rb'
43
+ - 'spec/lib/http/response_spec.rb'
44
+ - 'spec/lib/http_spec.rb'
45
+ - 'spec/support/dummy_server/servlet.rb'
46
+ - 'spec/support/http_handling_shared.rb'
47
+ - 'spec/support/ssl_helper.rb'
48
+
49
+ # Offense count: 4
50
+ Lint/MissingSuper:
51
+ Exclude:
52
+ - 'lib/http/features/auto_deflate.rb'
53
+ - 'lib/http/features/instrumentation.rb'
54
+ - 'lib/http/features/logging.rb'
55
+ - 'lib/http/features/normalize_uri.rb'
56
+
57
+ # Offense count: 8
58
+ # Configuration parameters: IgnoredMethods, CountRepeatedAttributes, Max.
59
+ Metrics/AbcSize:
60
+ Exclude:
61
+ - 'lib/http/chainable.rb'
62
+ - 'lib/http/client.rb'
63
+ - 'lib/http/connection.rb'
64
+ - 'lib/http/features/auto_deflate.rb'
65
+ - 'lib/http/redirector.rb'
66
+ - 'lib/http/request.rb'
67
+ - 'lib/http/response.rb'
68
+
69
+ # Offense count: 66
70
+ # Configuration parameters: CountComments, Max, CountAsOne, ExcludedMethods, IgnoredMethods.
71
+ # IgnoredMethods: refine
72
+ Metrics/BlockLength:
73
+ Exclude:
74
+ - '**/*.gemspec'
75
+ - 'spec/lib/http/client_spec.rb'
76
+ - 'spec/lib/http/connection_spec.rb'
77
+ - 'spec/lib/http/content_type_spec.rb'
78
+ - 'spec/lib/http/features/auto_deflate_spec.rb'
79
+ - 'spec/lib/http/features/auto_inflate_spec.rb'
80
+ - 'spec/lib/http/features/instrumentation_spec.rb'
81
+ - 'spec/lib/http/features/logging_spec.rb'
82
+ - 'spec/lib/http/headers/mixin_spec.rb'
83
+ - 'spec/lib/http/headers_spec.rb'
84
+ - 'spec/lib/http/options/merge_spec.rb'
85
+ - 'spec/lib/http/redirector_spec.rb'
86
+ - 'spec/lib/http/request/body_spec.rb'
87
+ - 'spec/lib/http/request/writer_spec.rb'
88
+ - 'spec/lib/http/request_spec.rb'
89
+ - 'spec/lib/http/response/body_spec.rb'
90
+ - 'spec/lib/http/response/parser_spec.rb'
91
+ - 'spec/lib/http/response/status_spec.rb'
92
+ - 'spec/lib/http/response_spec.rb'
93
+ - 'spec/lib/http_spec.rb'
94
+ - 'spec/support/http_handling_shared.rb'
95
+
96
+ # Offense count: 4
97
+ # Configuration parameters: CountComments, Max, CountAsOne.
98
+ Metrics/ClassLength:
99
+ Exclude:
100
+ - 'lib/http/client.rb'
101
+ - 'lib/http/connection.rb'
102
+ - 'lib/http/headers.rb'
103
+ - 'lib/http/request.rb'
104
+
105
+ # Offense count: 2
106
+ # Configuration parameters: IgnoredMethods, Max.
107
+ Metrics/CyclomaticComplexity:
108
+ Exclude:
109
+ - 'lib/http/chainable.rb'
110
+ - 'lib/http/client.rb'
111
+
112
+ # Offense count: 19
113
+ # Configuration parameters: CountComments, Max, CountAsOne, ExcludedMethods, IgnoredMethods.
114
+ Metrics/MethodLength:
115
+ Exclude:
116
+ - 'lib/http/chainable.rb'
117
+ - 'lib/http/client.rb'
118
+ - 'lib/http/connection.rb'
119
+ - 'lib/http/features/auto_deflate.rb'
120
+ - 'lib/http/features/auto_inflate.rb'
121
+ - 'lib/http/headers.rb'
122
+ - 'lib/http/options.rb'
123
+ - 'lib/http/redirector.rb'
124
+ - 'lib/http/request.rb'
125
+ - 'lib/http/response.rb'
126
+ - 'lib/http/response/body.rb'
127
+ - 'lib/http/timeout/global.rb'
128
+
129
+ # Offense count: 1
130
+ # Configuration parameters: CountComments, Max, CountAsOne.
131
+ Metrics/ModuleLength:
132
+ Exclude:
133
+ - 'lib/http/chainable.rb'
134
+
135
+ # Offense count: 2
136
+ # Cop supports --auto-correct.
137
+ # Configuration parameters: EnforcedStyle.
138
+ # SupportedStyles: separated, grouped
139
+ Style/AccessorGrouping:
140
+ Exclude:
141
+ - 'lib/http/request.rb'
142
+
143
+ # Offense count: 4
144
+ # Cop supports --auto-correct.
145
+ Style/EmptyCaseCondition:
146
+ Exclude:
147
+ - 'lib/http/client.rb'
148
+ - 'lib/http/headers.rb'
149
+ - 'lib/http/options.rb'
150
+ - 'lib/http/response/status.rb'
151
+
152
+ # Offense count: 5
153
+ # Cop supports --auto-correct.
154
+ Style/Encoding:
155
+ Exclude:
156
+ - 'spec/lib/http/client_spec.rb'
157
+ - 'spec/lib/http/request/writer_spec.rb'
158
+ - 'spec/lib/http/request_spec.rb'
159
+ - 'spec/lib/http_spec.rb'
160
+ - 'spec/support/dummy_server/servlet.rb'
161
+
162
+ # Offense count: 17
163
+ # Configuration parameters: SuspiciousParamNames.
164
+ # SuspiciousParamNames: options, opts, args, params, parameters
165
+ Style/OptionHash:
166
+ Exclude:
167
+ - 'lib/http/chainable.rb'
168
+ - 'lib/http/client.rb'
169
+ - 'lib/http/feature.rb'
170
+ - 'lib/http/options.rb'
171
+ - 'lib/http/redirector.rb'
172
+ - 'lib/http/timeout/null.rb'
173
+ - 'spec/support/dummy_server.rb'
174
+
175
+ # Offense count: 4
176
+ # Configuration parameters: AllowedMethods.
177
+ # AllowedMethods: respond_to_missing?
178
+ Style/OptionalBooleanParameter:
179
+ Exclude:
180
+ - 'lib/http/timeout/global.rb'
181
+ - 'lib/http/timeout/null.rb'
182
+ - 'lib/http/timeout/per_operation.rb'
183
+ - 'lib/http/uri.rb'
184
+
185
+ # Offense count: 3
186
+ # Cop supports --auto-correct.
187
+ # Configuration parameters: AutoCorrect, Max, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
188
+ # URISchemes: http, https
189
+ Layout/LineLength:
190
+ Exclude:
191
+ - 'lib/http/chainable.rb'
192
+ - 'spec/lib/http/options/proxy_spec.rb'