mime-types 2.99.3 → 3.2.2

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.
Files changed (52) hide show
  1. checksums.yaml +5 -5
  2. data/{Code-of-Conduct.rdoc → Code-of-Conduct.md} +19 -20
  3. data/Contributing.md +139 -0
  4. data/History.md +208 -0
  5. data/{Licence.rdoc → Licence.md} +4 -18
  6. data/Manifest.txt +8 -25
  7. data/README.rdoc +63 -67
  8. data/Rakefile +144 -55
  9. data/lib/mime/type/columnar.rb +29 -62
  10. data/lib/mime/type.rb +192 -417
  11. data/lib/mime/types/_columnar.rb +137 -0
  12. data/lib/mime/types/cache.rb +51 -73
  13. data/lib/mime/types/columnar.rb +2 -147
  14. data/lib/mime/types/container.rb +94 -0
  15. data/lib/mime/types/deprecations.rb +5 -24
  16. data/lib/mime/types/full.rb +19 -0
  17. data/lib/mime/types/loader.rb +12 -141
  18. data/lib/mime/types/logger.rb +4 -0
  19. data/lib/mime/types/registry.rb +90 -0
  20. data/lib/mime/types.rb +43 -139
  21. data/lib/mime-types.rb +1 -1
  22. data/test/minitest_helper.rb +6 -12
  23. data/test/test_mime_type.rb +473 -455
  24. data/test/test_mime_types.rb +136 -86
  25. data/test/test_mime_types_cache.rb +83 -53
  26. data/test/test_mime_types_class.rb +119 -97
  27. data/test/test_mime_types_lazy.rb +27 -23
  28. data/test/test_mime_types_loader.rb +7 -32
  29. metadata +102 -62
  30. data/Contributing.rdoc +0 -170
  31. data/History-Types.rdoc +0 -454
  32. data/History.rdoc +0 -590
  33. data/data/mime-types.json +0 -1
  34. data/data/mime.content_type.column +0 -1980
  35. data/data/mime.docs.column +0 -1980
  36. data/data/mime.encoding.column +0 -1980
  37. data/data/mime.friendly.column +0 -1980
  38. data/data/mime.obsolete.column +0 -1980
  39. data/data/mime.registered.column +0 -1980
  40. data/data/mime.signature.column +0 -1980
  41. data/data/mime.use_instead.column +0 -1980
  42. data/data/mime.xrefs.column +0 -1980
  43. data/docs/COPYING.txt +0 -339
  44. data/docs/artistic.txt +0 -127
  45. data/lib/mime/types/loader_path.rb +0 -15
  46. data/support/apache_mime_types.rb +0 -108
  47. data/support/benchmarks/load.rb +0 -64
  48. data/support/benchmarks/load_allocations.rb +0 -83
  49. data/support/benchmarks/object_counts.rb +0 -41
  50. data/support/convert/columnar.rb +0 -88
  51. data/support/convert.rb +0 -158
  52. data/support/iana_registry.rb +0 -172
@@ -1,9 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # -*- ruby encoding: utf-8 -*-
2
4
 
5
+ ##
3
6
  module MIME; end
7
+ ##
4
8
  class MIME::Types; end
5
9
 
6
- require 'mime/types/loader_path'
10
+ require 'mime/types/data'
7
11
 
8
12
  # This class is responsible for initializing the MIME::Types registry from
9
13
  # the data files supplied with the mime-types library.
@@ -11,7 +15,7 @@ require 'mime/types/loader_path'
11
15
  # The Loader will use one of the following paths:
12
16
  # 1. The +path+ provided in its constructor argument;
13
17
  # 2. The value of ENV['RUBY_MIME_TYPES_DATA']; or
14
- # 3. The value of MIME::Types::Loader::PATH.
18
+ # 3. The value of MIME::Types::Data::PATH.
15
19
  #
16
20
  # When #load is called, the +path+ will be searched recursively for all YAML
17
21
  # (.yml or .yaml) files. By convention, there is one file for each media
@@ -24,15 +28,11 @@ class MIME::Types::Loader
24
28
  attr_reader :container
25
29
 
26
30
  # Creates a Loader object that can be used to load MIME::Types registries
27
- # into memory, using YAML, JSON, or v1 registry format loaders.
31
+ # into memory, using YAML, JSON, or Columnar registry format loaders.
28
32
  def initialize(path = nil, container = nil)
29
- path = path || ENV['RUBY_MIME_TYPES_DATA'] || MIME::Types::Loader::PATH
33
+ path = path || ENV['RUBY_MIME_TYPES_DATA'] || MIME::Types::Data::PATH
30
34
  @container = container || MIME::Types.new
31
35
  @path = File.expand_path(path)
32
- # begin
33
- # require 'mime/lazy_types'
34
- # @container.extend(MIME::LazyTypes)
35
- # end
36
36
  end
37
37
 
38
38
  # Loads a MIME::Types registry from YAML files (<tt>*.yml</tt> or
@@ -41,8 +41,7 @@ class MIME::Types::Loader
41
41
  # It is expected that the YAML objects contained within the registry array
42
42
  # will be tagged as <tt>!ruby/object:MIME::Type</tt>.
43
43
  #
44
- # Note that the YAML format is about 2½ times *slower* than either the v1
45
- # format or the JSON format.
44
+ # Note that the YAML format is about 2½ times *slower* than the JSON format.
46
45
  #
47
46
  # NOTE: The purpose of this format is purely for maintenance reasons.
48
47
  def load_yaml
@@ -89,122 +88,19 @@ class MIME::Types::Loader
89
88
  end
90
89
  end
91
90
 
92
- # Loads a MIME::Types registry from files found in +path+ that are in the
93
- # v1 data format. The file search for this will exclude both JSON
94
- # (<tt>*.json</tt>) and YAML (<tt>*.yml</tt> or <tt>*.yaml</tt>) files.
95
- #
96
- # This method has been deprecated and will be removed from mime-types 3.0.
97
- def load_v1
98
- MIME::Types.deprecated(self.class, __method__)
99
- Dir[v1_path].sort.each do |f|
100
- next if f =~ /\.(?:ya?ml|json|column)$/
101
- container.add(self.class.load_from_v1(f, true), true)
102
- end
103
- container
104
- end
105
-
106
- # Raised when a V1 format file is discovered. This exception will be removed
107
- # for mime-types 3.0.
108
- BadV1Format = Class.new(Exception)
109
-
110
91
  class << self
111
92
  # Loads the default MIME::Type registry.
112
93
  def load(options = { columnar: false })
113
94
  new.load(options)
114
95
  end
115
96
 
116
- # Build the type list from a file in the format:
117
- #
118
- # [*][!][os:]mt/st[<ws>@ext][<ws>:enc][<ws>'url-list][<ws>=docs]
119
- #
120
- # == *
121
- # An unofficial MIME type. This should be used if and only if the MIME type
122
- # is not properly specified (that is, not under either x-type or
123
- # vnd.name.type).
124
- #
125
- # == !
126
- # An obsolete MIME type. May be used with an unofficial MIME type.
127
- #
128
- # == os:
129
- # Platform-specific MIME type definition.
130
- #
131
- # == mt
132
- # The media type.
133
- #
134
- # == st
135
- # The media subtype.
136
- #
137
- # == <ws>@ext
138
- # The list of comma-separated extensions.
139
- #
140
- # == <ws>:enc
141
- # The encoding.
142
- #
143
- # == <ws>'url-list
144
- # The list of comma-separated URLs.
145
- #
146
- # == <ws>=docs
147
- # The documentation string.
148
- #
149
- # That is, everything except the media type and the subtype is optional. The
150
- # more information that's available, though, the richer the values that can
151
- # be provided.
152
- #
153
- # This method has been deprecated and will be removed in mime-types 3.0.
154
- def load_from_v1(filename, __internal__ = false)
155
- MIME::Types.deprecated(self.class, __method__) unless __internal__
156
- data = read_file(filename).split($/)
157
- mime = MIME::Types.new
158
- data.each_with_index { |line, index|
159
- item = line.chomp.strip
160
- next if item.empty?
161
-
162
- m = V1_FORMAT.match(item)
163
-
164
- unless m
165
- MIME::Types.logger.warn <<-EOS
166
- #{filename}:#{index + 1}: Parsing error in v1 MIME type definition.
167
- => #{line}
168
- EOS
169
- fail BadV1Format, line
170
- end
171
-
172
- unregistered, obsolete, _, mediatype, subtype, extensions, encoding,
173
- urls, docs, _ = *m.captures
174
-
175
- next if mediatype.nil?
176
-
177
- extensions &&= extensions.split(/,/)
178
- urls &&= urls.split(/,/)
179
-
180
- if docs.nil?
181
- use_instead = nil
182
- else
183
- use_instead = docs.scan(%r{use-instead:(\S+)}).flatten.first
184
- docs = docs.gsub(%r{use-instead:\S+}, '').squeeze(' \t')
185
- end
186
-
187
- mime_type = MIME::Type.new("#{mediatype}/#{subtype}") do |t|
188
- t.extensions = extensions
189
- t.encoding = encoding
190
- t.obsolete = obsolete
191
- t.registered = false if unregistered
192
- t.use_instead = use_instead
193
- t.docs = docs
194
- end
195
-
196
- mime.add_type(mime_type, true)
197
- }
198
- mime
199
- end
200
-
201
97
  # Loads MIME::Types from a single YAML file.
202
98
  #
203
99
  # It is expected that the YAML objects contained within the registry
204
100
  # array will be tagged as <tt>!ruby/object:MIME::Type</tt>.
205
101
  #
206
- # Note that the YAML format is about 2½ times *slower* than either the v1
207
- # format or the JSON format.
102
+ # Note that the YAML format is about 2½ times *slower* than the JSON
103
+ # format.
208
104
  #
209
105
  # NOTE: The purpose of this format is purely for maintenance reasons.
210
106
  def load_from_yaml(filename)
@@ -230,7 +126,7 @@ class MIME::Types::Loader
230
126
  private
231
127
 
232
128
  def read_file(filename)
233
- File.open(filename, 'r:UTF-8:-') { |f| f.read }
129
+ File.open(filename, 'r:UTF-8:-', &:read)
234
130
  end
235
131
  end
236
132
 
@@ -247,29 +143,4 @@ class MIME::Types::Loader
247
143
  def columnar_path
248
144
  File.join(path, '*.column')
249
145
  end
250
-
251
- def v1_path
252
- File.join(path, '*')
253
- end
254
-
255
- # The regular expression used to match a v1-format file-based MIME type
256
- # definition.
257
- #
258
- # This constant has been deprecated and will be removed in mime-types 3.0.
259
- V1_FORMAT = # :nodoc:
260
- %r{\A\s*
261
- ([*])? # 0: Unregistered?
262
- (!)? # 1: Obsolete?
263
- (?:(\w+):)? # 2: Platform marker
264
- ([-\w.+]+)/([-\w.+]*) # 3, 4: Media Type
265
- (?:\s+@(\S+))? # 5: Extensions
266
- (?:\s+:(base64|7bit|8bit|quoted\-printable))? # 6: Encoding
267
- (?:\s+'(\S+))? # 7: URL list
268
- (?:\s+=(.+))? # 8: Documentation
269
- (?:\s*([#].*)?)? # Comments
270
- \s*
271
- \z
272
- }x
273
-
274
- private_constant :V1_FORMAT if respond_to? :private_constant
275
146
  end
@@ -1,8 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # -*- ruby encoding: utf-8 -*-
2
4
 
3
5
  require 'logger'
4
6
 
7
+ ##
5
8
  module MIME
9
+ ##
6
10
  class Types
7
11
  class << self
8
12
  # Configure the MIME::Types logger. This defaults to an instance of a
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ class << MIME::Types
4
+ include Enumerable
5
+
6
+ ##
7
+ def new(*) # :nodoc:
8
+ super.tap do |types|
9
+ __instances__.add types
10
+ end
11
+ end
12
+
13
+ # MIME::Types#[] against the default MIME::Types registry.
14
+ def [](type_id, complete: false, registered: false)
15
+ __types__[type_id, complete: complete, registered: registered]
16
+ end
17
+
18
+ # MIME::Types#count against the default MIME::Types registry.
19
+ def count
20
+ __types__.count
21
+ end
22
+
23
+ # MIME::Types#each against the default MIME::Types registry.
24
+ def each
25
+ if block_given?
26
+ __types__.each { |t| yield t }
27
+ else
28
+ enum_for(:each)
29
+ end
30
+ end
31
+
32
+ # MIME::Types#type_for against the default MIME::Types registry.
33
+ def type_for(filename)
34
+ __types__.type_for(filename)
35
+ end
36
+ alias_method :of, :type_for
37
+
38
+ # MIME::Types#add against the default MIME::Types registry.
39
+ def add(*types)
40
+ __types__.add(*types)
41
+ end
42
+
43
+ private
44
+
45
+ def lazy_load?
46
+ if ENV.key?('RUBY_MIME_TYPES_LAZY_LOAD')
47
+ MIME::Types.logger.warn <<-WARNING.chomp
48
+ Lazy loading ($RUBY_MIME_TYPES_LAZY_LOAD) is deprecated and will be removed.
49
+ WARNING
50
+
51
+ (lazy = ENV['RUBY_MIME_TYPES_LAZY_LOAD']) && (lazy != 'false')
52
+ end
53
+ end
54
+
55
+ def __types__
56
+ (defined?(@__types__) and @__types__) or load_default_mime_types
57
+ end
58
+
59
+ unless private_method_defined?(:load_mode)
60
+ def load_mode
61
+ { columnar: true }
62
+ end
63
+ end
64
+
65
+ def load_default_mime_types(mode = load_mode)
66
+ if @__types__ = MIME::Types::Cache.load
67
+ __instances__.add(@__types__)
68
+ else
69
+ @__types__ = MIME::Types::Loader.load(mode)
70
+ MIME::Types::Cache.save(@__types__)
71
+ end
72
+ @__types__
73
+ end
74
+
75
+ def __instances__
76
+ @__instances__ ||= Set.new
77
+ end
78
+
79
+ def reindex_extensions(type)
80
+ __instances__.each do |instance|
81
+ instance.send(:reindex_extensions!, type)
82
+ end
83
+ true
84
+ end
85
+ end
86
+
87
+ ##
88
+ class MIME::Types
89
+ load_default_mime_types(load_mode) unless lazy_load?
90
+ end
data/lib/mime/types.rb CHANGED
@@ -1,9 +1,13 @@
1
- # -*- ruby encoding: utf-8 -*-
1
+ # frozen_string_literal: true
2
+
3
+ ##
4
+ module MIME
5
+ ##
6
+ class Types
7
+ end
8
+ end
2
9
 
3
- require 'mime/types/deprecations'
4
10
  require 'mime/type'
5
- require 'mime/types/cache'
6
- require 'mime/types/loader'
7
11
 
8
12
  # MIME::Types is a registry of MIME types. It is both a class (created with
9
13
  # MIME::Types.new) and a default registry (loaded automatically or through
@@ -66,37 +70,19 @@ class MIME::Types
66
70
 
67
71
  include Enumerable
68
72
 
69
- # The data version.
70
- attr_reader :data_version
71
-
72
73
  # Creates a new MIME::Types registry.
73
74
  def initialize
74
75
  @type_variants = Container.new
75
76
  @extension_index = Container.new
76
- @data_version = VERSION.dup.freeze
77
- end
78
-
79
- # This method is deprecated and will be removed in mime-types 3.0.
80
- def add_type_variant(mime_type) # :nodoc:
81
- MIME::Types.deprecated(self, __method__, :private)
82
- add_type_variant!(mime_type)
83
- end
84
-
85
- # This method is deprecated and will be removed in mime-types 3.0.
86
- def index_extensions(mime_type) # :nodoc:
87
- MIME::Types.deprecated(self, __method__, :private)
88
- index_extensions!(mime_type)
89
- end
90
-
91
- # This method is deprecated and will be removed in mime-types 3.0.
92
- def defined_types # :nodoc:
93
- MIME::Types.deprecated(self, __method__)
94
- @type_variants.values.flatten
95
77
  end
96
78
 
97
79
  # Returns the number of known type variants.
98
80
  def count
99
- @type_variants.values.reduce(0) { |m, o| m + o.size }
81
+ @type_variants.values.inject(0) { |a, e| a + e.size }
82
+ end
83
+
84
+ def inspect # :nodoc:
85
+ "#<#{self.class}: #{count} variants, #{@extension_index.count} extensions>"
100
86
  end
101
87
 
102
88
  # Iterates through the type variants.
@@ -108,7 +94,7 @@ class MIME::Types
108
94
  end
109
95
  end
110
96
 
111
- @__types__ = nil
97
+ @__types__ = nil
112
98
 
113
99
  # Returns a list of MIME::Type objects, which may be empty. The optional
114
100
  # flag parameters are <tt>:complete</tt> (finds only complete MIME::Type
@@ -135,13 +121,7 @@ class MIME::Types
135
121
  # without;
136
122
  # 5. Obsolete definitions use-instead clauses are compared.
137
123
  # 6. Sort on name.
138
- #
139
- # The previously supported (but deprecated) <tt>:platform</tt> flag is now ignored.
140
- def [](type_id, flags = {})
141
- if flags.key?(:platform)
142
- MIME::Types.deprecated(self, __method__, 'using the :platform flag')
143
- end
144
-
124
+ def [](type_id, complete: false, registered: false)
145
125
  matches = case type_id
146
126
  when MIME::Type
147
127
  @type_variants[type_id.simplified]
@@ -151,7 +131,9 @@ class MIME::Types
151
131
  @type_variants[MIME::Type.simplified(type_id)]
152
132
  end
153
133
 
154
- prune_matches(matches, flags).sort { |a, b| a.priority_compare(b) }
134
+ prune_matches(matches, complete, registered).sort { |a, b|
135
+ a.priority_compare(b)
136
+ }
155
137
  end
156
138
 
157
139
  # Return the list of MIME::Types which belongs to the file based on its
@@ -166,17 +148,12 @@ class MIME::Types
166
148
  # => [image/gif]
167
149
  # puts MIME::Types.type_for(%w(citydesk.xml citydesk.gif))
168
150
  # => [application/xml, image/gif, text/xml]
169
- #
170
- # The deprecated +platform+ flag is ignored.
171
- def type_for(filename, platform = :deprecated)
172
- types = Array(filename).flat_map { |fn|
151
+ def type_for(filename)
152
+ Array(filename).flat_map { |fn|
173
153
  @extension_index[fn.chomp.downcase[/\.?([^.]*?)$/, 1]]
174
- }.compact.sort { |a, b| a.priority_compare(b) }.uniq
175
-
176
- unless platform == :deprecated
177
- MIME::Types.deprecated(self, __method__, 'using the platform parameter')
178
- end
179
- types
154
+ }.compact.inject(Set.new, :+).sort { |a, b|
155
+ a.priority_compare(b)
156
+ }
180
157
  end
181
158
  alias_method :of, :type_for
182
159
 
@@ -194,7 +171,7 @@ class MIME::Types
194
171
  nil
195
172
  when MIME::Types
196
173
  variants = mime_type.instance_variable_get(:@type_variants)
197
- add(*variants.values.flatten, quiet)
174
+ add(*variants.values.inject(Set.new, :+).to_a, quiet)
198
175
  when Array
199
176
  add(*mime_type, quiet)
200
177
  else
@@ -217,110 +194,37 @@ Type #{type} is already registered as a variant of #{type.simplified}.
217
194
  index_extensions!(type)
218
195
  end
219
196
 
220
- class << self
221
- include Enumerable
222
-
223
- # Load MIME::Types from a v1 file registry.
224
- #
225
- # This method has been deprecated and will be removed in mime-types 3.0.
226
- def load_from_file(filename)
227
- MIME::Types.deprecated(self, __method__)
228
- MIME::Types::Loader.load_from_v1(filename)
229
- end
230
-
231
- # MIME::Types#[] against the default MIME::Types registry.
232
- def [](type_id, flags = {})
233
- __types__[type_id, flags]
234
- end
235
-
236
- # MIME::Types#count against the default MIME::Types registry.
237
- def count
238
- __types__.count
239
- end
240
-
241
- # MIME::Types#each against the default MIME::Types registry.
242
- def each
243
- if block_given?
244
- __types__.each { |t| yield t }
245
- else
246
- enum_for(:each)
247
- end
248
- end
249
-
250
- # MIME::Types#type_for against the default MIME::Types registry.
251
- def type_for(filename, platform = :deprecated)
252
- __types__.type_for(filename, platform)
253
- end
254
- alias_method :of, :type_for
255
-
256
- # MIME::Types#add against the default MIME::Types registry.
257
- def add(*types)
258
- __types__.add(*types)
259
- end
260
-
261
- # Returns the currently defined cache file, if any.
262
- #
263
- # This method has been deprecated and will be removed in mime-types 3.0.
264
- def cache_file
265
- MIME::Types.deprecated(self, __method__)
266
- ENV['RUBY_MIME_TYPES_CACHE']
267
- end
268
-
269
- def add_type_variant(mime_type) # :nodoc:
270
- __types__.add_type_variant(mime_type)
271
- end
272
-
273
- def index_extensions(mime_type) # :nodoc:
274
- __types__.index_extensions(mime_type)
275
- end
276
-
277
- private
278
-
279
- def lazy_load?
280
- (lazy = ENV['RUBY_MIME_TYPES_LAZY_LOAD']) && (lazy != 'false')
281
- end
282
-
283
- def __types__
284
- (defined?(@__types__) and @__types__) or load_default_mime_types
285
- end
286
-
287
- unless private_method_defined?(:load_mode)
288
- def load_mode
289
- {}
290
- end
291
- end
292
-
293
- def load_default_mime_types(mode = load_mode())
294
- @__types__ = MIME::Types::Cache.load
295
- unless @__types__
296
- @__types__ = MIME::Types::Loader.load(mode)
297
- MIME::Types::Cache.save(@__types__)
298
- end
299
- @__types__
300
- end
301
- end
302
-
303
197
  private
304
198
 
305
199
  def add_type_variant!(mime_type)
306
- @type_variants[mime_type.simplified] << mime_type
200
+ @type_variants.add(mime_type.simplified, mime_type)
201
+ end
202
+
203
+ def reindex_extensions!(mime_type)
204
+ return unless @type_variants[mime_type.simplified].include?(mime_type)
205
+ index_extensions!(mime_type)
307
206
  end
308
207
 
309
208
  def index_extensions!(mime_type)
310
- mime_type.extensions.each { |ext| @extension_index[ext] << mime_type }
209
+ mime_type.extensions.each { |ext| @extension_index.add(ext, mime_type) }
311
210
  end
312
211
 
313
- def prune_matches(matches, flags)
314
- matches.delete_if { |e| !e.complete? } if flags[:complete]
315
- matches.delete_if { |e| !e.registered? } if flags[:registered]
212
+ def prune_matches(matches, complete, registered)
213
+ matches.delete_if { |e| !e.complete? } if complete
214
+ matches.delete_if { |e| !e.registered? } if registered
316
215
  matches
317
216
  end
318
217
 
319
218
  def match(pattern)
320
- @type_variants.select { |k, _| k =~ pattern }.values.flatten
219
+ @type_variants.select { |k, _|
220
+ k =~ pattern
221
+ }.values.inject(Set.new, :+)
321
222
  end
322
-
323
- load_default_mime_types(load_mode) unless lazy_load?
324
223
  end
325
224
 
326
- # vim: ft=ruby
225
+ require 'mime/types/cache'
226
+ require 'mime/types/container'
227
+ require 'mime/types/loader'
228
+ require 'mime/types/logger'
229
+ require 'mime/types/_columnar'
230
+ require 'mime/types/registry'
data/lib/mime-types.rb CHANGED
@@ -1,3 +1,3 @@
1
- # -*- ruby encoding: utf-8 -*-
1
+ # frozen_string_literal: true
2
2
 
3
3
  require 'mime/types'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # -*- ruby encoding: utf-8 -*-
2
4
 
3
5
  require 'mime/type'
@@ -6,16 +8,8 @@ require 'fileutils'
6
8
  gem 'minitest'
7
9
  require 'fivemat/minitest/autorun'
8
10
  require 'minitest/focus'
11
+ require 'minitest/rg'
12
+ require 'minitest-bonus-assertions'
13
+ require 'minitest/hooks'
9
14
 
10
- module Minitest::MIMEDeprecated
11
- def assert_deprecated name, message = 'and will be removed'
12
- name = Regexp.escape(name)
13
- message = Regexp.escape(message)
14
-
15
- assert_output nil, /#{name} is deprecated #{message}./ do
16
- yield
17
- end
18
- end
19
-
20
- Minitest::Test.send(:include, self)
21
- end
15
+ ENV['RUBY_MIME_TYPES_LAZY_LOAD'] = 'yes'