mime-types 2.3 → 2.4.1
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 +8 -8
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.travis.yml +2 -0
- data/Contributing.rdoc +2 -0
- data/History-Types.rdoc +26 -0
- data/History.rdoc +24 -0
- data/Licence.rdoc +3 -2
- data/Manifest.txt +2 -1
- data/README.rdoc +24 -9
- data/Rakefile +41 -15
- data/data/mime-types.json +1 -1
- data/lib/mime/type.rb +75 -10
- data/lib/mime/types.rb +13 -5
- data/lib/mime/types/loader.rb +12 -21
- data/support/benchmarks/load.rb +55 -0
- data/support/convert.rb +14 -4
- data/test/bad-fixtures/malformed +9 -0
- data/test/test_mime_type.rb +86 -1
- data/test/test_mime_types.rb +2 -0
- data/test/test_mime_types_class.rb +2 -0
- data/test/test_mime_types_loader.rb +11 -2
- metadata +34 -62
- metadata.gz.sig +0 -0
- data/support/benchmarker.rb +0 -55
data/lib/mime/types.rb
CHANGED
@@ -97,7 +97,11 @@ class MIME::Types
|
|
97
97
|
|
98
98
|
# Iterates through the type variants.
|
99
99
|
def each
|
100
|
-
|
100
|
+
if block_given?
|
101
|
+
@type_variants.each_value { |tv| tv.each { |t| yield t } }
|
102
|
+
else
|
103
|
+
enum_for(:each)
|
104
|
+
end
|
101
105
|
end
|
102
106
|
|
103
107
|
@__types__ = nil
|
@@ -165,7 +169,7 @@ class MIME::Types
|
|
165
169
|
# current platform will be returned. This parameter has been deprecated.
|
166
170
|
def type_for(filename, platform = false)
|
167
171
|
types = Array(filename).flat_map { |fn|
|
168
|
-
@extension_index[
|
172
|
+
@extension_index[fn.chomp.downcase[/\.?([^.]*?)$/, 1]]
|
169
173
|
}.compact.sort { |a, b| a.priority_compare(b) }.uniq
|
170
174
|
|
171
175
|
if platform
|
@@ -206,8 +210,8 @@ class MIME::Types
|
|
206
210
|
# a truthy value to suppress that warning.
|
207
211
|
def add_type(mime_type, quiet = false)
|
208
212
|
if !quiet and @type_variants[mime_type.simplified].include?(mime_type)
|
209
|
-
warn(
|
210
|
-
|
213
|
+
warn('Type %s is already registered as a variant of %s.' %
|
214
|
+
[ mime_type, mime_type.simplified ])
|
211
215
|
end
|
212
216
|
|
213
217
|
add_type_variant!(mime_type)
|
@@ -237,7 +241,11 @@ class MIME::Types
|
|
237
241
|
|
238
242
|
# MIME::Types#each against the default MIME::Types registry.
|
239
243
|
def each
|
240
|
-
|
244
|
+
if block_given?
|
245
|
+
__types__.each { |t| yield t }
|
246
|
+
else
|
247
|
+
enum_for(:each)
|
248
|
+
end
|
241
249
|
end
|
242
250
|
|
243
251
|
# MIME::Types#type_for against the default MIME::Types registry.
|
data/lib/mime/types/loader.rb
CHANGED
@@ -11,10 +11,8 @@ require 'mime/types/loader_path'
|
|
11
11
|
# 3. The value of MIME::Types::Loader::PATH.
|
12
12
|
#
|
13
13
|
# When #load is called, the +path+ will be searched recursively for all YAML
|
14
|
-
# (.yml or .yaml) files. By convention, there is one file for each media
|
15
|
-
# (application.yml, audio.yml, etc.), but this is not required.
|
16
|
-
#
|
17
|
-
#
|
14
|
+
# (.yml or .yaml) files. By convention, there is one file for each media
|
15
|
+
# type (application.yml, audio.yml, etc.), but this is not required.
|
18
16
|
class MIME::Types::Loader
|
19
17
|
# The path that will be read for the MIME::Types files.
|
20
18
|
attr_reader :path
|
@@ -81,6 +79,8 @@ class MIME::Types::Loader
|
|
81
79
|
container
|
82
80
|
end
|
83
81
|
|
82
|
+
BadV1Format = Class.new(Exception)
|
83
|
+
|
84
84
|
class << self
|
85
85
|
# Loads the default MIME::Type registry.
|
86
86
|
def load
|
@@ -124,36 +124,27 @@ class MIME::Types::Loader
|
|
124
124
|
# more information that's available, though, the richer the values that can
|
125
125
|
# be provided.
|
126
126
|
def load_from_v1(filename)
|
127
|
+
MIME.deprecated(self.class, __method__)
|
127
128
|
data = read_file(filename).split($/)
|
128
129
|
mime = MIME::Types.new
|
129
130
|
data.each_with_index { |line, index|
|
130
131
|
item = line.chomp.strip
|
131
132
|
next if item.empty?
|
132
133
|
|
133
|
-
|
134
|
-
|
135
|
-
|
134
|
+
m = MIME::Types::Loader::V1_FORMAT.match(item)
|
135
|
+
|
136
|
+
unless m
|
136
137
|
warn <<-EOS
|
137
|
-
#{filename}:#{index}: Parsing error in v1 MIME type definition.
|
138
|
+
#{filename}:#{index + 1}: Parsing error in v1 MIME type definition.
|
138
139
|
=> #{line}
|
139
140
|
EOS
|
140
|
-
raise
|
141
|
+
raise BadV1Format, line
|
141
142
|
end
|
142
143
|
|
143
144
|
unregistered, obsolete, platform, mediatype, subtype, extensions,
|
144
|
-
encoding, urls, docs, comment = *m
|
145
|
+
encoding, urls, docs, comment = *m.captures
|
145
146
|
|
146
|
-
if mediatype.nil?
|
147
|
-
if comment.nil?
|
148
|
-
warn <<-EOS
|
149
|
-
#{filename}:#{index}: Parsing error in v1 MIME type definition (no media type).
|
150
|
-
=> #{line}
|
151
|
-
EOS
|
152
|
-
raise
|
153
|
-
end
|
154
|
-
|
155
|
-
next
|
156
|
-
end
|
147
|
+
next if mediatype.nil?
|
157
148
|
|
158
149
|
extensions &&= extensions.split(/,/)
|
159
150
|
urls &&= urls.split(/,/)
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# -*- ruby encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'benchmark'
|
4
|
+
|
5
|
+
module Benchmarks
|
6
|
+
class Load
|
7
|
+
def self.report(load_path, repeats)
|
8
|
+
new(load_path, repeats.to_i).report
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(load_path, repeats = nil)
|
12
|
+
@cache_file = File.expand_path('../cache.mtc', __FILE__)
|
13
|
+
@repeats = repeats.to_i
|
14
|
+
@repeats = 50 if repeats <= 0
|
15
|
+
@load_path = load_path
|
16
|
+
end
|
17
|
+
|
18
|
+
def reload_mime_types(repeats = 1, force_load = false)
|
19
|
+
repeats.times {
|
20
|
+
Object.send(:remove_const, :MIME) if defined? ::MIME
|
21
|
+
$LOADED_FEATURES.delete_if { |n| n =~ /#{@load_path}/ }
|
22
|
+
require 'mime/types'
|
23
|
+
::MIME::Types.send(:__types__) if force_load
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
def report
|
28
|
+
remove_cache
|
29
|
+
|
30
|
+
Benchmark.bm(17) do |mark|
|
31
|
+
mark.report("Normal:") { reload_mime_types(@repeats) }
|
32
|
+
|
33
|
+
ENV['RUBY_MIME_TYPES_LAZY_LOAD'] = 'yes'
|
34
|
+
mark.report("Lazy:") { reload_mime_types(@repeats) }
|
35
|
+
mark.report("Lazy+Load:") { reload_mime_types(@repeats, true) }
|
36
|
+
|
37
|
+
ENV.delete('RUBY_MIME_TYPES_LAZY_LOAD')
|
38
|
+
|
39
|
+
ENV['RUBY_MIME_TYPES_CACHE'] = @cache_file
|
40
|
+
reload_mime_types
|
41
|
+
|
42
|
+
mark.report("Cached:") { reload_mime_types(@repeats) }
|
43
|
+
ENV['RUBY_MIME_TYPES_LAZY_LOAD'] = 'yes'
|
44
|
+
mark.report("Lazy Cached:") { reload_mime_types(@repeats) }
|
45
|
+
mark.report("Lazy Cached Load:") { reload_mime_types(@repeats, true) }
|
46
|
+
end
|
47
|
+
ensure
|
48
|
+
remove_cache
|
49
|
+
end
|
50
|
+
|
51
|
+
def remove_cache
|
52
|
+
File.unlink(@cache_file) if File.exist?(@cache_file)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/support/convert.rb
CHANGED
@@ -6,28 +6,36 @@ require 'fileutils'
|
|
6
6
|
|
7
7
|
class Convert
|
8
8
|
class << self
|
9
|
+
# Create a Convert instance that converts from YAML.
|
9
10
|
def from_yaml(path = nil)
|
10
11
|
new(path: path, from: :yaml)
|
11
12
|
end
|
12
13
|
|
14
|
+
# Create a Convert instance that converts from JSON.
|
13
15
|
def from_json(path = nil)
|
14
16
|
new(path: path, from: :json)
|
15
17
|
end
|
16
18
|
|
19
|
+
# Create a Convert instance that converts from the mime-types 1.x file
|
20
|
+
# format.
|
17
21
|
def from_v1(path = nil)
|
18
22
|
new(path: path, from: :v1)
|
19
23
|
end
|
20
24
|
|
25
|
+
# Converts from YAML to JSON. Defaults to converting to a single file.
|
21
26
|
def from_yaml_to_json(args)
|
27
|
+
mf = args.multiple_files || "single"
|
22
28
|
from_yaml(yaml_path(args.source)).
|
23
29
|
to_json(destination: json_path(args.destination),
|
24
|
-
multiple_files: multiple_files(
|
30
|
+
multiple_files: multiple_files(mf))
|
25
31
|
end
|
26
32
|
|
33
|
+
# Converts from JSON to YAML. Defaults to converting to multiple files.
|
27
34
|
def from_json_to_yaml(args)
|
35
|
+
mf = args.multiple_files || "multiple"
|
28
36
|
from_json(json_path(args.source)).
|
29
37
|
to_yaml(destination: yaml_path(args.destination),
|
30
|
-
multiple_files: multiple_files(
|
38
|
+
multiple_files: multiple_files(mf))
|
31
39
|
end
|
32
40
|
|
33
41
|
private :new
|
@@ -50,8 +58,8 @@ class Convert
|
|
50
58
|
end
|
51
59
|
|
52
60
|
def multiple_files(flag)
|
53
|
-
case flag
|
54
|
-
when "true", "yes"
|
61
|
+
case flag.to_s.downcase
|
62
|
+
when "true", "yes", "multiple"
|
55
63
|
true
|
56
64
|
else
|
57
65
|
false
|
@@ -73,11 +81,13 @@ class Convert
|
|
73
81
|
load_from(options[:from])
|
74
82
|
end
|
75
83
|
|
84
|
+
# Convert the data to JSON.
|
76
85
|
def to_json(options = {})
|
77
86
|
raise ArgumentError, 'destination is required' unless options[:destination]
|
78
87
|
write_types(options.merge(format: :json))
|
79
88
|
end
|
80
89
|
|
90
|
+
# Convert the data to YAML.
|
81
91
|
def to_yaml(options = {})
|
82
92
|
raise ArgumentError, 'destination is required' unless options[:destination]
|
83
93
|
write_types(options.merge(format: :yaml))
|
@@ -0,0 +1,9 @@
|
|
1
|
+
!application.smil @smi,smil :8bit 'IANA,RFC4536 =use-instead:application/smil+xml
|
2
|
+
!audio/vnd.qcelp @qcp 'IANA,RFC3625 =use-instead:audio/QCELP
|
3
|
+
*!image/bmp @bmp =use-instead:image/x-bmp
|
4
|
+
*application/acad 'LTSW
|
5
|
+
*audio/webm @webm '{WebM=http://www.webmproject.org/code/specs/container/}
|
6
|
+
*image/pjpeg :base64 =Fixes a bug with IE6 and progressive JPEGs
|
7
|
+
application/1d-interleaved-parityfec 'IANA,RFC6015
|
8
|
+
audio/1d-interleaved-parityfec 'IANA,RFC6015
|
9
|
+
mac:application/x-apple-diskimage @dmg
|
data/test/test_mime_type.rb
CHANGED
@@ -8,11 +8,28 @@ class TestMIMEType < Minitest::Test
|
|
8
8
|
MIME::Type.new(content_type) { |mt| yield mt if block_given? }
|
9
9
|
end
|
10
10
|
|
11
|
+
def make_javascript
|
12
|
+
make('application/javascript') do |js|
|
13
|
+
js.friendly('en' => 'JavaScript')
|
14
|
+
js.xrefs = {
|
15
|
+
'rfc' => %w(rfc4239 rfc4239),
|
16
|
+
'template' => %w(application/javascript)
|
17
|
+
}
|
18
|
+
js.encoding = '8bit'
|
19
|
+
js.extensions = %w(js sj)
|
20
|
+
js.references = %w(IANA RFC4329 {application/javascript=http://www.iana.org/assignments/media-types/application/javascript})
|
21
|
+
js.registered = true
|
22
|
+
|
23
|
+
yield js if block_given?
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
11
27
|
def make_yaml_mime_type
|
12
28
|
make('text/x-yaml') do |yaml|
|
13
29
|
yaml.extensions = %w(yaml yml)
|
14
30
|
yaml.encoding = '8bit'
|
15
31
|
yaml.system = 'd9d172f608'
|
32
|
+
yaml.friendly('en' => 'YAML Structured Document')
|
16
33
|
end
|
17
34
|
end
|
18
35
|
|
@@ -74,6 +91,16 @@ class TestMIMEType < Minitest::Test
|
|
74
91
|
assert_nil(MIME::Type.simplified('text'))
|
75
92
|
end
|
76
93
|
|
94
|
+
def test_class_i18n_key
|
95
|
+
assert_equal('text.plain', MIME::Type.i18n_key('text/plain'))
|
96
|
+
assert_equal('image.jpeg', MIME::Type.i18n_key('image/jpeg'))
|
97
|
+
assert_equal('application.msword', MIME::Type.i18n_key('application/x-msword'))
|
98
|
+
assert_equal('text.vcard', MIME::Type.i18n_key('text/vCard'))
|
99
|
+
assert_equal('application.pkcs7-mime', MIME::Type.i18n_key('application/pkcs7-mime'))
|
100
|
+
assert_equal('xyz.abc', MIME::Type.i18n_key('x-xyz/abc'))
|
101
|
+
assert_nil(MIME::Type.i18n_key('text'))
|
102
|
+
end
|
103
|
+
|
77
104
|
def test_CMP # '<=>'
|
78
105
|
assert(MIME::Type.new('text/plain') == MIME::Type.new('text/plain'))
|
79
106
|
assert(MIME::Type.new('text/plain') != MIME::Type.new('image/jpeg'))
|
@@ -204,7 +231,7 @@ class TestMIMEType < Minitest::Test
|
|
204
231
|
assert_equal(%w(yaml), yaml.extensions)
|
205
232
|
|
206
233
|
yaml.extensions = %w(yz yaml yz yml)
|
207
|
-
assert_equal(%w(yaml yml
|
234
|
+
assert_equal(%w(yz yaml yml), yaml.extensions)
|
208
235
|
end
|
209
236
|
|
210
237
|
def test_like_eh
|
@@ -461,6 +488,40 @@ class TestMIMEType < Minitest::Test
|
|
461
488
|
assert_equal(%W(IANA), yaml.references)
|
462
489
|
end
|
463
490
|
|
491
|
+
def test_xrefs
|
492
|
+
assert_equal(
|
493
|
+
{
|
494
|
+
'rfc' => %w(rfc4239),
|
495
|
+
'template' => %w(application/javascript)
|
496
|
+
},
|
497
|
+
make_javascript.xrefs
|
498
|
+
)
|
499
|
+
end
|
500
|
+
|
501
|
+
def test_xref_urls
|
502
|
+
js = make_javascript do |j|
|
503
|
+
j.xrefs = j.xrefs.merge({
|
504
|
+
'draft' => [ 'RFC-ietf-appsawg-json-merge-patch-07' ],
|
505
|
+
'person' => [ 'David_Singer' ],
|
506
|
+
'rfc-errata' => [ '3245' ],
|
507
|
+
'uri' => [ 'http://exmple.org' ],
|
508
|
+
'text' => [ 'text' ]
|
509
|
+
})
|
510
|
+
end
|
511
|
+
assert_equal(
|
512
|
+
[
|
513
|
+
"http://www.iana.org/go/rfc4239",
|
514
|
+
"http://www.iana.org/assignments/media-types/application/javascript",
|
515
|
+
"http://www.iana.org/go/draft-ietf-appsawg-json-merge-patch-07",
|
516
|
+
"http://www.iana.org/assignments/media-types/media-types.xhtml#David_Singer",
|
517
|
+
"http://www.rfc-editor.org/errata_search.php?eid=3245",
|
518
|
+
"http://exmple.org",
|
519
|
+
"text"
|
520
|
+
],
|
521
|
+
js.xref_urls
|
522
|
+
)
|
523
|
+
end
|
524
|
+
|
464
525
|
def test_url
|
465
526
|
assert_deprecated("MIME::Type#url", "and has been renamed to #references") do
|
466
527
|
assert_empty(make_yaml_mime_type.url)
|
@@ -507,6 +568,29 @@ class TestMIMEType < Minitest::Test
|
|
507
568
|
assert_equal('t/2', t.use_instead)
|
508
569
|
end
|
509
570
|
|
571
|
+
def test_preferred_extension
|
572
|
+
assert_equal('zip', @applzip.preferred_extension)
|
573
|
+
end
|
574
|
+
|
575
|
+
def test_friendly_read
|
576
|
+
yaml = make_yaml_mime_type
|
577
|
+
assert_equal('YAML Structured Document', yaml.friendly)
|
578
|
+
assert_equal('YAML Structured Document', yaml.friendly('en'))
|
579
|
+
assert_equal(nil, yaml.friendly('fr'))
|
580
|
+
end
|
581
|
+
|
582
|
+
def test_friendly_set
|
583
|
+
assert_equal({ 'en' => 'Zip' }, @applzip.friendly([ 'en', 'Zip' ]))
|
584
|
+
assert_equal({ 'en' => 'Zip Archive' }, @applzip.friendly('en' => 'Zip Archive'))
|
585
|
+
end
|
586
|
+
|
587
|
+
def test_i18n_key
|
588
|
+
assert_equal('text.plain', make('text/plain').i18n_key)
|
589
|
+
assert_equal('application.vnd-3gpp-bsf-xml',
|
590
|
+
make('application/vnd.3gpp.bsf+xml').i18n_key)
|
591
|
+
assert_equal('application.msword', make('application/x-msword').i18n_key)
|
592
|
+
end
|
593
|
+
|
510
594
|
def test_deprecated_constant
|
511
595
|
assert_output(nil, /MIME::InvalidContentType/) do
|
512
596
|
assert_same(MIME::InvalidContentType, MIME::Type::InvalidContentType)
|
@@ -514,5 +598,6 @@ class TestMIMEType < Minitest::Test
|
|
514
598
|
assert_silent do
|
515
599
|
assert_same(MIME::InvalidContentType, MIME::Type::InvalidContentType)
|
516
600
|
end
|
601
|
+
assert_raises(NameError) { MIME::Foo }
|
517
602
|
end
|
518
603
|
end
|
data/test/test_mime_types.rb
CHANGED
@@ -16,6 +16,8 @@ class TestMIMETypes < Minitest::Test
|
|
16
16
|
|
17
17
|
def test_enumerable
|
18
18
|
assert(@mime_types.any? {|type| type.content_type == 'text/plain'})
|
19
|
+
assert_kind_of(Enumerator, @mime_types.each)
|
20
|
+
assert_equal(6, @mime_types.each.count)
|
19
21
|
end
|
20
22
|
|
21
23
|
def test_index_with_mime_type
|
@@ -10,6 +10,8 @@ class TestMIMETypesQueryClassMethods < Minitest::Test
|
|
10
10
|
|
11
11
|
def test_enumerable
|
12
12
|
assert(MIME::Types.any? {|type| type.content_type == 'text/plain'})
|
13
|
+
assert_kind_of(Enumerator, MIME::Types.each)
|
14
|
+
assert(MIME::Types.each.count > 999)
|
13
15
|
end
|
14
16
|
|
15
17
|
def test_load_from_file
|
@@ -5,8 +5,9 @@ require 'minitest_helper'
|
|
5
5
|
|
6
6
|
class TestMIMETypesLoader < Minitest::Test
|
7
7
|
def setup
|
8
|
-
@path
|
9
|
-
@loader
|
8
|
+
@path = File.expand_path('../fixture', __FILE__)
|
9
|
+
@loader = MIME::Types::Loader.new(@path)
|
10
|
+
@bad_path = File.expand_path('../bad-fixtures', __FILE__)
|
10
11
|
end
|
11
12
|
|
12
13
|
def assert_correctly_loaded(types)
|
@@ -39,4 +40,12 @@ class TestMIMETypesLoader < Minitest::Test
|
|
39
40
|
def test_load_v1
|
40
41
|
assert_correctly_loaded(@loader.load_v1)
|
41
42
|
end
|
43
|
+
|
44
|
+
def test_malformed_v1
|
45
|
+
assert_output(nil, /1: Parsing error in v1 MIME type definition/) {
|
46
|
+
assert_raises(MIME::Types::Loader::BadV1Format) {
|
47
|
+
MIME::Types::Loader.load_from_v1(File.join(@bad_path, 'malformed'))
|
48
|
+
}
|
49
|
+
}
|
50
|
+
end
|
42
51
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mime-types
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Austin Ziegler
|
@@ -36,7 +36,7 @@ cert_chain:
|
|
36
36
|
SHkzay9FVEZoaSs3cElVV2xGbzBpbXJkeUxoZCtKdzNib1ZqM0NtdnloY3dt
|
37
37
|
cG9NMEs5bApBT21yVWlFbFVxTE9aQT09Ci0tLS0tRU5EIENFUlRJRklDQVRF
|
38
38
|
LS0tLS0K
|
39
|
-
date: 2014-
|
39
|
+
date: 2014-10-07 00:00:00.000000000 Z
|
40
40
|
dependencies:
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: minitest
|
@@ -192,64 +192,35 @@ dependencies:
|
|
192
192
|
- - ~>
|
193
193
|
- !ruby/object:Gem::Version
|
194
194
|
version: '3.12'
|
195
|
-
description: !
|
196
|
-
about
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
This is release 2.2, mostly changing how the MIME type registry is updated from
|
225
|
-
|
226
|
-
the IANA registry (the format of which was incompatibly changed shortly before
|
227
|
-
|
228
|
-
this release) and taking advantage of the extra data available from IANA
|
229
|
-
|
230
|
-
registry in the form of MIME::Type#xrefs. In addition, the {LTSW
|
231
|
-
|
232
|
-
list}[http://www.ltsw.se/knbase/internet/mime.htp] has been dropped as a
|
233
|
-
|
234
|
-
supported list.
|
235
|
-
|
236
|
-
|
237
|
-
As a reminder, mime-types 2.x is no longer compatible with Ruby 1.8 and
|
238
|
-
|
239
|
-
mime-types 1.x is only being maintained for security issues. No new MIME types
|
240
|
-
|
241
|
-
or features will be added.
|
242
|
-
|
243
|
-
|
244
|
-
mime-types (previously called MIME::Types for Ruby) was originally based on
|
245
|
-
|
246
|
-
MIME::Types for Perl by Mark Overmeer, copyright 2001 - 2009. It is built to
|
247
|
-
|
248
|
-
conform to the MIME types of RFCs 2045 and 2231. It tracks the {IANA Media
|
249
|
-
|
250
|
-
Types registry}[https://www.iana.org/assignments/media-types/media-types.xhtml]
|
251
|
-
|
252
|
-
with some types added by the users of mime-types.'
|
195
|
+
description: ! "The mime-types library provides a library and registry for information
|
196
|
+
about\nMIME content type definitions. It can be used to determine defined filename\nextensions
|
197
|
+
for MIME types, or to use filename extensions to look up the likely\nMIME type definitions.\n\nMIME
|
198
|
+
content types are used in MIME-compliant communications, as in e-mail or\nHTTP traffic,
|
199
|
+
to indicate the type of content which is transmitted. The\nmime-types library provides
|
200
|
+
the ability for detailed information about MIME\nentities (provided as an enumerable
|
201
|
+
collection of MIME::Type objects) to be\ndetermined and used programmatically. There
|
202
|
+
are many types defined by RFCs and\nvendors, so the list is long but by definition
|
203
|
+
incomplete; don't hesitate to to\nadd additional type definitions (see Contributing.rdoc).
|
204
|
+
The primary sources\nfor MIME type definitions found in mime-types is the IANA collection
|
205
|
+
of\nregistrations (see below for the link), RFCs, and W3C recommendations.\n\nThis
|
206
|
+
is release 2.4.1 (2.4 was pulled), fixing a bug in observed use of the\nmime-types
|
207
|
+
library where extensions were not previously sorted, such that\n\n MIME::Types.of('image.jpg').first.extensions.first\n\nreturned
|
208
|
+
a value of +jpeg+ in mime-types 1, but +jpe+ in mime-types 2. This was\nintroduced
|
209
|
+
because extensions were sorted during assignment\n(MIME::Type#extensions=). This
|
210
|
+
behaviour has been reverted to protect clients\nthat work as noted above. The preferred
|
211
|
+
way to express this is the new method:\n\n MIME::Type.of('image.jpg').first.preferred_extension\n\nŁukasz
|
212
|
+
Śliwa created the\n{friendly_mime}[https://github.com/lukaszsliwa/friendly_mime]
|
213
|
+
gem, which offers\nfriendly descriptive names for MIME types. This functionality
|
214
|
+
and\nEnglish-language data has been added to mime-types as MIME::Type#friendly.
|
215
|
+
To\nmake it easy for internationalization, MIME::Type#i18n_key has been added,\nwhich
|
216
|
+
will return a key suitable for use with the\n{I18n}[https://github.com/svenfuchs/i18n]
|
217
|
+
library.\n\nAs a reminder, mime-types 2.x is no longer compatible with Ruby 1.8
|
218
|
+
and\nmime-types 1.x is only being maintained for security issues. No new MIME types\nor
|
219
|
+
features will be added.\n\nmime-types (previously called MIME::Types for Ruby) was
|
220
|
+
originally based on\nMIME::Types for Perl by Mark Overmeer, copyright 2001 - 2009.
|
221
|
+
It is built to\nconform to the MIME types of RFCs 2045 and 2231. It tracks the {IANA
|
222
|
+
Media\nTypes registry}[https://www.iana.org/assignments/media-types/media-types.xhtml]\nwith
|
223
|
+
some types added by the users of mime-types."
|
253
224
|
email:
|
254
225
|
- halostatue@gmail.com
|
255
226
|
executables: []
|
@@ -289,9 +260,10 @@ files:
|
|
289
260
|
- lib/mime/types/loader.rb
|
290
261
|
- lib/mime/types/loader_path.rb
|
291
262
|
- support/apache_mime_types.rb
|
292
|
-
- support/
|
263
|
+
- support/benchmarks/load.rb
|
293
264
|
- support/convert.rb
|
294
265
|
- support/iana_registry.rb
|
266
|
+
- test/bad-fixtures/malformed
|
295
267
|
- test/fixture/json.json
|
296
268
|
- test/fixture/old-data
|
297
269
|
- test/fixture/yaml.yaml
|
@@ -326,7 +298,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
326
298
|
version: '0'
|
327
299
|
requirements: []
|
328
300
|
rubyforge_project:
|
329
|
-
rubygems_version: 2.2
|
301
|
+
rubygems_version: 2.4.2
|
330
302
|
signing_key:
|
331
303
|
specification_version: 4
|
332
304
|
summary: The mime-types library provides a library and registry for information about
|