format_parser 0.25.5 → 0.25.6
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/CHANGELOG.md +3 -0
- data/lib/format_parser.rb +17 -3
- data/lib/format_parser/version.rb +1 -1
- data/spec/format_parser_spec.rb +20 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dbc915cd212f2207b6f54cc4b567ea342a0bfd76af1e5e3db23330a6cc879e27
|
4
|
+
data.tar.gz: 0a623b8303cbf40a58d348b4e1adcda2d6fc0170b411fba529f9d3ae53533282
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ed65c67f508264c0c6c12e88287266ef2bb9346c7e44934ac2e8ac97001de8f5e7f605bdd497ee6f95a45bcf4ad7f6b69021d25739e85debafaecfca76153ce
|
7
|
+
data.tar.gz: 4b250cd8f41bbba735e5d90a4a829c4fea699f04dd190a37499853ed48475aecd19f6d32360f081474355a4f5f9c562e1ca78e8c7c8aba91e5fb9e0ca4930299
|
data/CHANGELOG.md
CHANGED
data/lib/format_parser.rb
CHANGED
@@ -49,8 +49,10 @@ module FormatParser
|
|
49
49
|
parser_provided_formats = Array(formats)
|
50
50
|
parser_provided_natures = Array(natures)
|
51
51
|
PARSER_MUX.synchronize do
|
52
|
-
|
53
|
-
|
52
|
+
# It can't be a Set because the method `parsers_for` depends on the order
|
53
|
+
# that the parsers were added.
|
54
|
+
@parsers ||= []
|
55
|
+
@parsers << callable_parser unless @parsers.include?(callable_parser)
|
54
56
|
@parsers_per_nature ||= {}
|
55
57
|
parser_provided_natures.each do |provided_nature|
|
56
58
|
@parsers_per_nature[provided_nature] ||= Set.new
|
@@ -255,7 +257,19 @@ module FormatParser
|
|
255
257
|
# Order the parsers according to their priority value. The ones having a lower
|
256
258
|
# value will sort higher and will be applied sooner
|
257
259
|
parsers_in_order_of_priority = parsers.to_a.sort do |parser_a, parser_b|
|
258
|
-
@parser_priorities[parser_a]
|
260
|
+
if @parser_priorities[parser_a] != @parser_priorities[parser_b]
|
261
|
+
@parser_priorities[parser_a] <=> @parser_priorities[parser_b]
|
262
|
+
else
|
263
|
+
# Some parsers have the same priority and we want them to be always sorted
|
264
|
+
# in the same way, to not change the result of FormatParser.parse(results: :first).
|
265
|
+
# When this changes, it can generate flaky tests or event different
|
266
|
+
# results in different environments, which can be hard to understand why.
|
267
|
+
# There is also no guarantee in the order that the elements are added in
|
268
|
+
# @@parser_priorities
|
269
|
+
# So, to have always the same order, we sort by the order that the parsers
|
270
|
+
# were registered if the priorities are the same.
|
271
|
+
@parsers.index(parser_a) <=> @parsers.index(parser_b)
|
272
|
+
end
|
259
273
|
end
|
260
274
|
|
261
275
|
# If there is one parser that is more likely to match, place it first
|
data/spec/format_parser_spec.rb
CHANGED
@@ -173,6 +173,26 @@ describe FormatParser do
|
|
173
173
|
prioritized_parsers = FormatParser.parsers_for([:archive, :document, :image, :audio], [:tif, :jpg, :zip, :docx, :mp3, :aiff], 'a-file.zip')
|
174
174
|
expect(prioritized_parsers.first).to be_kind_of(FormatParser::ZIPParser)
|
175
175
|
end
|
176
|
+
|
177
|
+
it 'sorts the parsers by priority and name' do
|
178
|
+
parsers = FormatParser.parsers_for(
|
179
|
+
[:audio, :image],
|
180
|
+
[:cr2, :dpx, :fdx, :flac, :gif, :jpg, :mov, :mp4, :m4a, :mp3, :mpg, :mpeg, :ogg, :png, :tif, :wav]
|
181
|
+
)
|
182
|
+
|
183
|
+
expect(parsers.map { |parser| parser.class.name }).to eq([
|
184
|
+
'FormatParser::GIFParser',
|
185
|
+
'Class',
|
186
|
+
'FormatParser::PNGParser',
|
187
|
+
'FormatParser::CR2Parser',
|
188
|
+
'FormatParser::DPXParser',
|
189
|
+
'FormatParser::FLACParser',
|
190
|
+
'FormatParser::MP3Parser',
|
191
|
+
'FormatParser::OggParser',
|
192
|
+
'FormatParser::TIFFParser',
|
193
|
+
'FormatParser::WAVParser'
|
194
|
+
])
|
195
|
+
end
|
176
196
|
end
|
177
197
|
|
178
198
|
describe '.register_parser and .deregister_parser' do
|
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.25.
|
4
|
+
version: 0.25.6
|
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: 2020-12-
|
12
|
+
date: 2020-12-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ks
|
@@ -292,7 +292,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
292
292
|
- !ruby/object:Gem::Version
|
293
293
|
version: '0'
|
294
294
|
requirements: []
|
295
|
-
rubygems_version: 3.
|
295
|
+
rubygems_version: 3.1.4
|
296
296
|
signing_key:
|
297
297
|
specification_version: 4
|
298
298
|
summary: A library for efficient parsing of file metadata
|