format_parser 0.1.7 → 0.2.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 +4 -4
- data/README.md +47 -8
- data/format_parser.gemspec +9 -3
- data/lib/audio.rb +37 -0
- data/lib/document.rb +17 -0
- data/lib/format_parser.rb +41 -10
- data/lib/format_parser/version.rb +1 -1
- data/lib/{file_information.rb → image.rb} +5 -26
- data/lib/parsers/aiff_parser.rb +7 -4
- data/lib/parsers/dpx_parser.rb +8 -3
- data/lib/parsers/dsl.rb +29 -0
- data/lib/parsers/fdx_parser.rb +10 -7
- data/lib/parsers/gif_parser.rb +8 -5
- data/lib/parsers/jpeg_parser.rb +8 -12
- data/lib/parsers/moov_parser.rb +9 -7
- data/lib/parsers/mp3_parser.rb +7 -4
- data/lib/parsers/png_parser.rb +9 -5
- data/lib/parsers/psd_parser.rb +8 -5
- data/lib/parsers/tiff_parser.rb +9 -13
- data/lib/parsers/wav_parser.rb +6 -5
- data/lib/video.rb +33 -0
- data/spec/aiff_parser_spec.rb +6 -6
- data/spec/file_information_spec.rb +4 -4
- data/spec/format_parser_spec.rb +30 -2
- data/spec/parsers/dpx_parser_spec.rb +4 -4
- data/spec/parsers/fdx_parser_spec.rb +5 -5
- data/spec/parsers/gif_parser_spec.rb +4 -4
- data/spec/parsers/jpeg_parser_spec.rb +4 -4
- data/spec/parsers/moov_parser_spec.rb +9 -8
- data/spec/parsers/mp3_parser_spec.rb +9 -9
- data/spec/parsers/png_parser_spec.rb +4 -4
- data/spec/parsers/psd_parser_spec.rb +3 -3
- data/spec/parsers/tiff_parser_spec.rb +4 -4
- data/spec/parsers/wav_parser_spec.rb +13 -13
- data/spec/remote_fetching_spec.rb +9 -9
- metadata +14 -5
@@ -4,12 +4,12 @@ describe FormatParser::GIFParser do
|
|
4
4
|
describe 'is able to parse all the examples from FastImage' do
|
5
5
|
Dir.glob(fixtures_dir + '/*.gif').each do |gif_path|
|
6
6
|
it "is able to parse #{File.basename(gif_path)}" do
|
7
|
-
parsed = subject.
|
7
|
+
parsed = subject.call(File.open(gif_path, 'rb'))
|
8
8
|
|
9
9
|
expect(parsed).not_to be_nil
|
10
10
|
|
11
|
-
expect(parsed.
|
12
|
-
expect(parsed.
|
11
|
+
expect(parsed.nature).to eq(:image)
|
12
|
+
expect(parsed.format).to eq(:gif)
|
13
13
|
expect(parsed.color_mode).to eq(:indexed)
|
14
14
|
|
15
15
|
expect(parsed.width_px).to be_kind_of(Integer)
|
@@ -25,7 +25,7 @@ describe FormatParser::GIFParser do
|
|
25
25
|
it 'is able to parse the animated GIF' do
|
26
26
|
gif_path = fixtures_dir + "GIF/anim.gif"
|
27
27
|
|
28
|
-
parsed = subject.
|
28
|
+
parsed = subject.call(File.open(gif_path, 'rb'))
|
29
29
|
expect(parsed).not_to be_nil
|
30
30
|
|
31
31
|
expect(parsed.width_px).to eq(320)
|
@@ -4,10 +4,10 @@ describe FormatParser::JPEGParser do
|
|
4
4
|
describe 'is able to parse all the examples from FastImage' do
|
5
5
|
Dir.glob(fixtures_dir + '/*.jpg').each do |jpeg_path|
|
6
6
|
it "is able to parse #{File.basename(jpeg_path)}" do
|
7
|
-
parsed = subject.
|
7
|
+
parsed = subject.call(File.open(jpeg_path, 'rb'))
|
8
8
|
expect(parsed).not_to be_nil
|
9
|
-
expect(parsed.
|
10
|
-
expect(parsed.
|
9
|
+
expect(parsed.nature).to eq(:image)
|
10
|
+
expect(parsed.format).to eq(:jpg)
|
11
11
|
|
12
12
|
expect(parsed.width_px).to be_kind_of(Integer)
|
13
13
|
expect(parsed.width_px).to be > 0
|
@@ -21,7 +21,7 @@ describe FormatParser::JPEGParser do
|
|
21
21
|
describe 'is able to parse all the JPEG exif examples from FastImage' do
|
22
22
|
Dir.glob(fixtures_dir + '/exif-orientation-testimages/jpg/*.jpg').each do |jpeg_path|
|
23
23
|
it "is able to parse #{File.basename(jpeg_path)}" do
|
24
|
-
parsed = subject.
|
24
|
+
parsed = subject.call(File.open(jpeg_path, 'rb'))
|
25
25
|
expect(parsed).not_to be_nil
|
26
26
|
|
27
27
|
expect(parsed.orientation).to be_kind_of(Symbol)
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
describe FormatParser::MOOVParser do
|
@@ -31,10 +32,10 @@ describe FormatParser::MOOVParser do
|
|
31
32
|
|
32
33
|
Dir.glob(fixtures_dir + '/MOOV/**/*.*').sort.each do |moov_path|
|
33
34
|
it "is able to parse #{File.basename(moov_path)}" do
|
34
|
-
result = subject.
|
35
|
+
result = subject.call(File.open(moov_path, 'rb'))
|
35
36
|
|
36
37
|
expect(result).not_to be_nil
|
37
|
-
expect(result.
|
38
|
+
expect(result.nature).to eq(:video)
|
38
39
|
expect(result.width_px).to be > 0
|
39
40
|
expect(result.height_px).to be > 0
|
40
41
|
expect(result.media_duration_seconds).to be_kind_of(Float)
|
@@ -49,11 +50,11 @@ describe FormatParser::MOOVParser do
|
|
49
50
|
it 'parses a MOV file and provides the necessary metadata' do
|
50
51
|
mov_path = fixtures_dir + '/MOOV/MOV/Test_Circular_ProRes422.mov'
|
51
52
|
|
52
|
-
result = subject.
|
53
|
+
result = subject.call(File.open(mov_path, 'rb'))
|
53
54
|
|
54
55
|
expect(result).not_to be_nil
|
55
|
-
expect(result.
|
56
|
-
expect(result.
|
56
|
+
expect(result.nature).to eq(:video)
|
57
|
+
expect(result.format).to eq(:mov)
|
57
58
|
expect(result.width_px).to eq(1920)
|
58
59
|
expect(result.height_px).to eq(1080)
|
59
60
|
end
|
@@ -61,11 +62,11 @@ describe FormatParser::MOOVParser do
|
|
61
62
|
it 'parses an MP4 video file and provides the necessary metadata' do
|
62
63
|
mov_path = fixtures_dir + '/MOOV/MP4/bmff.mp4'
|
63
64
|
|
64
|
-
result = subject.
|
65
|
+
result = subject.call(File.open(mov_path, 'rb'))
|
65
66
|
|
66
67
|
expect(result).not_to be_nil
|
67
|
-
expect(result.
|
68
|
-
expect(result.
|
68
|
+
expect(result.nature).to eq(:video)
|
69
|
+
expect(result.format).to eq(:mov)
|
69
70
|
expect(result.width_px).to eq(160)
|
70
71
|
expect(result.height_px).to eq(90)
|
71
72
|
end
|
@@ -3,12 +3,12 @@ require 'spec_helper'
|
|
3
3
|
describe FormatParser::MP3Parser do
|
4
4
|
it 'decodes and estimates duration for a VBR MP3' do
|
5
5
|
fpath = fixtures_dir + '/MP3/atc_fixture_vbr.mp3'
|
6
|
-
parsed = subject.
|
6
|
+
parsed = subject.call(File.open(fpath, 'rb'))
|
7
7
|
|
8
8
|
expect(parsed).not_to be_nil
|
9
9
|
|
10
|
-
expect(parsed.
|
11
|
-
expect(parsed.
|
10
|
+
expect(parsed.nature).to eq(:audio)
|
11
|
+
expect(parsed.format).to eq(:mp3)
|
12
12
|
expect(parsed.num_audio_channels).to eq(2)
|
13
13
|
expect(parsed.audio_sample_rate_hz).to eq(44100)
|
14
14
|
expect(parsed.intrinsics).not_to be_nil
|
@@ -17,12 +17,12 @@ describe FormatParser::MP3Parser do
|
|
17
17
|
|
18
18
|
it 'decodes and estimates duration for a CBR MP3' do
|
19
19
|
fpath = fixtures_dir + '/MP3/atc_fixture_cbr.mp3'
|
20
|
-
parsed = subject.
|
20
|
+
parsed = subject.call(File.open(fpath, 'rb'))
|
21
21
|
|
22
22
|
expect(parsed).not_to be_nil
|
23
23
|
|
24
|
-
expect(parsed.
|
25
|
-
expect(parsed.
|
24
|
+
expect(parsed.nature).to eq(:audio)
|
25
|
+
expect(parsed.format).to eq(:mp3)
|
26
26
|
expect(parsed.num_audio_channels).to eq(2)
|
27
27
|
expect(parsed.audio_sample_rate_hz).to eq(44100)
|
28
28
|
expect(parsed.intrinsics).not_to be_nil
|
@@ -31,12 +31,12 @@ describe FormatParser::MP3Parser do
|
|
31
31
|
|
32
32
|
it 'parses the Cassy MP3' do
|
33
33
|
fpath = fixtures_dir + '/MP3/Cassy.mp3'
|
34
|
-
parsed = subject.
|
34
|
+
parsed = subject.call(File.open(fpath, 'rb'))
|
35
35
|
|
36
36
|
expect(parsed).not_to be_nil
|
37
37
|
|
38
|
-
expect(parsed.
|
39
|
-
expect(parsed.
|
38
|
+
expect(parsed.nature).to eq(:audio)
|
39
|
+
expect(parsed.format).to eq(:mp3)
|
40
40
|
expect(parsed.num_audio_channels).to eq(2)
|
41
41
|
expect(parsed.audio_sample_rate_hz).to eq(44100)
|
42
42
|
expect(parsed.intrinsics).not_to be_nil
|
@@ -4,10 +4,10 @@ describe FormatParser::PNGParser do
|
|
4
4
|
describe 'is able to parse all the examples from FastImage' do
|
5
5
|
Dir.glob(fixtures_dir + '/*.png').each do |png_path|
|
6
6
|
it "is able to parse #{File.basename(png_path)}" do
|
7
|
-
parsed = subject.
|
7
|
+
parsed = subject.call(File.open(png_path, 'rb'))
|
8
8
|
expect(parsed).not_to be_nil
|
9
|
-
expect(parsed.
|
10
|
-
expect(parsed.
|
9
|
+
expect(parsed.nature).to eq(:image)
|
10
|
+
expect(parsed.format).to eq(:png)
|
11
11
|
expect(parsed.color_mode).to eq(:indexed)
|
12
12
|
|
13
13
|
expect(parsed.width_px).to be_kind_of(Integer)
|
@@ -22,7 +22,7 @@ describe FormatParser::PNGParser do
|
|
22
22
|
it 'is able to parse an animated PNG' do
|
23
23
|
gif_path = fixtures_dir + "PNG/anim.png"
|
24
24
|
|
25
|
-
parsed = subject.
|
25
|
+
parsed = subject.call(File.open(gif_path, 'rb'))
|
26
26
|
expect(parsed).not_to be_nil
|
27
27
|
|
28
28
|
expect(parsed.width_px).to eq(320)
|
@@ -4,11 +4,11 @@ describe FormatParser::PSDParser do
|
|
4
4
|
describe 'is able to parse all the examples from FastImage' do
|
5
5
|
Dir.glob(fixtures_dir + '/*.psd').each do |psd_path|
|
6
6
|
it "is able to parse #{File.basename(psd_path)}" do
|
7
|
-
parsed = subject.
|
7
|
+
parsed = subject.call(File.open(psd_path, 'rb'))
|
8
8
|
|
9
9
|
expect(parsed).not_to be_nil
|
10
|
-
expect(parsed.
|
11
|
-
expect(parsed.
|
10
|
+
expect(parsed.nature).to eq(:image)
|
11
|
+
expect(parsed.format).to eq(:psd)
|
12
12
|
|
13
13
|
expect(parsed.width_px).to be_kind_of(Integer)
|
14
14
|
expect(parsed.width_px).to be > 0
|
@@ -4,11 +4,11 @@ describe FormatParser::TIFFParser do
|
|
4
4
|
describe 'is able to parse all the examples from FastImage' do
|
5
5
|
Dir.glob(fixtures_dir + '/TIFF/*.tif').each do |tiff_path|
|
6
6
|
it "is able to parse #{File.basename(tiff_path)}" do
|
7
|
-
parsed = subject.
|
7
|
+
parsed = subject.call(File.open(tiff_path, 'rb'))
|
8
8
|
|
9
9
|
expect(parsed).not_to be_nil
|
10
|
-
expect(parsed.
|
11
|
-
expect(parsed.
|
10
|
+
expect(parsed.nature).to eq(:image)
|
11
|
+
expect(parsed.format).to eq(:tif)
|
12
12
|
|
13
13
|
expect(parsed.width_px).to be_kind_of(Integer)
|
14
14
|
expect(parsed.width_px).to be > 0
|
@@ -22,7 +22,7 @@ describe FormatParser::TIFFParser do
|
|
22
22
|
describe 'is able to parse all the TIFF exif examples from FastImage' do
|
23
23
|
Dir.glob(fixtures_dir + '/exif-orientation-testimages/tiff-*/*.tif').each do |tiff_path|
|
24
24
|
it "is able to parse #{File.basename(tiff_path)}" do
|
25
|
-
parsed = subject.
|
25
|
+
parsed = subject.call(File.open(tiff_path, 'rb'))
|
26
26
|
expect(parsed).not_to be_nil
|
27
27
|
|
28
28
|
expect(parsed.orientation).to be_kind_of(Symbol)
|
@@ -5,18 +5,18 @@ describe FormatParser::WAVParser do
|
|
5
5
|
# while fixtures prefixed with d_ deviate from the standard.
|
6
6
|
Dir.glob(fixtures_dir + '/WAV/c_*.*').each do |wav_path|
|
7
7
|
it "is able to parse #{File.basename(wav_path)}" do
|
8
|
-
parse_result = subject.
|
8
|
+
parse_result = subject.call(File.open(wav_path, 'rb'))
|
9
9
|
|
10
|
-
expect(parse_result.
|
11
|
-
expect(parse_result.
|
10
|
+
expect(parse_result.nature).to eq(:audio)
|
11
|
+
expect(parse_result.format).to eq(:wav)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
it "returns correct info about pcm files" do
|
16
|
-
parse_result = subject.
|
16
|
+
parse_result = subject.call(File.open(__dir__ + '/../fixtures/WAV/c_8kmp316.wav', 'rb'))
|
17
17
|
|
18
|
-
expect(parse_result.
|
19
|
-
expect(parse_result.
|
18
|
+
expect(parse_result.nature).to eq(:audio)
|
19
|
+
expect(parse_result.format).to eq(:wav)
|
20
20
|
expect(parse_result.num_audio_channels).to eq(1)
|
21
21
|
expect(parse_result.audio_sample_rate_hz).to eq(8000)
|
22
22
|
expect(parse_result.media_duration_frames).to eq(110488)
|
@@ -24,10 +24,10 @@ describe FormatParser::WAVParser do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
it "returns correct info about pcm files with more channels" do
|
27
|
-
parse_result = subject.
|
27
|
+
parse_result = subject.call(File.open(__dir__ + '/../fixtures/WAV/c_39064__alienbomb__atmo-truck.wav', 'rb'))
|
28
28
|
|
29
|
-
expect(parse_result.
|
30
|
-
expect(parse_result.
|
29
|
+
expect(parse_result.nature).to eq(:audio)
|
30
|
+
expect(parse_result.format).to eq(:wav)
|
31
31
|
expect(parse_result.num_audio_channels).to eq(2)
|
32
32
|
expect(parse_result.audio_sample_rate_hz).to eq(44100)
|
33
33
|
expect(parse_result.media_duration_frames).to eq(162832)
|
@@ -35,10 +35,10 @@ describe FormatParser::WAVParser do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
it "returns correct info about non pcm files" do
|
38
|
-
parse_result = subject.
|
38
|
+
parse_result = subject.call(File.open(__dir__ + '/../fixtures/WAV/c_11k16bitpcm.wav', 'rb'))
|
39
39
|
|
40
|
-
expect(parse_result.
|
41
|
-
expect(parse_result.
|
40
|
+
expect(parse_result.nature).to eq(:audio)
|
41
|
+
expect(parse_result.format).to eq(:wav)
|
42
42
|
expect(parse_result.num_audio_channels).to eq(1)
|
43
43
|
expect(parse_result.audio_sample_rate_hz).to eq(11025)
|
44
44
|
expect(parse_result.media_duration_frames).to eq(152267)
|
@@ -47,7 +47,7 @@ describe FormatParser::WAVParser do
|
|
47
47
|
|
48
48
|
it "cannot parse file with audio format different from 1 and no 'fact' chunk" do
|
49
49
|
expect {
|
50
|
-
subject.
|
50
|
+
subject.call(File.open(__dir__ + '/../fixtures/WAV/d_6_Channel_ID.wav', 'rb'))
|
51
51
|
}.to raise_error(FormatParser::IOUtils::InvalidRead)
|
52
52
|
end
|
53
53
|
end
|
@@ -22,23 +22,23 @@ describe 'Fetching data from HTTP remotes' do
|
|
22
22
|
it 'parses the animated PNG over HTTP' do
|
23
23
|
file_information = FormatParser.parse_http('http://localhost:9399/PNG/anim.png')
|
24
24
|
expect(file_information).not_to be_nil
|
25
|
-
expect(file_information.
|
25
|
+
expect(file_information.first.nature).to eq(:image)
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'parses the JPEGs exif data' do
|
29
29
|
file_information = FormatParser.parse_http('http://localhost:9399/exif-orientation-testimages/jpg/top_left.jpg')
|
30
30
|
expect(file_information).not_to be_nil
|
31
|
-
expect(file_information.
|
32
|
-
expect(file_information.
|
33
|
-
expect(file_information.orientation).to eq(:top_left)
|
31
|
+
expect(file_information.first.nature).to eq(:image)
|
32
|
+
expect(file_information.first.format).to eq(:jpg)
|
33
|
+
expect(file_information.first.orientation).to eq(:top_left)
|
34
34
|
end
|
35
35
|
|
36
36
|
it 'parses the TIFFs exif data' do
|
37
37
|
file_information = FormatParser.parse_http('http://localhost:9399/TIFF/test.tif')
|
38
38
|
expect(file_information).not_to be_nil
|
39
|
-
expect(file_information.
|
40
|
-
expect(file_information.
|
41
|
-
expect(file_information.orientation).to eq(:top_left)
|
39
|
+
expect(file_information.first.nature).to eq(:image)
|
40
|
+
expect(file_information.first.format).to eq(:tif)
|
41
|
+
expect(file_information.first.orientation).to eq(:top_left)
|
42
42
|
end
|
43
43
|
|
44
44
|
describe 'is able to correctly parse orientation for all remote JPEG EXIF examples from FastImage' do
|
@@ -49,9 +49,9 @@ describe 'Fetching data from HTTP remotes' do
|
|
49
49
|
file_information = FormatParser.parse_http(remote_jpeg_path)
|
50
50
|
expect(file_information).not_to be_nil
|
51
51
|
|
52
|
-
expect(file_information.orientation).to be_kind_of(Symbol)
|
52
|
+
expect(file_information.first.orientation).to be_kind_of(Symbol)
|
53
53
|
# Filenames in this dir correspond with the orientation of the file
|
54
|
-
expect(filename.include?(file_information.orientation.to_s)).to be true
|
54
|
+
expect(filename.include?(file_information.first.orientation.to_s)).to be true
|
55
55
|
end
|
56
56
|
end
|
57
57
|
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: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Noah Berman
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-01-
|
12
|
+
date: 2018-01-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ks
|
@@ -144,14 +144,17 @@ files:
|
|
144
144
|
- README.md
|
145
145
|
- Rakefile
|
146
146
|
- format_parser.gemspec
|
147
|
+
- lib/audio.rb
|
147
148
|
- lib/care.rb
|
148
|
-
- lib/
|
149
|
+
- lib/document.rb
|
149
150
|
- lib/format_parser.rb
|
150
151
|
- lib/format_parser/version.rb
|
152
|
+
- lib/image.rb
|
151
153
|
- lib/io_constraint.rb
|
152
154
|
- lib/io_utils.rb
|
153
155
|
- lib/parsers/aiff_parser.rb
|
154
156
|
- lib/parsers/dpx_parser.rb
|
157
|
+
- lib/parsers/dsl.rb
|
155
158
|
- lib/parsers/exif_parser.rb
|
156
159
|
- lib/parsers/fdx_parser.rb
|
157
160
|
- lib/parsers/gif_parser.rb
|
@@ -167,6 +170,7 @@ files:
|
|
167
170
|
- lib/parsers/wav_parser.rb
|
168
171
|
- lib/read_limiter.rb
|
169
172
|
- lib/remote_io.rb
|
173
|
+
- lib/video.rb
|
170
174
|
- spec/aiff_parser_spec.rb
|
171
175
|
- spec/care_spec.rb
|
172
176
|
- spec/file_information_spec.rb
|
@@ -192,7 +196,12 @@ licenses:
|
|
192
196
|
- MIT
|
193
197
|
metadata:
|
194
198
|
allowed_push_host: https://rubygems.org
|
195
|
-
post_install_message:
|
199
|
+
post_install_message: "\n -----------------------------------------------------------------------------\n
|
200
|
+
\ | ATTENTION: format_parser v0.2.0 introduces changes to the gem's interface.|\n
|
201
|
+
\ | See https://github.com/WeTransfer/format_parser#basic-usage |\n
|
202
|
+
\ | for up-to-date usage instructions. Thank you for using format_parser! :) |\n
|
203
|
+
\ -----------------------------------------------------------------------------\n
|
204
|
+
\ "
|
196
205
|
rdoc_options: []
|
197
206
|
require_paths:
|
198
207
|
- lib
|
@@ -208,7 +217,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
208
217
|
version: '0'
|
209
218
|
requirements: []
|
210
219
|
rubyforge_project:
|
211
|
-
rubygems_version: 2.5.
|
220
|
+
rubygems_version: 2.5.1
|
212
221
|
signing_key:
|
213
222
|
specification_version: 4
|
214
223
|
summary: A library for efficient parsing of file metadata
|