faraday-gzip 3.1.0-java → 3.2.0-java

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d6c2ed183bd5a3571f396967353bfea77a968dd6122aeca780fd664b39538768
4
- data.tar.gz: ba9b429449db6594ed429884ad4d84de7ee1ba73a4628cce5376d5fd5f45b5b7
3
+ metadata.gz: 0d8f9a4bc695fe1e8491bae8587de4dd8c3ed06a91d1b10ec4ee81c9693f0014
4
+ data.tar.gz: bddebba78c0e055ba7fcbbb9aeab112799bbf0f97a56a30794f46de60b9bc4e9
5
5
  SHA512:
6
- metadata.gz: 38fd6cd962480651a754c181842c3eea0cdbbd17723d1f92c6fc140bc5520711040225e7550e940c9408a3a9af5198c1140b263f062a6eb05e5c07b8feb072b8
7
- data.tar.gz: b3d15f413a28e661e13c3d3be6110f0898f1bd29d0293c2bee2d449852d95aebc68273d29ef270d8a3dc2ae27f3f2e9291fb1f3347da9ec6ea7317c3e0cf7f4a
6
+ metadata.gz: d209f1785d541b3b54a89734c90629f35ee277bda57cd3602b41bf1e4594f6d6b7ccf31ec3fce0416515d1b7e998cad45c28a0522f2b19982b67e1dc47d0b152
7
+ data.tar.gz: 81ada8e6f8681f07c1e4b39fa13d62399a176ce22c5a8bf05ea3c420a796f5dc15d4afbd55f2689422f2ba8cd48dde68b9e933ad3135056037d38ff85b2d631f
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.2.0 (12-Oct-2026)
4
+
5
+ - Moved development dependencies to `Gemfile` and improved SimpleCov compatibility across Ruby versions.
6
+ - Simplified response decompression logic.
7
+ - Prevented partial decompression when unsupported content encodings are present.
8
+ - Preserved response headers for empty, non-string, and partial (`206`) responses.
9
+ - Added support for concatenated gzip streams.
10
+ - Added regression tests for encoding chains, partial responses, and concatenated gzip streams.
11
+ - Fixed test helpers to properly initialize HTTP response environments.
12
+
3
13
  ## 3.1.0 (05-Jan-2026)
4
14
 
5
15
  * Improve handling of edge cases and malformed `Content-Encoding` headers
@@ -49,51 +49,31 @@ module Faraday
49
49
 
50
50
  # Finds a proper processor
51
51
  def find_processor(response_env)
52
- body = response_env[:body]
53
-
54
52
  encodings = parse_content_encoding(
55
53
  response_env[:response_headers][CONTENT_ENCODING]
56
54
  )
57
- return nil if encodings.empty? || encodings.include?(IDENTITY)
58
-
59
- # If body is nil/empty, we still want to normalize headers:
60
- # Content-Encoding is meaningless without an encoded body.
61
- return ->(b) { b } if body_nil_or_empty?(body)
55
+ return nil if skip_decompression?(response_env, encodings)
62
56
 
63
57
  chain = processor_chain(encodings)
64
58
  return nil if chain.empty?
65
59
 
66
- ->(b) { chain.reduce(b) { |acc, fn| fn.call(acc) } }
60
+ ->(body) { chain.reduce(body) { |acc, fn| fn.call(acc) } }
67
61
  end
68
62
 
69
63
  # Calls the proper processor to decompress body
70
64
  def reset_body(env, processor)
71
65
  return if processor.nil?
72
66
 
73
- body = env[:body]
74
- headers = env[:response_headers]
75
-
76
- # Don't touch streaming / IO-like bodies.
77
- return unless body.is_a?(String) || body_nil_or_empty?(body)
67
+ body = processor.call(env[:body])
78
68
 
79
- if body.is_a?(String)
80
- env[:body] = processor.call(body)
81
- headers[CONTENT_LENGTH] = env[:body].bytesize
82
- end
83
-
84
- # Normalize encoding header even for nil/empty body.
85
- headers.delete(CONTENT_ENCODING)
69
+ env[:body] = body
70
+ env[:response_headers][CONTENT_LENGTH] = body.bytesize
71
+ env[:response_headers].delete(CONTENT_ENCODING)
86
72
  end
87
73
 
88
74
  # Process gzip
89
75
  def uncompress_gzip(body)
90
- io = StringIO.new(body)
91
- gzip_reader = Zlib::GzipReader.new(io, encoding: 'ASCII-8BIT')
92
- begin
93
- gzip_reader.read
94
- ensure
95
- gzip_reader.close
96
- end
76
+ Zlib::GzipReader.zcat(StringIO.new(body))
97
77
  end
98
78
 
99
79
  # Process deflate
@@ -118,14 +98,13 @@ module Faraday
118
98
 
119
99
  private
120
100
 
121
- def body_nil_or_empty?(body)
122
- return true if body.nil?
123
- return body.empty? if body.respond_to?(:empty?)
124
- # rubocop:disable Style/ZeroLengthPredicate
125
- return body.size.zero? if body.respond_to?(:size)
126
- # rubocop:enable Style/ZeroLengthPredicate
101
+ def skip_decompression?(env, encodings)
102
+ body = env[:body]
127
103
 
128
- false
104
+ return true unless body.is_a?(String) && !body.empty?
105
+ return true if env[:status] == 206
106
+
107
+ encodings.empty? || encodings.include?(IDENTITY)
129
108
  end
130
109
 
131
110
  def parse_content_encoding(value)
@@ -139,8 +118,11 @@ module Faraday
139
118
 
140
119
  # Decode in reverse order of application:
141
120
  # "gzip, br" => br -> gzip
121
+ # If the encoding is unknown, do not touch the content
142
122
  def processor_chain(encodings)
143
- encodings.reverse.filter_map { |enc| processors[enc] }
123
+ return [] unless encodings.all? { |enc| processors[enc] }
124
+
125
+ encodings.reverse.map { |enc| processors[enc] }
144
126
  end
145
127
 
146
128
  def processors
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Faraday
4
4
  module Gzip
5
- VERSION = '3.1.0'
5
+ VERSION = '3.2.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faraday-gzip
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.0
4
+ version: 3.2.0
5
5
  platform: java
6
6
  authors:
7
7
  - Ilya Krukowski
@@ -29,90 +29,6 @@ dependencies:
29
29
  - - "<"
30
30
  - !ruby/object:Gem::Version
31
31
  version: '3'
32
- - !ruby/object:Gem::Dependency
33
- name: rake
34
- requirement: !ruby/object:Gem::Requirement
35
- requirements:
36
- - - "~>"
37
- - !ruby/object:Gem::Version
38
- version: '13.0'
39
- type: :development
40
- prerelease: false
41
- version_requirements: !ruby/object:Gem::Requirement
42
- requirements:
43
- - - "~>"
44
- - !ruby/object:Gem::Version
45
- version: '13.0'
46
- - !ruby/object:Gem::Dependency
47
- name: rspec
48
- requirement: !ruby/object:Gem::Requirement
49
- requirements:
50
- - - "~>"
51
- - !ruby/object:Gem::Version
52
- version: '3.0'
53
- type: :development
54
- prerelease: false
55
- version_requirements: !ruby/object:Gem::Requirement
56
- requirements:
57
- - - "~>"
58
- - !ruby/object:Gem::Version
59
- version: '3.0'
60
- - !ruby/object:Gem::Dependency
61
- name: simplecov
62
- requirement: !ruby/object:Gem::Requirement
63
- requirements:
64
- - - "~>"
65
- - !ruby/object:Gem::Version
66
- version: '0.22'
67
- type: :development
68
- prerelease: false
69
- version_requirements: !ruby/object:Gem::Requirement
70
- requirements:
71
- - - "~>"
72
- - !ruby/object:Gem::Version
73
- version: '0.22'
74
- - !ruby/object:Gem::Dependency
75
- name: rubocop
76
- requirement: !ruby/object:Gem::Requirement
77
- requirements:
78
- - - "~>"
79
- - !ruby/object:Gem::Version
80
- version: '1.82'
81
- type: :development
82
- prerelease: false
83
- version_requirements: !ruby/object:Gem::Requirement
84
- requirements:
85
- - - "~>"
86
- - !ruby/object:Gem::Version
87
- version: '1.82'
88
- - !ruby/object:Gem::Dependency
89
- name: rubocop-performance
90
- requirement: !ruby/object:Gem::Requirement
91
- requirements:
92
- - - "~>"
93
- - !ruby/object:Gem::Version
94
- version: '1.26'
95
- type: :development
96
- prerelease: false
97
- version_requirements: !ruby/object:Gem::Requirement
98
- requirements:
99
- - - "~>"
100
- - !ruby/object:Gem::Version
101
- version: '1.26'
102
- - !ruby/object:Gem::Dependency
103
- name: rubocop-rspec
104
- requirement: !ruby/object:Gem::Requirement
105
- requirements:
106
- - - "~>"
107
- - !ruby/object:Gem::Version
108
- version: '3.8'
109
- type: :development
110
- prerelease: false
111
- version_requirements: !ruby/object:Gem::Requirement
112
- requirements:
113
- - - "~>"
114
- - !ruby/object:Gem::Version
115
- version: '3.8'
116
32
  description: 'Faraday plugin to automatically set compression headers (GZip, Deflate,
117
33
  Brotli) and decompress the response.
118
34
 
@@ -135,7 +51,7 @@ licenses:
135
51
  metadata:
136
52
  bug_tracker_uri: https://github.com/bodrovis/faraday-gzip/issues
137
53
  changelog_uri: https://github.com/bodrovis/faraday-gzip/blob/master/CHANGELOG.md
138
- documentation_uri: http://www.rubydoc.info/gems/faraday-gzip/3.1.0
54
+ documentation_uri: https://www.rubydoc.info/gems/faraday-gzip/3.2.0
139
55
  source_code_uri: https://github.com/bodrovis/faraday-gzip
140
56
  rubygems_mfa_required: 'true'
141
57
  rdoc_options: []
@@ -152,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
68
  - !ruby/object:Gem::Version
153
69
  version: '0'
154
70
  requirements: []
155
- rubygems_version: 3.6.9
71
+ rubygems_version: 4.0.21
156
72
  specification_version: 4
157
73
  summary: Automatically sets compression headers and decompresses the response
158
74
  test_files: []