format_parser 1.6.0 → 2.0.0.pre

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.
@@ -4,130 +4,186 @@ describe FormatParser::RemoteIO do
4
4
  it_behaves_like 'an IO object compatible with IOConstraint'
5
5
 
6
6
  it 'returns the partial content when the server supplies a 206 status' do
7
- rio = described_class.new('https://images.invalid/img.jpg')
7
+ url = 'https://images.invalid/img.jpg'
8
+ response = Net::HTTPPartialContent.new('2', '206', 'Partial Content')
9
+ response['Content-Range'] = '10-109/2577'
10
+ allow(response).to receive(:body).and_return('Response body')
8
11
 
9
- fake_resp = double(headers: {'Content-Range' => '10-109/2577'}, status: 206, body: 'This is the response')
10
- faraday_conn = instance_double(Faraday::Connection, get: fake_resp)
11
- allow(Faraday).to receive(:new).and_return(faraday_conn)
12
- expect(faraday_conn).to receive(:get).with('https://images.invalid/img.jpg', nil, range: 'bytes=10-109')
12
+ allow(Net::HTTP).to receive(:start).and_yield(Net::HTTP).and_return(response)
13
+ allow(Net::HTTP).to receive(:request_get).and_return(response)
13
14
 
15
+ expect(Net::HTTP).to receive(:request_get).with(
16
+ an_object_satisfying { |uri| URI::HTTPS === uri && uri.to_s == url },
17
+ a_hash_including('range' => 'bytes=10-109')
18
+ )
19
+
20
+ rio = described_class.new(url)
14
21
  rio.seek(10)
15
22
  read_result = rio.read(100)
16
- expect(read_result).to eq('This is the response')
23
+
24
+ expect(read_result).to eq(response.body)
17
25
  end
18
26
 
19
27
  it 'returns the entire content when the server supplies the Content-Range response but sends a 200 status' do
20
- rio = described_class.new('https://images.invalid/img.jpg')
28
+ url = 'https://images.invalid/img.jpg'
29
+ response = Net::HTTPOK.new('2', '200', 'OK')
30
+ allow(response).to receive(:body).and_return('Response body')
31
+
32
+ allow(Net::HTTP).to receive(:start).and_yield(Net::HTTP).and_return(response)
33
+ allow(Net::HTTP).to receive(:request_get).and_return(response)
21
34
 
22
- fake_resp = double(headers: {'Content-Range' => '10-109/2577'}, status: 200, body: 'This is the response')
23
- faraday_conn = instance_double(Faraday::Connection, get: fake_resp)
24
- allow(Faraday).to receive(:new).and_return(faraday_conn)
25
- expect(faraday_conn).to receive(:get).with('https://images.invalid/img.jpg', nil, range: 'bytes=10-109')
35
+ expect(Net::HTTP).to receive(:request_get).with(
36
+ an_object_satisfying { |uri| URI::HTTPS === uri && uri.to_s == url },
37
+ a_hash_including('range' => 'bytes=10-109')
38
+ )
26
39
 
40
+ rio = described_class.new(url)
27
41
  rio.seek(10)
28
42
  read_result = rio.read(100)
29
- expect(read_result).to eq('This is the response')
43
+
44
+ expect(read_result).to eq(response.body)
30
45
  end
31
46
 
32
47
  it 'raises a specific error for all 4xx responses except 416' do
33
- rio = described_class.new('https://images.invalid/img.jpg')
48
+ url = 'https://images.invalid/img.jpg'
49
+ response = Net::HTTPForbidden.new('2', '403', 'Forbidden')
50
+
51
+ allow(Net::HTTP).to receive(:start).and_yield(Net::HTTP).and_return(response)
52
+ allow(Net::HTTP).to receive(:request_get).and_return(response)
34
53
 
35
- fake_resp = double(headers: {}, status: 403, body: 'Please log in')
36
- faraday_conn = instance_double(Faraday::Connection, get: fake_resp)
37
- allow(Faraday).to receive(:new).and_return(faraday_conn)
38
- expect(faraday_conn).to receive(:get).with('https://images.invalid/img.jpg', nil, range: 'bytes=100-199')
54
+ expect(Net::HTTP).to receive(:request_get).with(
55
+ an_object_satisfying { |uri| uri.to_s == url },
56
+ a_hash_including('range' => 'bytes=100-199')
57
+ )
39
58
 
59
+ rio = described_class.new(url)
40
60
  rio.seek(100)
61
+
41
62
  expect { rio.read(100) }.to raise_error(/replied with a 403 and refused/)
42
63
  end
43
64
 
44
65
  it 'returns nil on a 416 response' do
45
- rio = described_class.new('https://images.invalid/img.jpg')
66
+ url = 'https://images.invalid/img.jpg'
67
+ response = Net::HTTPRangeNotSatisfiable.new('2', '416', 'Range Not Satisfiable')
46
68
 
47
- fake_resp = double(headers: {}, status: 416, body: 'You stepped off the ledge of the range')
48
- faraday_conn = instance_double(Faraday::Connection, get: fake_resp)
49
- allow(Faraday).to receive(:new).and_return(faraday_conn)
50
- expect(faraday_conn).to receive(:get).with('https://images.invalid/img.jpg', nil, range: 'bytes=100-199')
69
+ allow(Net::HTTP).to receive(:start).and_yield(Net::HTTP).and_return(response)
70
+ allow(Net::HTTP).to receive(:request_get).and_return(response)
51
71
 
72
+ expect(Net::HTTP).to receive(:request_get).with(
73
+ an_object_satisfying { |uri| uri.to_s == url },
74
+ a_hash_including('range' => 'bytes=100-199')
75
+ )
76
+
77
+ rio = described_class.new(url)
52
78
  rio.seek(100)
79
+
53
80
  expect(rio.read(100)).to be_nil
54
81
  end
55
82
 
56
83
  it 'sets the status_code of the exception on a 4xx response from upstream' do
57
- rio = described_class.new('https://images.invalid/img.jpg')
84
+ url = 'https://images.invalid/img.jpg'
85
+ response = Net::HTTPForbidden.new('2', '403', 'Forbidden')
86
+
87
+ allow(Net::HTTP).to receive(:start).and_yield(Net::HTTP).and_return(response)
88
+ allow(Net::HTTP).to receive(:request_get).and_return(response)
58
89
 
59
- fake_resp = double(headers: {}, status: 403, body: 'Please log in')
60
- faraday_conn = instance_double(Faraday::Connection, get: fake_resp)
61
- allow(Faraday).to receive(:new).and_return(faraday_conn)
62
- expect(faraday_conn).to receive(:get).with('https://images.invalid/img.jpg', nil, range: 'bytes=100-199')
90
+ expect(Net::HTTP).to receive(:request_get).with(
91
+ an_object_satisfying { |uri| uri.to_s == url },
92
+ a_hash_including('range' => 'bytes=100-199')
93
+ )
63
94
 
95
+ rio = described_class.new(url)
64
96
  rio.seek(100)
65
- # rubocop: disable Lint/AmbiguousBlockAssociation
66
- expect { rio.read(100) }.to raise_error { |e| expect(e.status_code).to eq(403) }
97
+ expect { rio.read(100) }.to(raise_error { |e| expect(e.status_code).to eq(403) })
67
98
  end
68
99
 
69
100
  it 'returns a nil when the range cannot be satisfied and the response is 416' do
70
- rio = described_class.new('https://images.invalid/img.jpg')
101
+ url = 'https://images.invalid/img.jpg'
102
+ response = Net::HTTPRangeNotSatisfiable.new('2', '416', 'Range Not Satisfiable')
71
103
 
72
- fake_resp = double(headers: {}, status: 416, body: 'You jumped off the end of the file maam')
73
- faraday_conn = instance_double(Faraday::Connection, get: fake_resp)
74
- allow(Faraday).to receive(:new).and_return(faraday_conn)
75
- expect(faraday_conn).to receive(:get).with('https://images.invalid/img.jpg', nil, range: 'bytes=100-199')
104
+ allow(Net::HTTP).to receive(:start).and_yield(Net::HTTP).and_return(response)
105
+ allow(Net::HTTP).to receive(:request_get).and_return(response)
76
106
 
107
+ expect(Net::HTTP).to receive(:request_get).with(
108
+ an_object_satisfying { |uri| uri.to_s == url },
109
+ a_hash_including('range' => 'bytes=100-199')
110
+ )
111
+
112
+ rio = described_class.new(url)
77
113
  rio.seek(100)
114
+
78
115
  expect(rio.read(100)).to be_nil
79
116
  end
80
117
 
81
118
  it 'does not overwrite size when the range cannot be satisfied and the response is 416' do
82
- rio = described_class.new('https://images.invalid/img.jpg')
83
-
84
- fake_resp1 = double(headers: {'Content-Range' => 'bytes 0-0/13'}, status: 206, body: 'a')
85
- fake_resp2 = double(headers: {}, status: 416, body: 'You jumped off the end of the file maam')
86
-
87
- faraday_conn = instance_double(Faraday::Connection)
88
- allow(Faraday).to receive(:new).and_return(faraday_conn)
89
- expect(faraday_conn).to receive(:get)
90
- .with('https://images.invalid/img.jpg', nil, range: 'bytes=0-0')
119
+ url = 'https://images.invalid/img.jpg'
120
+ response_1 = Net::HTTPPartialContent.new('2', '206', 'Partial Content')
121
+ response_1['Content-Range'] = 'bytes 0-0/13'
122
+ allow(response_1).to receive(:body).and_return('Response body')
123
+ response_2 = Net::HTTPRangeNotSatisfiable.new('2', '416', 'Range Not Satisfiable')
124
+
125
+ allow(Net::HTTP).to receive(:start).and_yield(Net::HTTP).and_return(response_1, response_2)
126
+ allow(Net::HTTP).to receive(:request_get).and_return(response_1, response_2)
127
+
128
+ expect(Net::HTTP).to receive(:request_get)
129
+ .with(
130
+ an_object_satisfying { |uri| uri.to_s == url },
131
+ a_hash_including('range' => 'bytes=0-0')
132
+ )
91
133
  .ordered
92
- .and_return(fake_resp1)
93
- expect(faraday_conn).to receive(:get)
94
- .with('https://images.invalid/img.jpg', nil, range: 'bytes=100-199')
134
+ expect(Net::HTTP).to receive(:request_get)
135
+ .with(
136
+ an_object_satisfying { |uri| uri.to_s == url },
137
+ a_hash_including('range' => 'bytes=100-199')
138
+ )
95
139
  .ordered
96
- .and_return(fake_resp2)
97
140
 
141
+ rio = described_class.new(url)
98
142
  rio.read(1)
99
143
 
100
144
  expect(rio.size).to eq(13)
101
145
 
102
146
  rio.seek(100)
103
- expect(rio.read(100)).to be_nil
104
147
 
148
+ expect(rio.read(100)).to be_nil
105
149
  expect(rio.size).to eq(13)
106
150
  end
107
151
 
108
152
  it 'raises a specific error for all 5xx responses' do
109
- rio = described_class.new('https://images.invalid/img.jpg')
153
+ url = 'https://images.invalid/img.jpg'
154
+ response = Net::HTTPBadGateway.new('2', '502', 'Bad Gateway')
155
+
156
+ allow(Net::HTTP).to receive(:start).and_yield(Net::HTTP).and_return(response)
157
+ allow(Net::HTTP).to receive(:request_get).and_return(response)
110
158
 
111
- fake_resp = double(headers: {}, status: 502, body: 'Guru meditation')
112
- faraday_conn = instance_double(Faraday::Connection, get: fake_resp)
113
- allow(Faraday).to receive(:new).and_return(faraday_conn)
114
- expect(faraday_conn).to receive(:get).with('https://images.invalid/img.jpg', nil, range: 'bytes=100-199')
159
+ expect(Net::HTTP).to receive(:request_get).with(
160
+ an_object_satisfying { |uri| uri.to_s == url },
161
+ a_hash_including('range' => 'bytes=100-199')
162
+ )
115
163
 
164
+ rio = described_class.new(url)
116
165
  rio.seek(100)
166
+
117
167
  expect { rio.read(100) }.to raise_error(/replied with a 502 and we might want to retry/)
118
168
  end
119
169
 
120
170
  it 'maintains and exposes #pos' do
121
- rio = described_class.new('https://images.invalid/img.jpg')
171
+ url = 'https://images.invalid/img.jpg'
172
+ response = Net::HTTPPartialContent.new('2', '206', 'Partial Content')
173
+ response['Content-Range'] = 'bytes 0-0/13'
174
+ allow(response).to receive(:body).and_return('a')
122
175
 
123
- expect(rio.pos).to eq(0)
176
+ allow(Net::HTTP).to receive(:start).and_yield(Net::HTTP).and_return(response)
177
+ allow(Net::HTTP).to receive(:request_get).and_return(response)
124
178
 
125
- fake_resp = double(headers: {'Content-Range' => 'bytes 0-0/13'}, status: 206, body: 'a')
126
- faraday_conn = instance_double(Faraday::Connection, get: fake_resp)
127
- allow(Faraday).to receive(:new).and_return(faraday_conn)
128
- expect(faraday_conn).to receive(:get).with('https://images.invalid/img.jpg', nil, range: 'bytes=0-0')
129
- rio.read(1)
179
+ expect(Net::HTTP).to receive(:request_get).with(
180
+ an_object_satisfying { |uri| uri.to_s == url },
181
+ a_hash_including('range' => 'bytes=0-0')
182
+ )
130
183
 
184
+ rio = described_class.new(url)
185
+ expect(rio.pos).to eq(0)
186
+ rio.read(1)
131
187
  expect(rio.pos).to eq(1)
132
188
  end
133
189
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: format_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 2.0.0.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Noah Berman
@@ -9,29 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2022-09-21 00:00:00.000000000 Z
12
+ date: 2022-10-13 00:00:00.000000000 Z
13
13
  dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: ks
16
- requirement: !ruby/object:Gem::Requirement
17
- requirements:
18
- - - "~>"
19
- - !ruby/object:Gem::Version
20
- version: '0.0'
21
- type: :runtime
22
- prerelease: false
23
- version_requirements: !ruby/object:Gem::Requirement
24
- requirements:
25
- - - "~>"
26
- - !ruby/object:Gem::Version
27
- version: '0.0'
28
14
  - !ruby/object:Gem::Dependency
29
15
  name: exifr
30
16
  requirement: !ruby/object:Gem::Requirement
31
17
  requirements:
32
- - - "~>"
33
- - !ruby/object:Gem::Version
34
- version: '1'
35
18
  - - ">="
36
19
  - !ruby/object:Gem::Version
37
20
  version: 1.3.8
@@ -39,9 +22,6 @@ dependencies:
39
22
  prerelease: false
40
23
  version_requirements: !ruby/object:Gem::Requirement
41
24
  requirements:
42
- - - "~>"
43
- - !ruby/object:Gem::Version
44
- version: '1'
45
25
  - - ">="
46
26
  - !ruby/object:Gem::Version
47
27
  version: 1.3.8
@@ -49,9 +29,6 @@ dependencies:
49
29
  name: id3tag
50
30
  requirement: !ruby/object:Gem::Requirement
51
31
  requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '0.14'
55
32
  - - ">="
56
33
  - !ruby/object:Gem::Version
57
34
  version: 0.14.2
@@ -59,126 +36,109 @@ dependencies:
59
36
  prerelease: false
60
37
  version_requirements: !ruby/object:Gem::Requirement
61
38
  requirements:
62
- - - "~>"
63
- - !ruby/object:Gem::Version
64
- version: '0.14'
65
39
  - - ">="
66
40
  - !ruby/object:Gem::Version
67
41
  version: 0.14.2
68
42
  - !ruby/object:Gem::Dependency
69
- name: faraday
70
- requirement: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '0.13'
75
- type: :runtime
76
- prerelease: false
77
- version_requirements: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '0.13'
82
- - !ruby/object:Gem::Dependency
83
- name: faraday_middleware
43
+ name: ks
84
44
  requirement: !ruby/object:Gem::Requirement
85
45
  requirements:
86
- - - "~>"
46
+ - - ">="
87
47
  - !ruby/object:Gem::Version
88
- version: '0.14'
48
+ version: '0'
89
49
  type: :runtime
90
50
  prerelease: false
91
51
  version_requirements: !ruby/object:Gem::Requirement
92
52
  requirements:
93
- - - "~>"
53
+ - - ">="
94
54
  - !ruby/object:Gem::Version
95
- version: '0.14'
55
+ version: '0'
96
56
  - !ruby/object:Gem::Dependency
97
57
  name: measurometer
98
58
  requirement: !ruby/object:Gem::Requirement
99
59
  requirements:
100
- - - "~>"
60
+ - - ">="
101
61
  - !ruby/object:Gem::Version
102
- version: '1'
62
+ version: '0'
103
63
  type: :runtime
104
64
  prerelease: false
105
65
  version_requirements: !ruby/object:Gem::Requirement
106
66
  requirements:
107
- - - "~>"
67
+ - - ">="
108
68
  - !ruby/object:Gem::Version
109
- version: '1'
69
+ version: '0'
110
70
  - !ruby/object:Gem::Dependency
111
- name: rspec
71
+ name: parallel_tests
112
72
  requirement: !ruby/object:Gem::Requirement
113
73
  requirements:
114
- - - "~>"
74
+ - - ">="
115
75
  - !ruby/object:Gem::Version
116
- version: '3.0'
76
+ version: '0'
117
77
  type: :development
118
78
  prerelease: false
119
79
  version_requirements: !ruby/object:Gem::Requirement
120
80
  requirements:
121
- - - "~>"
81
+ - - ">="
122
82
  - !ruby/object:Gem::Version
123
- version: '3.0'
83
+ version: '0'
124
84
  - !ruby/object:Gem::Dependency
125
85
  name: rake
126
86
  requirement: !ruby/object:Gem::Requirement
127
87
  requirements:
128
- - - "~>"
88
+ - - ">="
129
89
  - !ruby/object:Gem::Version
130
- version: '12'
90
+ version: '0'
131
91
  type: :development
132
92
  prerelease: false
133
93
  version_requirements: !ruby/object:Gem::Requirement
134
94
  requirements:
135
- - - "~>"
95
+ - - ">="
136
96
  - !ruby/object:Gem::Version
137
- version: '12'
97
+ version: '0'
138
98
  - !ruby/object:Gem::Dependency
139
- name: simplecov
99
+ name: rspec
140
100
  requirement: !ruby/object:Gem::Requirement
141
101
  requirements:
142
- - - "~>"
102
+ - - ">="
143
103
  - !ruby/object:Gem::Version
144
- version: '0.15'
104
+ version: '0'
145
105
  type: :development
146
106
  prerelease: false
147
107
  version_requirements: !ruby/object:Gem::Requirement
148
108
  requirements:
149
- - - "~>"
109
+ - - ">="
150
110
  - !ruby/object:Gem::Version
151
- version: '0.15'
111
+ version: '0'
152
112
  - !ruby/object:Gem::Dependency
153
- name: yard
113
+ name: simplecov
154
114
  requirement: !ruby/object:Gem::Requirement
155
115
  requirements:
156
- - - "~>"
116
+ - - ">="
157
117
  - !ruby/object:Gem::Version
158
- version: '0.9'
118
+ version: '0'
159
119
  type: :development
160
120
  prerelease: false
161
121
  version_requirements: !ruby/object:Gem::Requirement
162
122
  requirements:
163
- - - "~>"
123
+ - - ">="
164
124
  - !ruby/object:Gem::Version
165
- version: '0.9'
125
+ version: '0'
166
126
  - !ruby/object:Gem::Dependency
167
127
  name: wetransfer_style
168
128
  requirement: !ruby/object:Gem::Requirement
169
129
  requirements:
170
130
  - - '='
171
131
  - !ruby/object:Gem::Version
172
- version: 0.5.0
132
+ version: 1.0.0
173
133
  type: :development
174
134
  prerelease: false
175
135
  version_requirements: !ruby/object:Gem::Requirement
176
136
  requirements:
177
137
  - - '='
178
138
  - !ruby/object:Gem::Version
179
- version: 0.5.0
139
+ version: 1.0.0
180
140
  - !ruby/object:Gem::Dependency
181
- name: parallel_tests
141
+ name: yard
182
142
  requirement: !ruby/object:Gem::Requirement
183
143
  requirements:
184
144
  - - ">="
@@ -232,6 +192,7 @@ files:
232
192
  - lib/parsers/aac_parser.rb
233
193
  - lib/parsers/aac_parser/adts_header_info.rb
234
194
  - lib/parsers/aiff_parser.rb
195
+ - lib/parsers/arw_parser.rb
235
196
  - lib/parsers/bmp_parser.rb
236
197
  - lib/parsers/cr2_parser.rb
237
198
  - lib/parsers/dpx_parser.rb
@@ -262,6 +223,7 @@ files:
262
223
  - lib/read_limiter.rb
263
224
  - lib/read_limits_config.rb
264
225
  - lib/remote_io.rb
226
+ - lib/string.rb
265
227
  - lib/text.rb
266
228
  - lib/video.rb
267
229
  - spec/active_storage/blob_io_spec.rb
@@ -278,6 +240,7 @@ files:
278
240
  - spec/parsers/aac_parser_spec.rb
279
241
  - spec/parsers/adts_header_info_spec.rb
280
242
  - spec/parsers/aiff_parser_spec.rb
243
+ - spec/parsers/arw_parser_spec.rb
281
244
  - spec/parsers/bmp_parser_spec.rb
282
245
  - spec/parsers/cr2_parser_spec.rb
283
246
  - spec/parsers/dpx_parser_spec.rb
@@ -321,9 +284,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
321
284
  version: '0'
322
285
  required_rubygems_version: !ruby/object:Gem::Requirement
323
286
  requirements:
324
- - - ">="
287
+ - - ">"
325
288
  - !ruby/object:Gem::Version
326
- version: '0'
289
+ version: 1.3.1
327
290
  requirements: []
328
291
  rubygems_version: 3.1.6
329
292
  signing_key: