format_parser 2.0.0.pre.3 → 2.0.0

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: 898819bf7d61150f2e0ac11f880c4b36478e8ddd66d05631f844cd70515d168b
4
- data.tar.gz: 9a0566ad6de66342ce88c3252ed2783eae2eda23180cd752bbef793fd9797499
3
+ metadata.gz: 8b7ea3319eba27d70e1945f6e8584e978a0e7b61b225fb651ad9d0e6daa649e0
4
+ data.tar.gz: 58c7ad6d34d8271cadad852cffcbdc252ba4b1ee2c0d0ac0d55d739845b7f2a9
5
5
  SHA512:
6
- metadata.gz: 11a3e410f40f932d913bff00abd57f8f359e59ae44f648347dd565258589a3dabf263a0e076496cf2b47ee3902cf352e927d4eb3c8a7913fd699b86c379a9fc9
7
- data.tar.gz: 24dde163c2074129e7896de322d53bf52dbb57a0b4d3db0db270e55b2c0bea5661f862a9f44e1c24953746f9629de78e3eeef7b9fe03db36690d9697a55ae0a7
6
+ metadata.gz: f7a5d3416c8f9aa1a58243ca183a3c0014979a6bfba4852fdbf7e46cc2b2bd5486160437b4db66ad39d64525324fb120bdca25928bbfcfef59ec57959ab22727
7
+ data.tar.gz: 829b4fb1d543691d1a7ca284eb21ab9238d101bc750399402034eaab39f87505eeee3d57a92eb15eede37d6176094b94d70fe21f2066f7b1ed2ecf22f57ccac8
data/CHANGELOG.md CHANGED
@@ -1,5 +1,5 @@
1
- ## 2.0.0.pre.2 (Prerelease)
2
- * Drop support for Ruby `<2.7`.
1
+ ## 2.0.0
2
+ * Drop explicit support for Ruby `<2.7`.
3
3
  * Drop faraday dependencies.
4
4
  * Loosen version constraints on other dependencies.
5
5
  * Update measurometer metrics for consistency and clarity.
@@ -1,3 +1,3 @@
1
1
  module FormatParser
2
- VERSION = '2.0.0.pre.3'
2
+ VERSION = '2.0.0'
3
3
  end
data/lib/remote_io.rb CHANGED
@@ -103,12 +103,12 @@ class FormatParser::RemoteIO
103
103
  # @param uri[URI] The URI to fetch from
104
104
  # @param redirects[Integer] The amount of remaining permitted redirects
105
105
  # @return [[Integer, String]] The response body of the ranged request
106
- def request_range(range, uri = @uri, redirects = REDIRECT_LIMIT)
106
+ def request_range(range, uri = @uri, headers = @headers.clone, redirects = REDIRECT_LIMIT)
107
107
  # We use a GET and not a HEAD request followed by a GET because
108
108
  # S3 does not allow HEAD requests if you only presigned your URL for GETs, so we
109
109
  # combine the first GET of a segment and retrieving the size of the resource
110
110
  response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
111
- http.request_get(uri, @headers.merge({ 'range' => 'bytes=%d-%d' % [range.begin, range.end] }))
111
+ http.request_get(uri, headers.merge({ 'range' => 'bytes=%d-%d' % [range.begin, range.end] }))
112
112
  end
113
113
  case response
114
114
  when Net::HTTPOK
@@ -146,8 +146,8 @@ class FormatParser::RemoteIO
146
146
  if location
147
147
  new_uri = redirect_uri(location, uri)
148
148
  # Clear the Authorization header if the new URI has a different host.
149
- @headers.delete('Authorization') unless [uri.scheme, uri.host, uri.port] == [new_uri.scheme, new_uri.host, new_uri.port]
150
- request_range(range, new_uri, redirects - 1)
149
+ headers.delete('Authorization') unless [uri.scheme, uri.host, uri.port] == [new_uri.scheme, new_uri.host, new_uri.port]
150
+ request_range(range, new_uri, headers, redirects - 1)
151
151
  else
152
152
  raise InvalidRequest.new(response.code, "Server at #{uri} replied with a #{response.code}, indicating redirection; however, the location header was empty.")
153
153
  end
@@ -17,9 +17,8 @@ describe FormatParser::RemoteIO do
17
17
 
18
18
  rio = described_class.new(url)
19
19
  rio.seek(10)
20
- read_result = rio.read(100)
21
20
 
22
- expect(read_result).to eq(body)
21
+ expect(rio.read(100)).to eq(body)
23
22
  expect(stub).to have_been_requested
24
23
  end
25
24
  end
@@ -58,9 +57,8 @@ describe FormatParser::RemoteIO do
58
57
 
59
58
  rio = described_class.new(url)
60
59
  rio.seek(10)
61
- read_result = rio.read(100)
62
60
 
63
- expect(read_result).to eq(body)
61
+ expect(rio.read(100)).to eq(body)
64
62
  expect(stub).to have_been_requested
65
63
  end
66
64
 
@@ -119,9 +117,37 @@ describe FormatParser::RemoteIO do
119
117
 
120
118
  rio = described_class.new(redirecting_url, headers: { 'Authorization' => 'token' })
121
119
  rio.seek(10)
122
- read_result = rio.read(100)
123
120
 
124
- expect(read_result).to eq(body)
121
+ expect(rio.read(100)).to eq(body)
122
+ expect(redirect_stub).to have_been_requested
123
+ expect(destination_stub).to have_been_requested
124
+ end
125
+
126
+ it 'subsequent reads by the same object keep the Authorization header' do
127
+ redirecting_url = 'https://my_images.invalid/my_image'
128
+ destination_url = 'https://images.invalid/img.jpg'
129
+ body = 'response body'
130
+ auth_header = { 'Authorization' => 'token' }
131
+
132
+ redirect_stub = stub_request(:get, redirecting_url)
133
+ .with(headers: auth_header)
134
+ .to_return(headers: { 'location' => destination_url }, status: code)
135
+ destination_stub = stub_request(:get, destination_url)
136
+ .with { |request| !request.headers.key?('Authorization') }
137
+ .to_return(body: body, status: 200)
138
+
139
+ rio = described_class.new(redirecting_url, headers: auth_header)
140
+ rio.seek(10)
141
+ rio.read(100)
142
+
143
+ expect(redirect_stub).to have_been_requested
144
+ expect(destination_stub).to have_been_requested
145
+
146
+ WebMock.reset_executed_requests!
147
+
148
+ rio.seek(10)
149
+
150
+ expect(rio.read(100)).to eq(body)
125
151
  expect(redirect_stub).to have_been_requested
126
152
  expect(destination_stub).to have_been_requested
127
153
  end
@@ -145,9 +171,8 @@ describe FormatParser::RemoteIO do
145
171
 
146
172
  rio = described_class.new(redirecting_url, headers: { 'Authorization' => 'token' })
147
173
  rio.seek(10)
148
- read_result = rio.read(100)
149
174
 
150
- expect(read_result).to eq(body)
175
+ expect(rio.read(100)).to eq(body)
151
176
  expect(redirect_stub).to have_been_requested
152
177
  expect(destination_stub).to have_been_requested
153
178
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: format_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.pre.3
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Noah Berman
8
8
  - Julik Tarkhanov
9
- autorequire:
9
+ autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2022-10-31 00:00:00.000000000 Z
12
+ date: 2022-11-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exifr
@@ -287,7 +287,7 @@ licenses:
287
287
  - MIT (Hippocratic)
288
288
  metadata:
289
289
  allowed_push_host: https://rubygems.org
290
- post_install_message:
290
+ post_install_message:
291
291
  rdoc_options: []
292
292
  require_paths:
293
293
  - lib
@@ -298,12 +298,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
298
298
  version: '0'
299
299
  required_rubygems_version: !ruby/object:Gem::Requirement
300
300
  requirements:
301
- - - ">"
301
+ - - ">="
302
302
  - !ruby/object:Gem::Version
303
- version: 1.3.1
303
+ version: '0'
304
304
  requirements: []
305
- rubygems_version: 3.1.6
306
- signing_key:
305
+ rubygems_version: 3.3.7
306
+ signing_key:
307
307
  specification_version: 4
308
308
  summary: A library for efficient parsing of file metadata
309
309
  test_files: []