mime-types 2.5 → 2.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Contributing.rdoc +72 -20
- data/History-Types.rdoc +11 -0
- data/History.rdoc +31 -1
- data/Manifest.txt +18 -1
- data/README.rdoc +142 -61
- data/Rakefile +59 -91
- data/data/mime-types.json +1 -1
- data/data/mime.content_type.column +1907 -0
- data/data/mime.docs.column +1907 -0
- data/data/mime.encoding.column +1907 -0
- data/data/mime.friendly.column +1907 -0
- data/data/mime.obsolete.column +1907 -0
- data/data/mime.references.column +1907 -0
- data/data/mime.registered.column +1907 -0
- data/data/mime.signature.column +1907 -0
- data/data/mime.system.column +1907 -0
- data/data/mime.use_instead.column +1907 -0
- data/data/mime.xrefs.column +1907 -0
- data/lib/mime/type.rb +192 -119
- data/lib/mime/type/columnar.rb +112 -0
- data/lib/mime/types.rb +39 -25
- data/lib/mime/types/cache.rb +41 -35
- data/lib/mime/types/columnar.rb +160 -0
- data/lib/mime/types/deprecations.rb +53 -0
- data/lib/mime/types/loader.rb +60 -20
- data/lib/mime/types/loader_path.rb +2 -3
- data/lib/mime/types/logger.rb +35 -0
- data/support/apache_mime_types.rb +8 -1
- data/support/benchmarks/load.rb +17 -8
- data/support/benchmarks/load_allocations.rb +83 -0
- data/support/benchmarks/object_counts.rb +41 -0
- data/support/convert.rb +44 -24
- data/support/convert/columnar.rb +90 -0
- data/support/iana_registry.rb +18 -8
- data/test/fixture/json.json +1 -1
- data/test/fixture/yaml.yaml +3 -6
- data/test/minitest_helper.rb +9 -10
- data/test/test_mime_type.rb +126 -62
- data/test/test_mime_types.rb +15 -11
- data/test/test_mime_types_class.rb +16 -14
- data/test/test_mime_types_lazy.rb +7 -1
- data/test/test_mime_types_loader.rb +17 -8
- metadata +54 -12
- data/lib/mime.rb +0 -51
data/test/test_mime_types.rb
CHANGED
@@ -11,7 +11,7 @@ class TestMIMETypes < Minitest::Test
|
|
11
11
|
MIME::Type.new('application/x-wordperfect6.1'),
|
12
12
|
MIME::Type.new('content-type' => 'application/x-www-form-urlencoded', 'registered' => true),
|
13
13
|
MIME::Type.new(['application/x-gzip', %w(gz)]),
|
14
|
-
MIME::Type.new(['application/gzip', %
|
14
|
+
MIME::Type.new(['application/gzip', %w(gz)]))
|
15
15
|
end
|
16
16
|
|
17
17
|
def test_enumerable
|
@@ -52,15 +52,15 @@ class TestMIMETypes < Minitest::Test
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def test_index_with_platform_flag
|
55
|
-
assert_deprecated(
|
55
|
+
assert_deprecated('MIME::Types#[]', 'using the :platform flag') do
|
56
56
|
assert_empty(MIME::Types['text/plain', platform: true])
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
60
|
def test_add
|
61
|
-
eruby = MIME::Type.new(
|
62
|
-
t.extensions =
|
63
|
-
t.encoding =
|
61
|
+
eruby = MIME::Type.new('application/x-eruby') do |t|
|
62
|
+
t.extensions = 'rhtml'
|
63
|
+
t.encoding = '8bit'
|
64
64
|
end
|
65
65
|
|
66
66
|
@mime_types.add(eruby)
|
@@ -74,9 +74,11 @@ class TestMIMETypes < Minitest::Test
|
|
74
74
|
assert_equal(%w(image/jpeg), MIME::Types.of('foo.jpeg'))
|
75
75
|
assert_equal(%w(image/jpeg text/plain),
|
76
76
|
MIME::Types.type_for(%w(foo.txt foo.jpeg)))
|
77
|
-
|
77
|
+
assert_deprecated('MIME::Types#type_for', 'using the platform parameter') do
|
78
|
+
assert_equal(@mime_types.of('gif', true), @mime_types['image/gif'])
|
79
|
+
end
|
78
80
|
assert_empty(MIME::Types.type_for('coverallsjson'))
|
79
|
-
assert_deprecated(
|
81
|
+
assert_deprecated('MIME::Types#type_for', 'using the platform parameter') do
|
80
82
|
assert_empty(MIME::Types.type_for('jpeg', true))
|
81
83
|
end
|
82
84
|
assert_empty(@mime_types.type_for('zzz'))
|
@@ -89,7 +91,7 @@ class TestMIMETypes < Minitest::Test
|
|
89
91
|
# This tests the instance implementation through the class implementation.
|
90
92
|
def test_add_type_variant
|
91
93
|
xtxp = MIME::Type.new('x-text/x-plain')
|
92
|
-
assert_deprecated(
|
94
|
+
assert_deprecated('MIME::Types#add_type_variant', 'and will be private') do
|
93
95
|
@mime_types.add_type_variant(xtxp)
|
94
96
|
end
|
95
97
|
assert_includes(@mime_types['text/plain'], xtxp)
|
@@ -102,16 +104,18 @@ class TestMIMETypes < Minitest::Test
|
|
102
104
|
# This tests the instance implementation through the class implementation.
|
103
105
|
def test_index_extensions
|
104
106
|
xtxp = MIME::Type.new(['x-text/x-plain', %w(tzt)])
|
105
|
-
assert_deprecated(
|
107
|
+
assert_deprecated('MIME::Types#index_extensions', 'and will be private') do
|
106
108
|
@mime_types.index_extensions(xtxp)
|
107
109
|
end
|
108
110
|
assert_includes(@mime_types.of('tzt'), xtxp)
|
109
111
|
end
|
110
112
|
|
111
113
|
def test_defined_types
|
112
|
-
assert_deprecated(
|
114
|
+
assert_deprecated('MIME::Types#defined_types') do
|
113
115
|
assert_empty(MIME::Types.new.defined_types)
|
114
116
|
end
|
115
|
-
|
117
|
+
assert_deprecated('MIME::Types#defined_types') do
|
118
|
+
refute_empty(@mime_types.defined_types)
|
119
|
+
end
|
116
120
|
end
|
117
121
|
end
|
@@ -16,7 +16,7 @@ class TestMIMETypesQueryClassMethods < Minitest::Test
|
|
16
16
|
|
17
17
|
def test_load_from_file
|
18
18
|
fn = File.expand_path('../fixture/old-data', __FILE__)
|
19
|
-
assert_deprecated(
|
19
|
+
assert_deprecated('MIME::Types.load_from_file') do
|
20
20
|
MIME::Types.load_from_file(fn)
|
21
21
|
end
|
22
22
|
end
|
@@ -53,7 +53,7 @@ class TestMIMETypesQueryClassMethods < Minitest::Test
|
|
53
53
|
end
|
54
54
|
|
55
55
|
def test_index_with_platform_flag
|
56
|
-
assert_deprecated(
|
56
|
+
assert_deprecated('MIME::Types#[]', 'using the :platform flag') do
|
57
57
|
assert_empty(MIME::Types['text/plain', platform: true])
|
58
58
|
end
|
59
59
|
end
|
@@ -63,7 +63,7 @@ class TestMIMETypesQueryClassMethods < Minitest::Test
|
|
63
63
|
assert_equal(%w(image/gif), MIME::Types.of('foo.gif'))
|
64
64
|
assert_equal(%w(application/xml image/gif text/xml),
|
65
65
|
MIME::Types.type_for(%w(xml gif)))
|
66
|
-
assert_deprecated(
|
66
|
+
assert_deprecated('MIME::Types#type_for', 'using the platform parameter') do
|
67
67
|
assert_empty(MIME::Types.type_for('gif', true))
|
68
68
|
end
|
69
69
|
assert_empty(MIME::Types.type_for('zzz'))
|
@@ -71,16 +71,18 @@ class TestMIMETypesQueryClassMethods < Minitest::Test
|
|
71
71
|
|
72
72
|
def test_count
|
73
73
|
assert(MIME::Types.count.nonzero?,
|
74
|
-
|
74
|
+
'A lot of types are expected to be known.')
|
75
75
|
end
|
76
76
|
|
77
77
|
def test_cache_file
|
78
78
|
ENV['RUBY_MIME_TYPES_CACHE'] = 'foo'
|
79
|
-
assert_deprecated(
|
79
|
+
assert_deprecated('MIME::Types.cache_file') do
|
80
80
|
assert_equal('foo', MIME::Types.cache_file)
|
81
81
|
end
|
82
82
|
ENV.delete('RUBY_MIME_TYPES_CACHE')
|
83
|
-
|
83
|
+
assert_deprecated('MIME::Types.cache_file') do
|
84
|
+
assert_nil(MIME::Types.cache_file)
|
85
|
+
end
|
84
86
|
end
|
85
87
|
end
|
86
88
|
|
@@ -91,37 +93,37 @@ class TestMIMETypesClassMethods < Minitest::Test
|
|
91
93
|
end
|
92
94
|
|
93
95
|
def test_add_with_type
|
94
|
-
MIME::Types.add(MIME::Type.new(
|
96
|
+
MIME::Types.add(MIME::Type.new('application/x-eruby'))
|
95
97
|
refute_empty(MIME::Types['application/x-eruby'])
|
96
98
|
end
|
97
99
|
|
98
100
|
def test_add_with_types
|
99
101
|
mt = MIME::Types.new
|
100
|
-
mt.add MIME::Type.new(
|
102
|
+
mt.add MIME::Type.new('application/x-eruby')
|
101
103
|
MIME::Types.add(mt)
|
102
104
|
refute_empty(MIME::Types['application/x-eruby'])
|
103
105
|
end
|
104
106
|
|
105
107
|
def test_add_with_array
|
106
|
-
MIME::Types.add([MIME::Type.new(
|
108
|
+
MIME::Types.add([MIME::Type.new('application/x-eruby')])
|
107
109
|
refute_empty(MIME::Types['application/x-eruby'])
|
108
110
|
end
|
109
111
|
|
110
112
|
def test_add_with_noise_suppression
|
111
113
|
assert_silent do
|
112
|
-
MIME::Types.add(MIME::Type.new(
|
114
|
+
MIME::Types.add(MIME::Type.new('application/x-eruby'))
|
113
115
|
end
|
114
116
|
assert_output(nil, %r{application/x-eruby is already registered}) do
|
115
|
-
MIME::Types.add(MIME::Type.new(
|
117
|
+
MIME::Types.add(MIME::Type.new('application/x-eruby'))
|
116
118
|
end
|
117
119
|
assert_silent do
|
118
|
-
MIME::Types.add(MIME::Type.new(
|
120
|
+
MIME::Types.add(MIME::Type.new('application/x-eruby'), :silent)
|
119
121
|
end
|
120
122
|
end
|
121
123
|
|
122
124
|
def test_add_type_variant
|
123
125
|
xtxp = MIME::Type.new('x-text/x-plain')
|
124
|
-
assert_deprecated(
|
126
|
+
assert_deprecated('MIME::Types#add_type_variant', 'and will be private') do
|
125
127
|
MIME::Types.add_type_variant(xtxp)
|
126
128
|
end
|
127
129
|
assert_includes(MIME::Types['text/plain'], xtxp)
|
@@ -129,7 +131,7 @@ class TestMIMETypesClassMethods < Minitest::Test
|
|
129
131
|
|
130
132
|
def test_index_extensions
|
131
133
|
xtxp = MIME::Type.new(['x-text/x-plain', %w(tzt)])
|
132
|
-
assert_deprecated(
|
134
|
+
assert_deprecated('MIME::Types#index_extensions', 'and will be private') do
|
133
135
|
MIME::Types.index_extensions(xtxp)
|
134
136
|
end
|
135
137
|
assert_includes(MIME::Types.of('tzt'), xtxp)
|
@@ -5,12 +5,14 @@ require 'minitest_helper'
|
|
5
5
|
|
6
6
|
class TestMIMETypesLazy < Minitest::Test
|
7
7
|
def setup
|
8
|
+
@cache_file = File.expand_path('../cache.tst', __FILE__)
|
8
9
|
ENV['RUBY_MIME_TYPES_LAZY_LOAD'] = 'true'
|
9
|
-
ENV['RUBY_MIME_TYPES_CACHE'] =
|
10
|
+
ENV['RUBY_MIME_TYPES_CACHE'] = @cache_file
|
10
11
|
MIME::Types::Cache.save
|
11
12
|
end
|
12
13
|
|
13
14
|
def teardown
|
15
|
+
clear_cache_file
|
14
16
|
reset_mime_types
|
15
17
|
if File.exist? ENV['RUBY_MIME_TYPES_CACHE']
|
16
18
|
FileUtils.rm ENV['RUBY_MIME_TYPES_CACHE']
|
@@ -19,6 +21,10 @@ class TestMIMETypesLazy < Minitest::Test
|
|
19
21
|
ENV.delete('RUBY_MIME_TYPES_LAZY_LOAD')
|
20
22
|
end
|
21
23
|
|
24
|
+
def clear_cache_file
|
25
|
+
FileUtils.rm @cache_file if File.exist? @cache_file
|
26
|
+
end
|
27
|
+
|
22
28
|
def reset_mime_types
|
23
29
|
MIME::Types.instance_variable_set(:@__types__, nil)
|
24
30
|
MIME::Types.send(:load_default_mime_types)
|
@@ -12,21 +12,28 @@ class TestMIMETypesLoader < Minitest::Test
|
|
12
12
|
|
13
13
|
def assert_correctly_loaded(types)
|
14
14
|
assert_includes(types, 'application/1d-interleaved-parityfec')
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
assert_deprecated('MIME::Type#references') do
|
16
|
+
assert_includes(types['application/acad'].first.references, 'LTSW')
|
17
|
+
end
|
18
|
+
assert_deprecated('MIME::Type#urls') do
|
19
|
+
assert_equal([%w(WebM http://www.webmproject.org/code/specs/container/)],
|
20
|
+
types['audio/webm'].first.urls)
|
21
|
+
end
|
18
22
|
assert_equal(%w(webm), types['audio/webm'].first.extensions)
|
19
23
|
refute(types['audio/webm'].first.registered?)
|
20
24
|
|
21
25
|
assert_equal('Fixes a bug with IE6 and progressive JPEGs',
|
22
26
|
types['image/pjpeg'].first.docs)
|
23
27
|
|
24
|
-
|
25
|
-
|
28
|
+
assert_deprecated('MIME::Type#system?') do
|
29
|
+
assert(types['application/x-apple-diskimage'].first.system?)
|
30
|
+
end
|
31
|
+
assert_deprecated('MIME::Type#system') do
|
32
|
+
assert_equal(/mac/, types['application/x-apple-diskimage'].first.system)
|
33
|
+
end
|
26
34
|
|
27
35
|
assert(types['audio/vnd.qcelp'].first.obsolete?)
|
28
|
-
assert_equal(
|
29
|
-
types['audio/vnd.qcelp'].first.use_instead)
|
36
|
+
assert_equal('audio/QCELP', types['audio/vnd.qcelp'].first.use_instead)
|
30
37
|
end
|
31
38
|
|
32
39
|
def test_load_yaml
|
@@ -38,7 +45,9 @@ class TestMIMETypesLoader < Minitest::Test
|
|
38
45
|
end
|
39
46
|
|
40
47
|
def test_load_v1
|
41
|
-
|
48
|
+
assert_deprecated('MIME::Types::Loader.load_v1') do
|
49
|
+
assert_correctly_loaded(@loader.load_v1)
|
50
|
+
end
|
42
51
|
end
|
43
52
|
|
44
53
|
def test_malformed_v1
|
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: '2.
|
4
|
+
version: '2.6'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Austin Ziegler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '1.0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: minitest-focus
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.0'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: rake
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -188,16 +202,27 @@ description: |-
|
|
188
202
|
HTTP traffic, to indicate the type of content which is transmitted. The
|
189
203
|
mime-types library provides the ability for detailed information about MIME
|
190
204
|
entities (provided as an enumerable collection of MIME::Type objects) to be
|
191
|
-
determined and used
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
205
|
+
determined and used. There are many types defined by RFCs and vendors, so the
|
206
|
+
list is long but by definition incomplete; don't hesitate to add additional
|
207
|
+
type definitions. MIME type definitions found in mime-types are from RFCs, W3C
|
208
|
+
recommendations, the {IANA Media Types
|
209
|
+
registry}[https://www.iana.org/assignments/media-types/media-types.xhtml], and
|
210
|
+
user contributions. It conforms to RFCs 2045 and 2231.
|
211
|
+
|
212
|
+
This is release 2.6 with two new experimental features. The first new feature
|
213
|
+
is a new default registry storage format that greatly reduces the initial
|
214
|
+
memory use of the mime-types library. This feature is enabled by requiring
|
215
|
+
+mime/types/columnar+ instead of +mime/types+ with a small performance cost and
|
216
|
+
no change in *total* memory use if certain methods are called (see {Columnar
|
217
|
+
Store}[#columnar-store] for more details). The second new feature is a logger
|
218
|
+
interface that conforms to the expectations of an ActiveSupport::Logger so that
|
219
|
+
warnings can be written to an application's log rather than the default
|
220
|
+
location for +warn+. This interface may be used for other logging purposes in
|
221
|
+
the future.
|
197
222
|
|
198
|
-
|
199
|
-
|
200
|
-
1.9.2 or later.
|
223
|
+
mime-types 2.6 is the last planned version of mime-types 2.x, so deprecation
|
224
|
+
warnings are no longer cached but provided every time the method is called.
|
225
|
+
mime-types 2.6 supports Ruby 1.9.2 or later.
|
201
226
|
email:
|
202
227
|
- halostatue@gmail.com
|
203
228
|
executables: []
|
@@ -224,18 +249,35 @@ files:
|
|
224
249
|
- README.rdoc
|
225
250
|
- Rakefile
|
226
251
|
- data/mime-types.json
|
252
|
+
- data/mime.content_type.column
|
253
|
+
- data/mime.docs.column
|
254
|
+
- data/mime.encoding.column
|
255
|
+
- data/mime.friendly.column
|
256
|
+
- data/mime.obsolete.column
|
257
|
+
- data/mime.references.column
|
258
|
+
- data/mime.registered.column
|
259
|
+
- data/mime.signature.column
|
260
|
+
- data/mime.system.column
|
261
|
+
- data/mime.use_instead.column
|
262
|
+
- data/mime.xrefs.column
|
227
263
|
- docs/COPYING.txt
|
228
264
|
- docs/artistic.txt
|
229
265
|
- lib/mime-types.rb
|
230
|
-
- lib/mime.rb
|
231
266
|
- lib/mime/type.rb
|
267
|
+
- lib/mime/type/columnar.rb
|
232
268
|
- lib/mime/types.rb
|
233
269
|
- lib/mime/types/cache.rb
|
270
|
+
- lib/mime/types/columnar.rb
|
271
|
+
- lib/mime/types/deprecations.rb
|
234
272
|
- lib/mime/types/loader.rb
|
235
273
|
- lib/mime/types/loader_path.rb
|
274
|
+
- lib/mime/types/logger.rb
|
236
275
|
- support/apache_mime_types.rb
|
237
276
|
- support/benchmarks/load.rb
|
277
|
+
- support/benchmarks/load_allocations.rb
|
278
|
+
- support/benchmarks/object_counts.rb
|
238
279
|
- support/convert.rb
|
280
|
+
- support/convert/columnar.rb
|
239
281
|
- support/iana_registry.rb
|
240
282
|
- test/bad-fixtures/malformed
|
241
283
|
- test/fixture/json.json
|
data/lib/mime.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
# -*- ruby encoding: utf-8 -*-
|
2
|
-
|
3
|
-
# The namespace for MIME applications, tools, and libraries.
|
4
|
-
module MIME # :nodoc:
|
5
|
-
end
|
6
|
-
|
7
|
-
class << MIME
|
8
|
-
# Used to mark a method as deprecated in the mime-types interface.
|
9
|
-
def deprecated(klass, sym, message = nil, &block) # :nodoc:
|
10
|
-
level = case klass
|
11
|
-
when Class, Module
|
12
|
-
'.'
|
13
|
-
else
|
14
|
-
klass = klass.class
|
15
|
-
'#'
|
16
|
-
end
|
17
|
-
unless defined?(@__deprecated) and @__deprecated["#{klass}#{level}#{sym}"]
|
18
|
-
message = case message
|
19
|
-
when :private, :protected
|
20
|
-
"and will be #{message}"
|
21
|
-
when nil
|
22
|
-
"and will be removed"
|
23
|
-
else
|
24
|
-
message
|
25
|
-
end
|
26
|
-
warn "#{klass}#{level}#{sym} is deprecated #{message}."
|
27
|
-
(@__deprecated ||= {})["#{klass}#{level}#{sym}"] = true
|
28
|
-
block.call if block
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
# MIME::InvalidContentType was moved to MIME::Type::InvalidContentType.
|
33
|
-
# Provide a single warning about this fact in the interim.
|
34
|
-
def const_missing(name) # :nodoc:
|
35
|
-
case name.to_s
|
36
|
-
when "InvalidContentType"
|
37
|
-
warn_about_moved_constants(name)
|
38
|
-
MIME::Type.const_get(name.to_sym)
|
39
|
-
else
|
40
|
-
super
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
private
|
45
|
-
def warn_about_moved_constants(name) # :nodoc:
|
46
|
-
unless defined?(@__warned_constants) and @__warned_constants[name]
|
47
|
-
warn "MIME::#{name} is deprecated. Use MIME::Type::#{name} instead."
|
48
|
-
(@__warned_constants ||= {})[name] = true
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|