mime-types 3.2.2 → 3.3
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/Contributing.md +2 -0
- data/History.md +16 -1
- data/Licence.md +1 -1
- data/Rakefile +39 -11
- data/lib/mime/type.rb +49 -35
- data/lib/mime/type/columnar.rb +1 -1
- data/lib/mime/types.rb +4 -3
- data/lib/mime/types/_columnar.rb +8 -9
- data/lib/mime/types/cache.rb +5 -5
- data/lib/mime/types/container.rb +9 -7
- data/lib/mime/types/deprecations.rb +0 -2
- data/lib/mime/types/registry.rb +7 -7
- data/test/minitest_helper.rb +0 -2
- data/test/test_mime_type.rb +13 -17
- data/test/test_mime_types.rb +10 -12
- data/test/test_mime_types_cache.rb +1 -3
- data/test/test_mime_types_class.rb +9 -11
- data/test/test_mime_types_lazy.rb +0 -2
- data/test/test_mime_types_loader.rb +1 -3
- metadata +7 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7c3e98bd6269827964418e761cda4c4699372a96b842c0bf161357201025974
|
4
|
+
data.tar.gz: e57d04551653914d1d184e35f0531be89665a23f4442a658f0fe5b59e7c61cec
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5e53279a2f70e31beba311206b779f175d4b0f5e516b858c0d6154787f3970bf0b977c0fb91a5739a8dce8a3a89958b58984be1d70ab9b81ca17f9e619bf920a
|
7
|
+
data.tar.gz: a2e8e7bf38b05e8536e4892ff2c3a0cdf30a7306c54620af78f36f5db77173bc3bb8ca47010527e8d74f3efd4eeb2fd937208d7951b6703764319d7d885b12b9
|
data/Contributing.md
CHANGED
@@ -115,6 +115,7 @@ Thanks to everyone else who has contributed to mime-types over the years:
|
|
115
115
|
* Hans de Graaff
|
116
116
|
* Henrik Hodne
|
117
117
|
* Janko Marohnić
|
118
|
+
* Jean Boussier
|
118
119
|
* Jeremy Evans
|
119
120
|
* Juanito Fatas
|
120
121
|
* Jun Aruga
|
@@ -124,6 +125,7 @@ Thanks to everyone else who has contributed to mime-types over the years:
|
|
124
125
|
* Martin d'Allens
|
125
126
|
* Mauricio Linhares
|
126
127
|
* Nicolas Leger
|
128
|
+
* Nicholas La Roux
|
127
129
|
* nycvotes-dev
|
128
130
|
* Postmodern
|
129
131
|
* Richard Hirner
|
data/History.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
## 3.3 / 2019-09-04
|
2
|
+
|
3
|
+
* 1 minor enhancement
|
4
|
+
|
5
|
+
* Jean Boussier reduced memory usage for Ruby versions 2.3 or higher by
|
6
|
+
interning various string values in each type. This is done with a
|
7
|
+
backwards-compatible call that _freezes_ the strings on older
|
8
|
+
versions of Ruby. [#141][]
|
9
|
+
|
10
|
+
* Administrivia:
|
11
|
+
|
12
|
+
* Nicholas La Roux updated Travis build configurations. [#139][]
|
13
|
+
|
1
14
|
## 3.2.2 / 2018-08-12
|
2
15
|
|
3
16
|
* Hiroto Fukui removed a stray `debugger` statement that I had used in
|
@@ -50,7 +63,7 @@
|
|
50
63
|
* Documentation Changes:
|
51
64
|
|
52
65
|
* Supporting files are now Markdown instead of rdoc, except for the
|
53
|
-
README.
|
66
|
+
README.
|
54
67
|
|
55
68
|
* The history file has been modified to remove all history prior to 3.0.
|
56
69
|
This history can be found in previous commits.
|
@@ -203,6 +216,8 @@
|
|
203
216
|
[#135]: https://github.com/mime-types/ruby-mime-types/pull/135
|
204
217
|
[#136]: https://github.com/mime-types/ruby-mime-types/issues/136
|
205
218
|
[#137]: https://github.com/mime-types/ruby-mime-types/pull/137
|
219
|
+
[#139]: https://github.com/mime-types/ruby-mime-types/pull/139
|
220
|
+
[#141]: https://github.com/mime-types/ruby-mime-types/pull/141
|
206
221
|
[Code-of-Conduct.md]: Code-of-Conduct_md.html
|
207
222
|
[Contributor Covenant]: http://contributor-covenant.org
|
208
223
|
[mime-types-data]: https://github.com/mime-types/mime-types-data
|
data/Licence.md
CHANGED
data/Rakefile
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# -*- ruby encoding: utf-8 -*-
|
4
|
-
|
5
3
|
require 'rubygems'
|
6
4
|
require 'hoe'
|
7
5
|
require 'rake/clean'
|
@@ -37,7 +35,7 @@ spec = Hoe.spec 'mime-types' do
|
|
37
35
|
extra_dev_deps << ['minitest-bonus-assertions', '~> 3.0']
|
38
36
|
extra_dev_deps << ['minitest-hooks', '~> 1.4']
|
39
37
|
extra_dev_deps << ['rake', '>= 10.0', '< 13.0']
|
40
|
-
extra_dev_deps << ['fivemat', '~> 1.3'
|
38
|
+
extra_dev_deps << ['fivemat', '~> 1.3']
|
41
39
|
extra_dev_deps << ['minitest-rg', '~> 5.2']
|
42
40
|
|
43
41
|
if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.0')
|
@@ -56,7 +54,7 @@ namespace :benchmark do
|
|
56
54
|
end
|
57
55
|
|
58
56
|
desc 'Benchmark Load Times'
|
59
|
-
task :load, [
|
57
|
+
task :load, [:repeats] => 'benchmark:support' do |_, args|
|
60
58
|
require 'benchmarks/load'
|
61
59
|
Benchmarks::Load.report(
|
62
60
|
File.join(Rake.application.original_dir, 'lib'),
|
@@ -65,7 +63,7 @@ namespace :benchmark do
|
|
65
63
|
end
|
66
64
|
|
67
65
|
desc 'Allocation counts'
|
68
|
-
task :allocations, [
|
66
|
+
task :allocations, [:top_x, :mime_types_only] => 'benchmark:support' do |_, args|
|
69
67
|
require 'benchmarks/load_allocations'
|
70
68
|
Benchmarks::LoadAllocations.report(
|
71
69
|
top_x: args.top_x,
|
@@ -74,7 +72,7 @@ namespace :benchmark do
|
|
74
72
|
end
|
75
73
|
|
76
74
|
desc 'Columnar allocation counts'
|
77
|
-
task 'allocations:columnar', [
|
75
|
+
task 'allocations:columnar', [:top_x, :mime_types_only] => 'benchmark:support' do |_, args|
|
78
76
|
require 'benchmarks/load_allocations'
|
79
77
|
Benchmarks::LoadAllocations.report(
|
80
78
|
columnar: true,
|
@@ -84,7 +82,7 @@ namespace :benchmark do
|
|
84
82
|
end
|
85
83
|
|
86
84
|
desc 'Columnar allocation counts (full load)'
|
87
|
-
task 'allocations:columnar:full', [
|
85
|
+
task 'allocations:columnar:full', [:top_x, :mime_types_only] => 'benchmark:support' do |_, args|
|
88
86
|
require 'benchmarks/load_allocations'
|
89
87
|
Benchmarks::LoadAllocations.report(
|
90
88
|
columnar: true,
|
@@ -94,6 +92,36 @@ namespace :benchmark do
|
|
94
92
|
)
|
95
93
|
end
|
96
94
|
|
95
|
+
desc 'Memory profiler'
|
96
|
+
task :memory, [:top_x, :mime_types_only] => 'benchmark:support' do |_, args|
|
97
|
+
require 'benchmarks/memory_profiler'
|
98
|
+
Benchmarks::ProfileMemory.report(
|
99
|
+
mime_types_only: args.mime_types_only,
|
100
|
+
top_x: args.top_x
|
101
|
+
)
|
102
|
+
end
|
103
|
+
|
104
|
+
desc 'Columnar memory profiler'
|
105
|
+
task 'memory:columnar', [:top_x, :mime_types_only] => 'benchmark:support' do |_, args|
|
106
|
+
require 'benchmarks/memory_profiler'
|
107
|
+
Benchmarks::ProfileMemory.report(
|
108
|
+
columnar: true,
|
109
|
+
mime_types_only: args.mime_types_only,
|
110
|
+
top_x: args.top_x
|
111
|
+
)
|
112
|
+
end
|
113
|
+
|
114
|
+
desc 'Columnar allocation counts (full load)'
|
115
|
+
task 'memory:columnar:full', [:top_x, :mime_types_only] => 'benchmark:support' do |_, args|
|
116
|
+
require 'benchmarks/memory_profiler'
|
117
|
+
Benchmarks::ProfileMemory.report(
|
118
|
+
columnar: true,
|
119
|
+
full: true,
|
120
|
+
top_x: args.top_x,
|
121
|
+
mime_types_only: args.mime_types_only
|
122
|
+
)
|
123
|
+
end
|
124
|
+
|
97
125
|
desc 'Object counts'
|
98
126
|
task objects: 'benchmark:support' do
|
99
127
|
require 'benchmarks/object_counts'
|
@@ -131,7 +159,7 @@ namespace :profile do
|
|
131
159
|
'-R', 'mime/types',
|
132
160
|
'-s', 'self',
|
133
161
|
'-p', 'multi',
|
134
|
-
'-f',
|
162
|
+
'-f', output.to_s,
|
135
163
|
script.to_s
|
136
164
|
]
|
137
165
|
ruby args.join(' ')
|
@@ -194,7 +222,7 @@ namespace :convert do
|
|
194
222
|
rdoc = name
|
195
223
|
mark = "#{File.basename(name, '.rdoc')}.md"
|
196
224
|
|
197
|
-
file mark => [
|
225
|
+
file mark => [rdoc, :setup] do |t|
|
198
226
|
puts "#{rdoc} => #{mark}"
|
199
227
|
File.open(t.name, 'wb') { |target|
|
200
228
|
target.write @doc_converter.convert(IO.read(t.prerequisites.first))
|
@@ -203,7 +231,7 @@ namespace :convert do
|
|
203
231
|
|
204
232
|
CLEAN.add mark
|
205
233
|
|
206
|
-
task run: [
|
234
|
+
task run: [mark]
|
207
235
|
end
|
208
236
|
end
|
209
237
|
|
@@ -211,7 +239,7 @@ namespace :convert do
|
|
211
239
|
task docs: 'convert:docs:run'
|
212
240
|
end
|
213
241
|
|
214
|
-
task 'deps:top', [
|
242
|
+
task 'deps:top', [:number] do |_, args|
|
215
243
|
require 'net/http'
|
216
244
|
require 'json'
|
217
245
|
|
data/lib/mime/type.rb
CHANGED
@@ -57,17 +57,17 @@ class MIME::Type
|
|
57
57
|
end
|
58
58
|
|
59
59
|
# The released version of the mime-types library.
|
60
|
-
VERSION = '3.
|
60
|
+
VERSION = '3.3'
|
61
61
|
|
62
62
|
include Comparable
|
63
63
|
|
64
64
|
# :stopdoc:
|
65
65
|
# TODO verify mime-type character restrictions; I am pretty sure that this is
|
66
66
|
# too wide open.
|
67
|
-
MEDIA_TYPE_RE = %r{([-\w.+]+)/([-\w.+]*)}
|
68
|
-
I18N_RE =
|
69
|
-
BINARY_ENCODINGS = %w(base64 8bit)
|
70
|
-
ASCII_ENCODINGS = %w(7bit quoted-printable)
|
67
|
+
MEDIA_TYPE_RE = %r{([-\w.+]+)/([-\w.+]*)}.freeze
|
68
|
+
I18N_RE = /[^[:alnum:]]/.freeze
|
69
|
+
BINARY_ENCODINGS = %w(base64 8bit).freeze
|
70
|
+
ASCII_ENCODINGS = %w(7bit quoted-printable).freeze
|
71
71
|
# :startdoc:
|
72
72
|
|
73
73
|
private_constant :MEDIA_TYPE_RE, :I18N_RE, :BINARY_ENCODINGS,
|
@@ -301,7 +301,7 @@ class MIME::Type
|
|
301
301
|
|
302
302
|
# Returns the default encoding for the MIME::Type based on the media type.
|
303
303
|
def default_encoding
|
304
|
-
|
304
|
+
@media_type == 'text' ? 'quoted-printable' : 'base64'
|
305
305
|
end
|
306
306
|
|
307
307
|
##
|
@@ -321,7 +321,7 @@ class MIME::Type
|
|
321
321
|
|
322
322
|
# Returns +true+ if the media type is obsolete.
|
323
323
|
attr_accessor :obsolete
|
324
|
-
|
324
|
+
alias obsolete? obsolete
|
325
325
|
|
326
326
|
# The documentation for this MIME::Type.
|
327
327
|
attr_accessor :docs
|
@@ -331,7 +331,7 @@ class MIME::Type
|
|
331
331
|
# call-seq:
|
332
332
|
# text_plain.friendly # => "Text File"
|
333
333
|
# text_plain.friendly('en') # => "Text File"
|
334
|
-
def friendly(lang = 'en'
|
334
|
+
def friendly(lang = 'en')
|
335
335
|
@friendly ||= {}
|
336
336
|
|
337
337
|
case lang
|
@@ -367,8 +367,8 @@ class MIME::Type
|
|
367
367
|
attr_reader :xrefs
|
368
368
|
|
369
369
|
##
|
370
|
-
def xrefs=(
|
371
|
-
@xrefs = MIME::Types::Container.new(
|
370
|
+
def xrefs=(xrefs) # :nodoc:
|
371
|
+
@xrefs = MIME::Types::Container.new(xrefs)
|
372
372
|
end
|
373
373
|
|
374
374
|
# The decoded cross-reference URL list for this MIME::Type.
|
@@ -381,7 +381,7 @@ class MIME::Type
|
|
381
381
|
|
382
382
|
# Indicates whether the MIME type has been registered with IANA.
|
383
383
|
attr_accessor :registered
|
384
|
-
|
384
|
+
alias registered? registered
|
385
385
|
|
386
386
|
# MIME types can be specified to be sent across a network in particular
|
387
387
|
# formats. This method returns +true+ when the MIME::Type encoding is set
|
@@ -399,7 +399,7 @@ class MIME::Type
|
|
399
399
|
|
400
400
|
# Indicateswhether the MIME type is declared as a signature type.
|
401
401
|
attr_accessor :signature
|
402
|
-
|
402
|
+
alias signature? signature
|
403
403
|
|
404
404
|
# Returns +true+ if the MIME::Type specifies an extension list,
|
405
405
|
# indicating that it is a complete MIME::Type.
|
@@ -438,17 +438,15 @@ class MIME::Type
|
|
438
438
|
#
|
439
439
|
# This method should be considered a private implementation detail.
|
440
440
|
def encode_with(coder)
|
441
|
-
coder['content-type']
|
442
|
-
coder['docs']
|
443
|
-
unless @friendly.nil? or @friendly.empty?
|
444
|
-
|
445
|
-
|
446
|
-
coder['encoding'] = @encoding
|
447
|
-
coder['extensions'] = @extensions.to_a unless @extensions.empty?
|
441
|
+
coder['content-type'] = @content_type
|
442
|
+
coder['docs'] = @docs unless @docs.nil? or @docs.empty?
|
443
|
+
coder['friendly'] = @friendly unless @friendly.nil? or @friendly.empty?
|
444
|
+
coder['encoding'] = @encoding
|
445
|
+
coder['extensions'] = @extensions.to_a unless @extensions.empty?
|
448
446
|
coder['preferred-extension'] = @preferred_extension if @preferred_extension
|
449
447
|
if obsolete?
|
450
|
-
coder['obsolete']
|
451
|
-
coder['use-instead']
|
448
|
+
coder['obsolete'] = obsolete?
|
449
|
+
coder['use-instead'] = use_instead if use_instead
|
452
450
|
end
|
453
451
|
unless xrefs.empty?
|
454
452
|
{}.tap do |hash|
|
@@ -458,8 +456,8 @@ class MIME::Type
|
|
458
456
|
coder['xrefs'] = hash
|
459
457
|
end
|
460
458
|
end
|
461
|
-
coder['registered']
|
462
|
-
coder['signature']
|
459
|
+
coder['registered'] = registered?
|
460
|
+
coder['signature'] = signature? if signature?
|
463
461
|
coder
|
464
462
|
end
|
465
463
|
|
@@ -504,7 +502,7 @@ class MIME::Type
|
|
504
502
|
# use with the I18n library.
|
505
503
|
def i18n_key(content_type)
|
506
504
|
simplify_matchdata(match(content_type), joiner: '.') { |e|
|
507
|
-
e.gsub!(I18N_RE, '-'
|
505
|
+
e.gsub!(I18N_RE, '-')
|
508
506
|
}
|
509
507
|
end
|
510
508
|
|
@@ -521,12 +519,12 @@ class MIME::Type
|
|
521
519
|
|
522
520
|
private
|
523
521
|
|
524
|
-
def simplify_matchdata(matchdata, remove_x = false, joiner: '/'
|
522
|
+
def simplify_matchdata(matchdata, remove_x = false, joiner: '/')
|
525
523
|
return nil unless matchdata
|
526
524
|
|
527
525
|
matchdata.captures.map { |e|
|
528
526
|
e.downcase!
|
529
|
-
e.sub!(
|
527
|
+
e.sub!(/^x-/, '') if remove_x
|
530
528
|
yield e if block_given?
|
531
529
|
e
|
532
530
|
}.join(joiner)
|
@@ -539,11 +537,28 @@ class MIME::Type
|
|
539
537
|
match = MEDIA_TYPE_RE.match(type_string)
|
540
538
|
fail InvalidContentType, type_string if match.nil?
|
541
539
|
|
542
|
-
@content_type = type_string
|
540
|
+
@content_type = intern_string(type_string)
|
543
541
|
@raw_media_type, @raw_sub_type = match.captures
|
544
|
-
@simplified = MIME::Type.simplified(match)
|
545
|
-
@i18n_key = MIME::Type.i18n_key(match)
|
542
|
+
@simplified = intern_string(MIME::Type.simplified(match))
|
543
|
+
@i18n_key = intern_string(MIME::Type.i18n_key(match))
|
546
544
|
@media_type, @sub_type = MEDIA_TYPE_RE.match(@simplified).captures
|
545
|
+
|
546
|
+
@raw_media_type = intern_string(@raw_media_type)
|
547
|
+
@raw_sub_type = intern_string(@raw_sub_type)
|
548
|
+
@media_type = intern_string(@media_type)
|
549
|
+
@sub_type = intern_string(@sub_type)
|
550
|
+
end
|
551
|
+
|
552
|
+
if String.method_defined?(:-@)
|
553
|
+
def intern_string(string)
|
554
|
+
-string
|
555
|
+
end
|
556
|
+
else
|
557
|
+
# MRI 2.2 and older don't have a method for string interning,
|
558
|
+
# so we simply freeze them for keeping a similar interface
|
559
|
+
def intern_string(string)
|
560
|
+
string.freeze
|
561
|
+
end
|
547
562
|
end
|
548
563
|
|
549
564
|
def xref_map(values, helper)
|
@@ -551,23 +566,22 @@ class MIME::Type
|
|
551
566
|
end
|
552
567
|
|
553
568
|
def xref_url_for_rfc(value)
|
554
|
-
'http://www.iana.org/go/%s'
|
569
|
+
'http://www.iana.org/go/%s' % value
|
555
570
|
end
|
556
571
|
|
557
572
|
def xref_url_for_draft(value)
|
558
|
-
'http://www.iana.org/go/%s'
|
573
|
+
'http://www.iana.org/go/%s' % value.sub(/\ARFC/, 'draft')
|
559
574
|
end
|
560
575
|
|
561
576
|
def xref_url_for_rfc_errata(value)
|
562
|
-
'http://www.rfc-editor.org/errata_search.php?eid=%s'
|
577
|
+
'http://www.rfc-editor.org/errata_search.php?eid=%s' % value
|
563
578
|
end
|
564
579
|
|
565
580
|
def xref_url_for_person(value)
|
566
|
-
'http://www.iana.org/assignments/media-types/media-types.xhtml#%s'
|
567
|
-
value
|
581
|
+
'http://www.iana.org/assignments/media-types/media-types.xhtml#%s' % value
|
568
582
|
end
|
569
583
|
|
570
584
|
def xref_url_for_template(value)
|
571
|
-
'http://www.iana.org/assignments/media-types/%s'
|
585
|
+
'http://www.iana.org/assignments/media-types/%s' % value
|
572
586
|
end
|
573
587
|
end
|
data/lib/mime/type/columnar.rb
CHANGED
data/lib/mime/types.rb
CHANGED
@@ -155,7 +155,7 @@ class MIME::Types
|
|
155
155
|
a.priority_compare(b)
|
156
156
|
}
|
157
157
|
end
|
158
|
-
|
158
|
+
alias of type_for
|
159
159
|
|
160
160
|
# Add one or more MIME::Type objects to the set of known types. If the
|
161
161
|
# type is already known, a warning will be displayed.
|
@@ -185,9 +185,9 @@ class MIME::Types
|
|
185
185
|
# truthy value to suppress that warning.
|
186
186
|
def add_type(type, quiet = false)
|
187
187
|
if !quiet and @type_variants[type.simplified].include?(type)
|
188
|
-
MIME::Types.logger.warn <<-
|
188
|
+
MIME::Types.logger.warn <<-WARNING
|
189
189
|
Type #{type} is already registered as a variant of #{type.simplified}.
|
190
|
-
|
190
|
+
WARNING
|
191
191
|
end
|
192
192
|
|
193
193
|
add_type_variant!(type)
|
@@ -202,6 +202,7 @@ Type #{type} is already registered as a variant of #{type.simplified}.
|
|
202
202
|
|
203
203
|
def reindex_extensions!(mime_type)
|
204
204
|
return unless @type_variants[mime_type.simplified].include?(mime_type)
|
205
|
+
|
205
206
|
index_extensions!(mime_type)
|
206
207
|
end
|
207
208
|
|
data/lib/mime/types/_columnar.rb
CHANGED
@@ -45,7 +45,7 @@ module MIME::Types::Columnar
|
|
45
45
|
i = -1
|
46
46
|
column = File.join(@__root__, "mime.#{name}.column")
|
47
47
|
|
48
|
-
IO.readlines(column, encoding: 'UTF-8'
|
48
|
+
IO.readlines(column, encoding: 'UTF-8').each do |line|
|
49
49
|
line.chomp!
|
50
50
|
|
51
51
|
if lookup
|
@@ -63,7 +63,6 @@ module MIME::Types::Columnar
|
|
63
63
|
def load_encoding
|
64
64
|
each_file_line('encoding') do |type, line|
|
65
65
|
pool ||= {}
|
66
|
-
line.freeze
|
67
66
|
type.instance_variable_set(:@encoding, (pool[line] ||= line))
|
68
67
|
end
|
69
68
|
end
|
@@ -108,11 +107,11 @@ module MIME::Types::Columnar
|
|
108
107
|
end
|
109
108
|
|
110
109
|
def dict(line, array: false)
|
111
|
-
if line == '-'
|
110
|
+
if line == '-'
|
112
111
|
{}
|
113
112
|
else
|
114
|
-
line.split('|'
|
115
|
-
k, v = l.split('^'
|
113
|
+
line.split('|').each_with_object({}) { |l, h|
|
114
|
+
k, v = l.split('^')
|
116
115
|
v = nil if v.empty?
|
117
116
|
h[k] = array ? Array(v) : v
|
118
117
|
}
|
@@ -120,18 +119,18 @@ module MIME::Types::Columnar
|
|
120
119
|
end
|
121
120
|
|
122
121
|
def arr(line)
|
123
|
-
if line == '-'
|
122
|
+
if line == '-'
|
124
123
|
[]
|
125
124
|
else
|
126
|
-
line.split('|'
|
125
|
+
line.split('|').flatten.compact.uniq
|
127
126
|
end
|
128
127
|
end
|
129
128
|
|
130
129
|
def opt(line)
|
131
|
-
line unless line == '-'
|
130
|
+
line unless line == '-'
|
132
131
|
end
|
133
132
|
|
134
133
|
def flag(line)
|
135
|
-
line == '1'
|
134
|
+
line == '1'
|
136
135
|
end
|
137
136
|
end
|
data/lib/mime/types/cache.rb
CHANGED
@@ -22,16 +22,16 @@ class << MIME::Types::Cache
|
|
22
22
|
if cache.version == MIME::Types::Data::VERSION
|
23
23
|
Marshal.load(cache.data)
|
24
24
|
else
|
25
|
-
MIME::Types.logger.warn <<-
|
25
|
+
MIME::Types.logger.warn <<-WARNING.chomp
|
26
26
|
Could not load MIME::Types cache: invalid version
|
27
|
-
|
27
|
+
WARNING
|
28
28
|
nil
|
29
29
|
end
|
30
30
|
rescue => e
|
31
|
-
MIME::Types.logger.warn <<-
|
31
|
+
MIME::Types.logger.warn <<-WARNING.chomp
|
32
32
|
Could not load MIME::Types cache: #{e}
|
33
|
-
|
34
|
-
|
33
|
+
WARNING
|
34
|
+
nil
|
35
35
|
end
|
36
36
|
|
37
37
|
# Attempts to save the types provided to the cache file provided.
|
data/lib/mime/types/container.rb
CHANGED
@@ -22,12 +22,13 @@ class MIME::Types::Container #:nodoc:
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def []=(key, value)
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
25
|
+
container[key] =
|
26
|
+
case value
|
27
|
+
when Set
|
28
|
+
value
|
29
|
+
else
|
30
|
+
Set[*value]
|
31
|
+
end
|
31
32
|
end
|
32
33
|
|
33
34
|
def merge(other)
|
@@ -37,7 +38,7 @@ class MIME::Types::Container #:nodoc:
|
|
37
38
|
def merge!(other)
|
38
39
|
tap {
|
39
40
|
other = other.kind_of?(MIME::Types::Container) ? other.container : other
|
40
|
-
|
41
|
+
container.merge!(other)
|
41
42
|
normalize
|
42
43
|
}
|
43
44
|
end
|
@@ -85,6 +86,7 @@ class MIME::Types::Container #:nodoc:
|
|
85
86
|
def normalize
|
86
87
|
container.each do |k, v|
|
87
88
|
next if v.kind_of?(Set)
|
89
|
+
|
88
90
|
container[k] = Set[*v]
|
89
91
|
end
|
90
92
|
end
|
data/lib/mime/types/registry.rb
CHANGED
@@ -33,7 +33,7 @@ class << MIME::Types
|
|
33
33
|
def type_for(filename)
|
34
34
|
__types__.type_for(filename)
|
35
35
|
end
|
36
|
-
|
36
|
+
alias of type_for
|
37
37
|
|
38
38
|
# MIME::Types#add against the default MIME::Types registry.
|
39
39
|
def add(*types)
|
@@ -43,13 +43,13 @@ class << MIME::Types
|
|
43
43
|
private
|
44
44
|
|
45
45
|
def lazy_load?
|
46
|
-
|
47
|
-
|
46
|
+
return unless ENV.key?('RUBY_MIME_TYPES_LAZY_LOAD')
|
47
|
+
|
48
|
+
MIME::Types.logger.warn <<-WARNING.chomp
|
48
49
|
Lazy loading ($RUBY_MIME_TYPES_LAZY_LOAD) is deprecated and will be removed.
|
49
|
-
|
50
|
+
WARNING
|
50
51
|
|
51
|
-
|
52
|
-
end
|
52
|
+
(lazy = ENV['RUBY_MIME_TYPES_LAZY_LOAD']) && (lazy != 'false')
|
53
53
|
end
|
54
54
|
|
55
55
|
def __types__
|
@@ -63,7 +63,7 @@ Lazy loading ($RUBY_MIME_TYPES_LAZY_LOAD) is deprecated and will be removed.
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def load_default_mime_types(mode = load_mode)
|
66
|
-
if @__types__ = MIME::Types::Cache.load
|
66
|
+
if (@__types__ = MIME::Types::Cache.load)
|
67
67
|
__instances__.add(@__types__)
|
68
68
|
else
|
69
69
|
@__types__ = MIME::Types::Loader.load(mode)
|
data/test/minitest_helper.rb
CHANGED
data/test/test_mime_type.rb
CHANGED
@@ -1,13 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# -*- ruby encoding: utf-8 -*-
|
4
|
-
|
5
3
|
require 'mime/types'
|
6
4
|
require 'minitest_helper'
|
7
5
|
|
8
6
|
describe MIME::Type do
|
9
|
-
# it { fail }
|
10
|
-
|
11
7
|
def mime_type(content_type)
|
12
8
|
MIME::Type.new(content_type) { |mt| yield mt if block_given? }
|
13
9
|
end
|
@@ -333,8 +329,8 @@ describe MIME::Type do
|
|
333
329
|
end
|
334
330
|
|
335
331
|
it 'sorts (2) based on extensions' do
|
336
|
-
text_1.extensions = [
|
337
|
-
text_2.extensions = [
|
332
|
+
text_1.extensions = ['foo', 'bar']
|
333
|
+
text_2.extensions = ['foo']
|
338
334
|
|
339
335
|
assert_priority_same text_1, text_2
|
340
336
|
|
@@ -476,7 +472,7 @@ describe MIME::Type do
|
|
476
472
|
|
477
473
|
describe '#to_s, #to_str' do
|
478
474
|
it 'represents itself as a string of the canonical content_type' do
|
479
|
-
assert_equal 'text/plain', "#{text_plain}"
|
475
|
+
assert_equal 'text/plain', "#{text_plain}" # rubocop:disable Style/UnneededInterpolation
|
480
476
|
end
|
481
477
|
|
482
478
|
it 'acts like a string of the canonical content_type for comparison' do
|
@@ -490,7 +486,7 @@ describe MIME::Type do
|
|
490
486
|
|
491
487
|
describe '#xrefs, #xrefs=' do
|
492
488
|
let(:expected) {
|
493
|
-
MIME::Types::Container.new(
|
489
|
+
MIME::Types::Container.new('rfc' => Set['rfc1234', 'rfc5678'])
|
494
490
|
}
|
495
491
|
|
496
492
|
it 'returns the expected results' do
|
@@ -518,13 +514,13 @@ describe MIME::Type do
|
|
518
514
|
let(:type) {
|
519
515
|
mime_type('a/b').tap do |t|
|
520
516
|
t.xrefs = {
|
521
|
-
'draft'
|
522
|
-
'template'
|
523
|
-
'person'
|
524
|
-
'rfc'
|
525
|
-
'rfc-errata' => [
|
526
|
-
'uri'
|
527
|
-
'text'
|
517
|
+
'draft' => ['RFC1'],
|
518
|
+
'template' => ['a/b'],
|
519
|
+
'person' => ['p-1'],
|
520
|
+
'rfc' => ['rfc-1'],
|
521
|
+
'rfc-errata' => ['err-1'],
|
522
|
+
'uri' => ['http://example.org'],
|
523
|
+
'text' => ['text']
|
528
524
|
}
|
529
525
|
end
|
530
526
|
}
|
@@ -588,10 +584,10 @@ describe MIME::Type do
|
|
588
584
|
|
589
585
|
it 'merges new values from an array parameter' do
|
590
586
|
expected = { 'en' => 'Text files' }
|
591
|
-
assert_equal expected, text_plain.friendly([
|
587
|
+
assert_equal expected, text_plain.friendly(['en', 'Text files'])
|
592
588
|
expected.update('fr' => 'des fichiers texte')
|
593
589
|
assert_equal expected,
|
594
|
-
text_plain.friendly([
|
590
|
+
text_plain.friendly(['fr', 'des fichiers texte'])
|
595
591
|
end
|
596
592
|
|
597
593
|
it 'merges new values from a hash parameter' do
|
data/test/test_mime_types.rb
CHANGED
@@ -1,13 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# -*- ruby encoding: utf-8 -*-
|
4
|
-
|
5
3
|
require 'mime/types'
|
6
4
|
require 'minitest_helper'
|
7
5
|
|
8
6
|
describe MIME::Types do
|
9
7
|
def mime_types
|
10
|
-
@mime_types ||= MIME::Types.new.tap
|
8
|
+
@mime_types ||= MIME::Types.new.tap { |mt|
|
11
9
|
mt.add MIME::Type.new(['text/plain', %w(txt)]),
|
12
10
|
MIME::Type.new(['image/jpeg', %w(jpg jpeg)]),
|
13
11
|
MIME::Type.new('application/x-wordperfect6.1'),
|
@@ -21,12 +19,12 @@ describe MIME::Types do
|
|
21
19
|
'extensions' => 'gz',
|
22
20
|
'registered' => true
|
23
21
|
)
|
24
|
-
|
22
|
+
}
|
25
23
|
end
|
26
24
|
|
27
25
|
describe 'is enumerable' do
|
28
26
|
it 'correctly uses an Enumerable method like #any?' do
|
29
|
-
assert
|
27
|
+
assert(mime_types.any? { |type| type.content_type == 'text/plain' })
|
30
28
|
end
|
31
29
|
|
32
30
|
it 'implements each with no parameters to return an Enumerator' do
|
@@ -95,11 +93,11 @@ describe MIME::Types do
|
|
95
93
|
|
96
94
|
describe '#add' do
|
97
95
|
let(:eruby) { MIME::Type.new('application/x-eruby') }
|
98
|
-
let(:jinja) { MIME::Type.new('application/jinja2'
|
96
|
+
let(:jinja) { MIME::Type.new('application/jinja2') }
|
99
97
|
|
100
98
|
it 'successfully adds a new type' do
|
101
99
|
mime_types.add(eruby)
|
102
|
-
assert_equal mime_types['application/x-eruby'], [
|
100
|
+
assert_equal mime_types['application/x-eruby'], [eruby]
|
103
101
|
end
|
104
102
|
|
105
103
|
it 'complains about adding a duplicate type' do
|
@@ -115,13 +113,13 @@ describe MIME::Types do
|
|
115
113
|
assert_output '', '' do
|
116
114
|
mime_types.add(eruby, :silent)
|
117
115
|
end
|
118
|
-
assert_equal mime_types['application/x-eruby'], [
|
116
|
+
assert_equal mime_types['application/x-eruby'], [eruby]
|
119
117
|
end
|
120
118
|
|
121
119
|
it 'successfully adds from an array' do
|
122
|
-
mime_types.add([
|
123
|
-
assert_equal mime_types['application/x-eruby'], [
|
124
|
-
assert_equal mime_types['application/jinja2'], [
|
120
|
+
mime_types.add([eruby, jinja])
|
121
|
+
assert_equal mime_types['application/x-eruby'], [eruby]
|
122
|
+
assert_equal mime_types['application/jinja2'], [jinja]
|
125
123
|
end
|
126
124
|
|
127
125
|
it 'successfully adds from another MIME::Types' do
|
@@ -130,7 +128,7 @@ describe MIME::Types do
|
|
130
128
|
assert_equal mime_types.count, mt.count
|
131
129
|
|
132
130
|
mime_types.each do |type|
|
133
|
-
assert_equal mt[type.content_type], [
|
131
|
+
assert_equal mt[type.content_type], [type]
|
134
132
|
end
|
135
133
|
end
|
136
134
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# -*- ruby encoding: utf-8 -*-
|
4
|
-
|
5
3
|
require 'mime/types'
|
6
4
|
require 'minitest_helper'
|
7
5
|
|
@@ -69,7 +67,7 @@ describe MIME::Types::Cache do
|
|
69
67
|
it 'outputs an error when there is a marshal file incompatibility' do
|
70
68
|
MIME::Types::Cache.save
|
71
69
|
data = File.binread(@cache_file).reverse
|
72
|
-
File.open(@cache_file, 'wb')
|
70
|
+
File.open(@cache_file, 'wb') do |f| f.write(data) end
|
73
71
|
MIME::Types.instance_variable_set(:@__types__, nil)
|
74
72
|
assert_output '', /incompatible marshal file format/ do
|
75
73
|
MIME::Types['text/html']
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# -*- ruby encoding: utf-8 -*-
|
4
|
-
|
5
3
|
require 'mime/types'
|
6
4
|
require 'minitest_helper'
|
7
5
|
|
@@ -12,7 +10,7 @@ describe MIME::Types, 'registry' do
|
|
12
10
|
|
13
11
|
describe 'is enumerable' do
|
14
12
|
it 'correctly uses an Enumerable method like #any?' do
|
15
|
-
assert
|
13
|
+
assert(MIME::Types.any? { |type| type.content_type == 'text/plain' })
|
16
14
|
end
|
17
15
|
|
18
16
|
it 'implements each with no parameters to return an Enumerator' do
|
@@ -45,7 +43,7 @@ describe MIME::Types, 'registry' do
|
|
45
43
|
|
46
44
|
it 'sorts by priority with multiple matches' do
|
47
45
|
types = MIME::Types[/gzip$/].select { |t|
|
48
|
-
|
46
|
+
%w(application/gzip application/x-gzip multipart/x-gzip).include?(t)
|
49
47
|
}
|
50
48
|
# This is this way because of a new type ending with gzip that only
|
51
49
|
# appears in some data files.
|
@@ -117,11 +115,11 @@ describe MIME::Types, 'registry' do
|
|
117
115
|
end
|
118
116
|
|
119
117
|
let(:eruby) { MIME::Type.new('application/x-eruby') }
|
120
|
-
let(:jinja) { MIME::Type.new('application/jinja2'
|
118
|
+
let(:jinja) { MIME::Type.new('application/jinja2') }
|
121
119
|
|
122
120
|
it 'successfully adds a new type' do
|
123
121
|
MIME::Types.add(eruby)
|
124
|
-
assert_equal MIME::Types['application/x-eruby'], [
|
122
|
+
assert_equal MIME::Types['application/x-eruby'], [eruby]
|
125
123
|
end
|
126
124
|
|
127
125
|
it 'complains about adding a duplicate type' do
|
@@ -137,13 +135,13 @@ describe MIME::Types, 'registry' do
|
|
137
135
|
assert_silent do
|
138
136
|
MIME::Types.add(eruby, :silent)
|
139
137
|
end
|
140
|
-
assert_equal MIME::Types['application/x-eruby'], [
|
138
|
+
assert_equal MIME::Types['application/x-eruby'], [eruby]
|
141
139
|
end
|
142
140
|
|
143
141
|
it 'successfully adds from an array' do
|
144
|
-
MIME::Types.add([
|
145
|
-
assert_equal MIME::Types['application/x-eruby'], [
|
146
|
-
assert_equal MIME::Types['application/jinja2'], [
|
142
|
+
MIME::Types.add([eruby, jinja])
|
143
|
+
assert_equal MIME::Types['application/x-eruby'], [eruby]
|
144
|
+
assert_equal MIME::Types['application/jinja2'], [jinja]
|
147
145
|
end
|
148
146
|
|
149
147
|
it 'successfully adds from another MIME::Types' do
|
@@ -155,7 +153,7 @@ describe MIME::Types, 'registry' do
|
|
155
153
|
MIME::Types.add(mt)
|
156
154
|
assert_equal old_count + 1, MIME::Types.count
|
157
155
|
|
158
|
-
assert_equal MIME::Types[eruby.content_type], [
|
156
|
+
assert_equal MIME::Types[eruby.content_type], [eruby]
|
159
157
|
end
|
160
158
|
end
|
161
159
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# -*- ruby encoding: utf-8 -*-
|
4
|
-
|
5
3
|
require 'mime/types'
|
6
4
|
require 'minitest_helper'
|
7
5
|
|
@@ -18,7 +16,7 @@ describe MIME::Types::Loader do
|
|
18
16
|
refute(types['audio/webm'].first.registered?)
|
19
17
|
|
20
18
|
assert_equal('Fixes a bug with IE6 and progressive JPEGs',
|
21
|
-
|
19
|
+
types['image/pjpeg'].first.docs)
|
22
20
|
|
23
21
|
assert(types['audio/vnd.qcelp'].first.obsolete?)
|
24
22
|
assert_equal('audio/QCELP', types['audio/vnd.qcelp'].first.use_instead)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mime-types
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: '3.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Austin Ziegler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-09-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mime-types-data
|
@@ -235,7 +235,7 @@ dependencies:
|
|
235
235
|
version: '4.0'
|
236
236
|
- - "<"
|
237
237
|
- !ruby/object:Gem::Version
|
238
|
-
version: '
|
238
|
+
version: '7'
|
239
239
|
type: :development
|
240
240
|
prerelease: false
|
241
241
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -245,21 +245,21 @@ dependencies:
|
|
245
245
|
version: '4.0'
|
246
246
|
- - "<"
|
247
247
|
- !ruby/object:Gem::Version
|
248
|
-
version: '
|
248
|
+
version: '7'
|
249
249
|
- !ruby/object:Gem::Dependency
|
250
250
|
name: hoe
|
251
251
|
requirement: !ruby/object:Gem::Requirement
|
252
252
|
requirements:
|
253
253
|
- - "~>"
|
254
254
|
- !ruby/object:Gem::Version
|
255
|
-
version: '3.
|
255
|
+
version: '3.18'
|
256
256
|
type: :development
|
257
257
|
prerelease: false
|
258
258
|
version_requirements: !ruby/object:Gem::Requirement
|
259
259
|
requirements:
|
260
260
|
- - "~>"
|
261
261
|
- !ruby/object:Gem::Version
|
262
|
-
version: '3.
|
262
|
+
version: '3.18'
|
263
263
|
description: |-
|
264
264
|
The mime-types library provides a library and registry for information about
|
265
265
|
MIME content type definitions. It can be used to determine defined filename
|
@@ -337,8 +337,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
337
337
|
- !ruby/object:Gem::Version
|
338
338
|
version: '0'
|
339
339
|
requirements: []
|
340
|
-
|
341
|
-
rubygems_version: 2.7.7
|
340
|
+
rubygems_version: 3.0.3
|
342
341
|
signing_key:
|
343
342
|
specification_version: 4
|
344
343
|
summary: The mime-types library provides a library and registry for information about
|