mime-types 2.5 → 2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Contributing.rdoc +72 -20
  4. data/History-Types.rdoc +11 -0
  5. data/History.rdoc +31 -1
  6. data/Manifest.txt +18 -1
  7. data/README.rdoc +142 -61
  8. data/Rakefile +59 -91
  9. data/data/mime-types.json +1 -1
  10. data/data/mime.content_type.column +1907 -0
  11. data/data/mime.docs.column +1907 -0
  12. data/data/mime.encoding.column +1907 -0
  13. data/data/mime.friendly.column +1907 -0
  14. data/data/mime.obsolete.column +1907 -0
  15. data/data/mime.references.column +1907 -0
  16. data/data/mime.registered.column +1907 -0
  17. data/data/mime.signature.column +1907 -0
  18. data/data/mime.system.column +1907 -0
  19. data/data/mime.use_instead.column +1907 -0
  20. data/data/mime.xrefs.column +1907 -0
  21. data/lib/mime/type.rb +192 -119
  22. data/lib/mime/type/columnar.rb +112 -0
  23. data/lib/mime/types.rb +39 -25
  24. data/lib/mime/types/cache.rb +41 -35
  25. data/lib/mime/types/columnar.rb +160 -0
  26. data/lib/mime/types/deprecations.rb +53 -0
  27. data/lib/mime/types/loader.rb +60 -20
  28. data/lib/mime/types/loader_path.rb +2 -3
  29. data/lib/mime/types/logger.rb +35 -0
  30. data/support/apache_mime_types.rb +8 -1
  31. data/support/benchmarks/load.rb +17 -8
  32. data/support/benchmarks/load_allocations.rb +83 -0
  33. data/support/benchmarks/object_counts.rb +41 -0
  34. data/support/convert.rb +44 -24
  35. data/support/convert/columnar.rb +90 -0
  36. data/support/iana_registry.rb +18 -8
  37. data/test/fixture/json.json +1 -1
  38. data/test/fixture/yaml.yaml +3 -6
  39. data/test/minitest_helper.rb +9 -10
  40. data/test/test_mime_type.rb +126 -62
  41. data/test/test_mime_types.rb +15 -11
  42. data/test/test_mime_types_class.rb +16 -14
  43. data/test/test_mime_types_lazy.rb +7 -1
  44. data/test/test_mime_types_loader.rb +17 -8
  45. metadata +54 -12
  46. data/lib/mime.rb +0 -51
@@ -1,8 +1,16 @@
1
1
  # -*- ruby encoding: utf-8 -*-
2
2
 
3
3
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
4
+ ENV['RUBY_MIME_TYPES_LAZY_LOAD'] = 'true'
4
5
  require 'mime/types'
5
6
  require 'fileutils'
7
+ require 'json'
8
+
9
+ class MIME::Types
10
+ def self.deprecated(*_args, &_block)
11
+ # We are an internal tool. Silence deprecation warnings.
12
+ end
13
+ end
6
14
 
7
15
  class Convert
8
16
  class << self
@@ -24,34 +32,37 @@ class Convert
24
32
 
25
33
  # Converts from YAML to JSON. Defaults to converting to a single file.
26
34
  def from_yaml_to_json(args)
27
- mf = args.multiple_files || "single"
28
35
  from_yaml(yaml_path(args.source)).
29
- to_json(destination: json_path(args.destination),
30
- multiple_files: multiple_files(mf))
36
+ to_json(
37
+ destination: json_path(args.destination),
38
+ multiple_files: multiple_files(args.multiple_files || 'single')
39
+ )
31
40
  end
32
41
 
33
42
  # Converts from JSON to YAML. Defaults to converting to multiple files.
34
43
  def from_json_to_yaml(args)
35
- mf = args.multiple_files || "multiple"
36
44
  from_json(json_path(args.source)).
37
- to_yaml(destination: yaml_path(args.destination),
38
- multiple_files: multiple_files(mf))
45
+ to_yaml(
46
+ destination: yaml_path(args.destination),
47
+ multiple_files: multiple_files(args.multiple_files || 'multiple')
48
+ )
39
49
  end
40
50
 
41
51
  private :new
42
52
 
43
53
  private
54
+
44
55
  def yaml_path(path)
45
- if path.nil? or path.empty?
46
- 'type-lists'
47
- else
48
- path
49
- end
56
+ path_or_default(path, 'type-lists'.freeze)
50
57
  end
51
58
 
52
59
  def json_path(path)
60
+ path_or_default(path, 'data'.freeze)
61
+ end
62
+
63
+ def path_or_default(path, default)
53
64
  if path.nil? or path.empty?
54
- 'data'
65
+ default
55
66
  else
56
67
  path
57
68
  end
@@ -59,7 +70,7 @@ class Convert
59
70
 
60
71
  def multiple_files(flag)
61
72
  case flag.to_s.downcase
62
- when "true", "yes", "multiple"
73
+ when 'true', 'yes', 'multiple'
63
74
  true
64
75
  else
65
76
  false
@@ -69,10 +80,9 @@ class Convert
69
80
 
70
81
  def initialize(options = {})
71
82
  if options[:path].nil? or options[:path].empty?
72
- raise ArgumentError, ':path is required'
73
- end
74
- if options[:from].nil? or options[:from].empty?
75
- raise ArgumentError, ':from is required'
83
+ fail ArgumentError, ':path is required'
84
+ elsif options[:from].nil? or options[:from].empty?
85
+ fail ArgumentError, ':from is required'
76
86
  end
77
87
 
78
88
  @loader = MIME::Types::Loader.new(options[:path])
@@ -81,17 +91,18 @@ class Convert
81
91
 
82
92
  # Convert the data to JSON.
83
93
  def to_json(options = {})
84
- raise ArgumentError, 'destination is required' unless options[:destination]
94
+ options[:destination] or require_destination!
85
95
  write_types(options.merge(format: :json))
86
96
  end
87
97
 
88
98
  # Convert the data to YAML.
89
99
  def to_yaml(options = {})
90
- raise ArgumentError, 'destination is required' unless options[:destination]
100
+ options[:destination] or require_destination!
91
101
  write_types(options.merge(format: :yaml))
92
102
  end
93
103
 
94
104
  private
105
+
95
106
  def load_from(source_type)
96
107
  method = :"load_#{source_type}"
97
108
  @loader.send(method)
@@ -116,11 +127,7 @@ class Convert
116
127
 
117
128
  def write_multiple_files(options)
118
129
  d = options[:destination]
119
- if File.exist?(d) and not File.directory?(d)
120
- raise ArgumentError, 'Cannot write multiple files to a file.'
121
- end
122
-
123
- FileUtils.mkdir_p d unless File.exist?(d)
130
+ must_be_directory!(d)
124
131
 
125
132
  media_types = MIME::Types.map(&:media_type).uniq
126
133
  media_types.each { |media_type|
@@ -135,4 +142,17 @@ class Convert
135
142
  def convert(data, format)
136
143
  data.send(:"to_#{format}")
137
144
  end
145
+
146
+ def require_destination!
147
+ fail ArgumentError, 'Destination path is required.'
148
+ end
149
+
150
+ def must_be_directory!(path)
151
+ if File.exist?(path) and !File.directory?(path)
152
+ fail ArgumentError, 'Cannot write multiple files to a file.'
153
+ end
154
+
155
+ FileUtils.mkdir_p(path) unless File.exist?(path)
156
+ path
157
+ end
138
158
  end
@@ -0,0 +1,90 @@
1
+ require 'convert'
2
+
3
+ class Convert::Columnar < Convert
4
+ class << self
5
+ # Converts from YAML to Columnar format. This *always* converts to multiple
6
+ # files.
7
+ def from_yaml_to_columnar(args)
8
+ from_yaml(yaml_path(args.source)).
9
+ to_columnar(destination: columnar_path(args.destination))
10
+ end
11
+
12
+ private
13
+
14
+ def columnar_path(path)
15
+ path_or_default(path, 'data')
16
+ end
17
+ end
18
+
19
+ # Convert the data to multiple text files.
20
+ def to_columnar(options = {})
21
+ root = options[:destination] or require_destination!
22
+ @root = must_be_directory!(root)
23
+ @data = @loader.container.sort.map(&:to_h)
24
+
25
+ column_file('content_type') do |type|
26
+ [ type['content-type'], Array(type['extensions']).join(' ') ].
27
+ flatten.join(' ').strip
28
+ end
29
+
30
+ required_file('encoding')
31
+ optional_file('docs')
32
+ optional_file('system')
33
+ bool_file('obsolete')
34
+ bool_file('registered')
35
+ bool_file('signature')
36
+ array_file('references')
37
+ dict_file('xrefs')
38
+ dict_file('friendly')
39
+ optional_file('use_instead', 'use-instead')
40
+ end
41
+
42
+ def column_file(name, &block)
43
+ File.open(File.join(@root, "mime.#{name}.column"), 'wb') do |f|
44
+ f.puts @data.map(&block)
45
+ end
46
+ end
47
+
48
+ def bool_file(name, *fields)
49
+ fields = [ name ] if fields.empty?
50
+ column_file(name) do |type|
51
+ fields.map { |field|
52
+ type[field] ? 1 : 0
53
+ }.join(' ')
54
+ end
55
+ end
56
+
57
+ def required_file(name, field = name)
58
+ column_file(name) { |type| type[field] }
59
+ end
60
+
61
+ def optional_file(name, field = name)
62
+ column_file(name) { |type| opt(type[field]) }
63
+ end
64
+
65
+ def array_file(name, field = name)
66
+ column_file(name) { |type| arr(type[field]) }
67
+ end
68
+
69
+ def dict_file(name, field = name)
70
+ column_file(name) { |type| dict(type[field]) }
71
+ end
72
+
73
+ def opt(value)
74
+ value || '-'
75
+ end
76
+
77
+ def arr(value)
78
+ Array(opt(value)).join('|')
79
+ end
80
+
81
+ def dict(value)
82
+ if value
83
+ value.sort.map { |k, v|
84
+ [ k, Array(v).compact.join('^') ].join('^')
85
+ }.join('|')
86
+ else
87
+ '-'
88
+ end
89
+ end
90
+ end
@@ -11,6 +11,12 @@ require 'yaml'
11
11
  ENV['RUBY_MIME_TYPES_LAZY_LOAD'] = 'yes'
12
12
  require 'mime/types'
13
13
 
14
+ class MIME::Types
15
+ def self.deprecated(*_args, &_block)
16
+ # We are an internal tool. Silence deprecation warnings.
17
+ end
18
+ end
19
+
14
20
  class IANARegistry
15
21
  DEFAULTS = {
16
22
  url: %q(https://www.iana.org/assignments/media-types/media-types.xml),
@@ -21,7 +27,7 @@ class IANARegistry
21
27
  dest = Pathname(options[:to] || DEFAULTS[:to]).expand_path
22
28
  url = options.fetch(:url, DEFAULTS[:url])
23
29
 
24
- puts "Downloading IANA MIME type assignments."
30
+ puts 'Downloading IANA MIME type assignments.'
25
31
  puts "\t#{url}"
26
32
  xml = Nokogiri::XML(open(url) { |f| f.read })
27
33
 
@@ -48,7 +54,7 @@ class IANARegistry
48
54
  yield self if block_given?
49
55
  end
50
56
 
51
- ASSIGNMENT_FILE_REF = "{%s=http://www.iana.org/assignments/media-types/%s}"
57
+ ASSIGNMENT_FILE_REF = '{%s=http://www.iana.org/assignments/media-types/%s}'
52
58
 
53
59
  def parse
54
60
  @registry.css('record').each do |record|
@@ -63,9 +69,11 @@ class IANARegistry
63
69
 
64
70
  subtype, notes = subtype.split(/ /, 2)
65
71
 
66
- refs, xrefs = parse_refs_and_files(record.css('xref'),
67
- record.css('file'),
68
- subtype)
72
+ refs, xrefs = parse_refs_and_files(
73
+ record.css('xref'),
74
+ record.css('file'),
75
+ subtype
76
+ )
69
77
 
70
78
  xrefs['notes'] << notes if notes
71
79
 
@@ -102,6 +110,7 @@ class IANARegistry
102
110
  end
103
111
 
104
112
  private
113
+
105
114
  def mime_types_for(file)
106
115
  if file.exist?
107
116
  MIME::Types::Loader.load_from_yaml(file)
@@ -115,7 +124,8 @@ class IANARegistry
115
124
  r = []
116
125
 
117
126
  refs.each do |xref|
118
- type, data = xref["type"], xref["data"]
127
+ type = xref['type']
128
+ data = xref['data']
119
129
 
120
130
  r << ref_from_type(type, data)
121
131
 
@@ -129,11 +139,11 @@ class IANARegistry
129
139
  file.text
130
140
  end
131
141
 
132
- if file["type"] == "template"
142
+ if file['type'] == 'template'
133
143
  r << (ASSIGNMENT_FILE_REF % [ file_name, file_name ])
134
144
  end
135
145
 
136
- xr[file["type"]] << file_name
146
+ xr[file['type']] << file_name
137
147
  end
138
148
 
139
149
  [ r, xr ]
@@ -1 +1 @@
1
- [{"content-type":"application/smil","encoding":"8bit","extensions":["smi","smil"],"obsolete":true,"use-instead":["application/smil+xml"],"references":["IANA","RFC4536"],"registered":true},{"content-type":"audio/vnd.qcelp","encoding":"base64","extensions":["qcp"],"obsolete":true,"use-instead":["audio/QCELP"],"references":["IANA","RFC3625"],"registered":true},{"content-type":"image/bmp","encoding":"base64","extensions":["bmp"],"obsolete":true,"use-instead":["image/x-bmp"],"registered":false},{"content-type":"application/acad","encoding":"base64","references":["LTSW"],"registered":false},{"content-type":"audio/webm","encoding":"base64","extensions":["webm"],"references":["{WebM=http://www.webmproject.org/code/specs/container/}"],"registered":false},{"content-type":"image/pjpeg","docs":"Fixes a bug with IE6 and progressive JPEGs","encoding":"base64","registered":false},{"content-type":"application/1d-interleaved-parityfec","encoding":"base64","references":["IANA","RFC6015"],"registered":true},{"content-type":"audio/1d-interleaved-parityfec","encoding":"base64","references":["IANA","RFC6015"],"registered":true},{"content-type":"application/x-apple-diskimage","encoding":"base64","extensions":["dmg"],"registered":false,"system":"mac"}]
1
+ [{"content-type":"application/smil","encoding":"8bit","extensions":["smi","smil"],"obsolete":true,"use-instead":"application/smil+xml","references":["IANA","RFC4536"],"registered":true},{"content-type":"audio/vnd.qcelp","encoding":"base64","extensions":["qcp"],"obsolete":true,"use-instead":"audio/QCELP","references":["IANA","RFC3625"],"registered":true},{"content-type":"image/bmp","encoding":"base64","extensions":["bmp"],"obsolete":true,"use-instead":"image/x-bmp","registered":false},{"content-type":"application/acad","encoding":"base64","references":["LTSW"],"registered":false},{"content-type":"audio/webm","encoding":"base64","extensions":["webm"],"references":["{WebM=http://www.webmproject.org/code/specs/container/}"],"registered":false},{"content-type":"image/pjpeg","docs":"Fixes a bug with IE6 and progressive JPEGs","encoding":"base64","registered":false},{"content-type":"application/1d-interleaved-parityfec","encoding":"base64","references":["IANA","RFC6015"],"registered":true},{"content-type":"audio/1d-interleaved-parityfec","encoding":"base64","references":["IANA","RFC6015"],"registered":true},{"content-type":"application/x-apple-diskimage","encoding":"base64","extensions":["dmg"],"registered":false,"system":"mac"}]
@@ -6,8 +6,7 @@
6
6
  - smi
7
7
  - smil
8
8
  obsolete: true
9
- use-instead:
10
- - application/smil+xml
9
+ use-instead: application/smil+xml
11
10
  references:
12
11
  - IANA
13
12
  - RFC4536
@@ -18,8 +17,7 @@
18
17
  extensions:
19
18
  - qcp
20
19
  obsolete: true
21
- use-instead:
22
- - audio/QCELP
20
+ use-instead: audio/QCELP
23
21
  references:
24
22
  - IANA
25
23
  - RFC3625
@@ -30,8 +28,7 @@
30
28
  extensions:
31
29
  - bmp
32
30
  obsolete: true
33
- use-instead:
34
- - image/x-bmp
31
+ use-instead: image/x-bmp
35
32
  registered: false
36
33
  - !ruby/object:MIME::Type
37
34
  content-type: application/acad
@@ -5,18 +5,17 @@ require 'fileutils'
5
5
 
6
6
  gem 'minitest'
7
7
  require 'minitest/autorun'
8
+ require 'minitest/focus'
8
9
 
9
- module MIME
10
- @__deprecated = Hash.new { |h, k| h[k] = true }
10
+ module Minitest::MIMEDeprecated
11
+ def assert_deprecated name, message = 'and will be removed'
12
+ name = Regexp.escape(name)
13
+ message = Regexp.escape(message)
11
14
 
12
- class << self
13
- attr_reader :__deprecated
15
+ assert_output nil, /#{name} is deprecated #{message}./ do
16
+ yield
17
+ end
14
18
  end
15
- end
16
19
 
17
- def assert_deprecated(name, message = "and will be removed")
18
- MIME.__deprecated[name] = false
19
- assert_output(nil, /#{Regexp.escape(name)} is deprecated #{Regexp.escape(message)}./) { yield }
20
- ensure
21
- MIME.__deprecated[name] = true
20
+ Minitest::Test.send(:include, self)
22
21
  end
@@ -17,7 +17,9 @@ class TestMIMEType < Minitest::Test
17
17
  }
18
18
  js.encoding = '8bit'
19
19
  js.extensions = %w(js sj)
20
- js.references = %w(IANA RFC4329 {application/javascript=http://www.iana.org/assignments/media-types/application/javascript})
20
+ assert_deprecated('MIME::Type#references=') do
21
+ js.references = %w(IANA RFC4329 {application/javascript=http://www.iana.org/assignments/media-types/application/javascript})
22
+ end
21
23
  js.registered = true
22
24
 
23
25
  yield js if block_given?
@@ -44,24 +46,30 @@ class TestMIMEType < Minitest::Test
44
46
 
45
47
  def setup
46
48
  @applzip = MIME::Type.new('x-appl/x-zip') { |t|
47
- t.extensions = ['zip', 'zp']
49
+ t.extensions = %w(zip zp)
48
50
  }
49
51
  end
50
52
 
51
53
  def test_class_from_array
52
54
  yaml = nil
53
- assert_deprecated("MIME::Type.from_array") do
54
- yaml = MIME::Type.from_array('text/x-yaml', %w(yaml yml), '8bit',
55
- 'd9d172f608')
55
+ assert_deprecated('MIME::Type.from_array') do
56
+ yaml = MIME::Type.from_array(
57
+ 'text/x-yaml',
58
+ %w(yaml yml),
59
+ '8bit',
60
+ 'd9d172f608'
61
+ )
56
62
  end
57
63
  assert_instance_of(MIME::Type, yaml)
58
64
  assert_equal('text/yaml', yaml.simplified)
59
- assert_raises(ArgumentError) { MIME::Type.from_array }
65
+ assert_deprecated('MIME::Type.from_array') do
66
+ assert_raises(ArgumentError) { MIME::Type.from_array }
67
+ end
60
68
  end
61
69
 
62
70
  def test_class_from_hash
63
71
  yaml = nil
64
- assert_deprecated("MIME::Type.from_hash") do
72
+ assert_deprecated('MIME::Type.from_hash') do
65
73
  yaml = MIME::Type.from_hash('Content-Type' => 'text/x-yaml',
66
74
  'Content-Transfer-Encoding' => '8bit',
67
75
  'System' => 'd9d172f608',
@@ -73,7 +81,7 @@ class TestMIMEType < Minitest::Test
73
81
 
74
82
  def test_class_from_mime_type
75
83
  zip2 = nil
76
- assert_deprecated("MIME::Type.from_mime_type") do
84
+ assert_deprecated('MIME::Type.from_mime_type') do
77
85
  zip2 = MIME::Type.from_mime_type(@applzip)
78
86
  end
79
87
  assert_instance_of(MIME::Type, @applzip)
@@ -102,7 +110,7 @@ class TestMIMEType < Minitest::Test
102
110
  end
103
111
 
104
112
  def test_spaceship_compare # '<=>'
105
- assert(MIME::Type.new('text/plain') == MIME::Type.new('text/plain'))
113
+ assert(MIME::Type.new('text/plain') == MIME::Type.new('text/plain')) # rubocop:disable Lint/UselessComparison
106
114
  assert(MIME::Type.new('text/plain') != MIME::Type.new('image/jpeg'))
107
115
  assert(MIME::Type.new('text/plain') == 'text/plain')
108
116
  assert(MIME::Type.new('text/plain') != 'image/jpeg')
@@ -148,7 +156,7 @@ class TestMIMEType < Minitest::Test
148
156
  assert_equal('text/vCard', MIME::Type.new('text/vCard').content_type)
149
157
  assert_equal('application/pkcs7-mime',
150
158
  MIME::Type.new('application/pkcs7-mime').content_type)
151
- assert_equal('x-appl/x-zip', @applzip.content_type);
159
+ assert_equal('x-appl/x-zip', @applzip.content_type)
152
160
  assert_equal('base64', @applzip.encoding)
153
161
  end
154
162
 
@@ -188,7 +196,7 @@ class TestMIMEType < Minitest::Test
188
196
 
189
197
  def test_docs_equals
190
198
  yaml = make_yaml_mime_type
191
- assert_nil(yaml.docs)
199
+ assert_equal [], yaml.docs
192
200
  yaml.docs = 'YAML docs'
193
201
  assert_equal('YAML docs', yaml.docs)
194
202
  end
@@ -267,14 +275,18 @@ class TestMIMEType < Minitest::Test
267
275
 
268
276
  def test_platform_eh
269
277
  yaml = nil
270
- assert_deprecated("MIME::Type#platform?") do
278
+ assert_deprecated('MIME::Type#platform?') do
271
279
  yaml = make_yaml_mime_type
272
280
  refute(yaml.platform?)
273
281
  end
274
282
  yaml.system = nil
275
- refute(yaml.platform?)
283
+ assert_deprecated('MIME::Type#platform?') do
284
+ refute(yaml.platform?)
285
+ end
276
286
  yaml.system = %r{#{RUBY_PLATFORM}}
277
- assert(yaml.platform?)
287
+ assert_deprecated('MIME::Type#platform?') do
288
+ assert(yaml.platform?)
289
+ end
278
290
  end
279
291
 
280
292
  def assert_priority(l, e, r)
@@ -381,7 +393,7 @@ class TestMIMEType < Minitest::Test
381
393
  end
382
394
 
383
395
  def test_system
384
- assert_deprecated("MIME::Type#system") do
396
+ assert_deprecated('MIME::Type#system') do
385
397
  yaml = make_yaml_mime_type
386
398
  assert_equal(%r{d9d172f608}, yaml.system)
387
399
  end
@@ -390,31 +402,37 @@ class TestMIMEType < Minitest::Test
390
402
  def test_system_equals
391
403
  yaml = make_yaml_mime_type
392
404
  yaml.system = /win32/
393
- assert_equal(%r{win32}, yaml.system)
405
+ assert_deprecated('MIME::Type#system') do
406
+ assert_equal(%r{win32}, yaml.system)
407
+ end
394
408
  yaml.system = nil
395
- assert_nil(yaml.system)
409
+ assert_deprecated('MIME::Type#system') do
410
+ assert_nil(yaml.system)
411
+ end
396
412
  end
397
413
 
398
414
  def test_system_eh
399
415
  yaml = make_yaml_mime_type
400
- assert_deprecated("MIME::Type#system?") do
416
+ assert_deprecated('MIME::Type#system?') do
401
417
  assert(yaml.system?)
402
418
  end
403
419
  yaml.system = nil
404
- refute(yaml.system?)
420
+ assert_deprecated('MIME::Type#system?') do
421
+ refute(yaml.system?)
422
+ end
405
423
  end
406
424
 
407
425
  def test_to_a
408
426
  yaml = make_yaml_mime_type
409
- assert_deprecated("MIME::Type#to_a") do
427
+ assert_deprecated('MIME::Type#to_a') do
410
428
  assert_equal(['text/x-yaml', %w(yaml yml), '8bit', /d9d172f608/,
411
- false, nil, [], false], yaml.to_a)
429
+ false, [], [], false], yaml.to_a)
412
430
  end
413
431
  end
414
432
 
415
433
  def test_to_hash
416
434
  yaml = make_yaml_mime_type
417
- assert_deprecated("MIME::Type#to_hash") do
435
+ assert_deprecated('MIME::Type#to_hash') do
418
436
  assert_equal(
419
437
  {
420
438
  'Content-Type' => 'text/x-yaml',
@@ -424,7 +442,7 @@ class TestMIMEType < Minitest::Test
424
442
  'Registered' => false,
425
443
  'URL' => [],
426
444
  'Obsolete' => false,
427
- 'Docs' => nil
445
+ 'Docs' => []
428
446
  },
429
447
  yaml.to_hash)
430
448
  end
@@ -432,7 +450,7 @@ class TestMIMEType < Minitest::Test
432
450
 
433
451
  def assert_type_has_keys(type, *keys)
434
452
  hash = type.to_h
435
- keys.flatten.each { |key| assert(hash.has_key?(key)) }
453
+ keys.flatten.each { |key| assert(hash.key?(key)) }
436
454
  end
437
455
 
438
456
  def test_to_h
@@ -441,9 +459,13 @@ class TestMIMEType < Minitest::Test
441
459
  assert_type_has_keys(make(t) { |v| v.docs = 'Something' }, 'docs')
442
460
  assert_type_has_keys(make(t) { |v| v.extensions = %w(b) }, 'extensions')
443
461
  assert_type_has_keys(make(t) { |v| v.obsolete = true }, 'obsolete')
444
- assert_type_has_keys(make(t) { |v| v.obsolete = true; v.use_instead = 'c/d' },
445
- 'obsolete', 'use-instead')
446
- assert_type_has_keys(make(t) { |v| v.references = 'IANA' }, 'references')
462
+ assert_type_has_keys(make(t) { |v|
463
+ v.obsolete = true
464
+ v.use_instead = 'c/d'
465
+ }, 'obsolete', 'use-instead')
466
+ assert_type_has_keys(make(t) { |v|
467
+ assert_deprecated('MIME::Type#references=') { v.references = 'IANA' }
468
+ }, 'references')
447
469
  assert_type_has_keys(make(t) { |v| v.signature = true }, 'signature')
448
470
  assert_type_has_keys(make(t) { |v| v.system = /xyz/ }, 'system')
449
471
  end
@@ -468,7 +490,7 @@ class TestMIMEType < Minitest::Test
468
490
  begin
469
491
  MIME::Type.new(nil)
470
492
  rescue MIME::Type::InvalidContentType => ex
471
- assert_equal("Invalid Content-Type nil", ex.message)
493
+ assert_equal('Invalid Content-Type nil', ex.message)
472
494
  end
473
495
  end
474
496
 
@@ -477,16 +499,26 @@ class TestMIMEType < Minitest::Test
477
499
  end
478
500
 
479
501
  def test_references
480
- assert_empty(make_yaml_mime_type.references)
502
+ assert_deprecated('MIME::Type#references') do
503
+ assert_empty(make_yaml_mime_type.references)
504
+ end
481
505
  end
482
506
 
483
507
  def test_references_equals
484
508
  yaml = make_yaml_mime_type
485
- yaml.references = "IANA"
486
- assert_equal(%W(IANA), yaml.references)
509
+ assert_deprecated('MIME::Type#references=') do
510
+ yaml.references = 'IANA'
511
+ end
512
+ assert_deprecated('MIME::Type#references') do
513
+ assert_equal(%w(IANA), yaml.references)
514
+ end
487
515
 
488
- yaml.references = %w(IANA IANA)
489
- assert_equal(%W(IANA), yaml.references)
516
+ assert_deprecated('MIME::Type#references=') do
517
+ yaml.references = %w(IANA IANA)
518
+ end
519
+ assert_deprecated('MIME::Type#references') do
520
+ assert_equal(%w(IANA), yaml.references)
521
+ end
490
522
  end
491
523
 
492
524
  def test_xrefs
@@ -501,58 +533,90 @@ class TestMIMEType < Minitest::Test
501
533
 
502
534
  def test_xref_urls
503
535
  js = make_javascript do |j|
504
- j.xrefs = j.xrefs.merge({
536
+ j.xrefs = j.xrefs.merge(
505
537
  'draft' => [ 'RFC-ietf-appsawg-json-merge-patch-07' ],
506
538
  'person' => [ 'David_Singer' ],
507
539
  'rfc-errata' => [ '3245' ],
508
540
  'uri' => [ 'http://exmple.org' ],
509
541
  'text' => [ 'text' ]
510
- })
542
+ )
511
543
  end
512
544
  assert_equal(
513
545
  [
514
- "http://www.iana.org/go/rfc4239",
515
- "http://www.iana.org/assignments/media-types/application/javascript",
516
- "http://www.iana.org/go/draft-ietf-appsawg-json-merge-patch-07",
517
- "http://www.iana.org/assignments/media-types/media-types.xhtml#David_Singer",
518
- "http://www.rfc-editor.org/errata_search.php?eid=3245",
519
- "http://exmple.org",
520
- "text"
546
+ 'http://www.iana.org/go/rfc4239',
547
+ 'http://www.iana.org/assignments/media-types/application/javascript',
548
+ 'http://www.iana.org/go/draft-ietf-appsawg-json-merge-patch-07',
549
+ 'http://www.iana.org/assignments/media-types/media-types.xhtml#David_Singer',
550
+ 'http://www.rfc-editor.org/errata_search.php?eid=3245',
551
+ 'http://exmple.org',
552
+ 'text'
521
553
  ],
522
554
  js.xref_urls
523
555
  )
524
556
  end
525
557
 
526
558
  def test_url
527
- assert_deprecated("MIME::Type#url", "and has been renamed to #references") do
559
+ assert_deprecated('MIME::Type#url') do
528
560
  assert_empty(make_yaml_mime_type.url)
529
561
  end
530
562
  end
531
563
 
532
564
  def test_url_equals
533
565
  yaml = make_yaml_mime_type
534
- assert_deprecated("MIME::Type#url=") do
535
- yaml.url = "IANA"
566
+ assert_deprecated('MIME::Type#url=') do
567
+ yaml.url = 'IANA'
568
+ end
569
+ assert_deprecated('MIME::Type#url') do
570
+ assert_equal(%w(IANA), yaml.url)
536
571
  end
537
- assert_equal(%W(IANA), yaml.url)
538
572
  end
539
573
 
540
574
  def test_urls
541
575
  yaml = make_yaml_mime_type
542
- assert_empty(yaml.urls)
543
- yaml.references = %w(IANA RFC123 DRAFT:xyz [abc])
544
- assert_equal(%w(http://www.iana.org/assignments/media-types/text/yaml
545
- http://rfc-editor.org/rfc/rfc123.txt
546
- http://datatracker.ietf.org/public/idindex.cgi?command=id_details&filename=xyz
547
- http://www.iana.org/assignments/contact-people.htm#abc),
548
- yaml.urls)
549
- yaml.references = '[def=lax]'
550
- assert_equal([%w(def http://www.iana.org/assignments/contact-people.htm#lax)],
551
- yaml.urls)
552
- yaml.references = '{mno=pqr}'
553
- assert_equal([%w(mno pqr)], yaml.urls)
554
- yaml.references = 'hoge'
555
- assert_equal(%w(hoge), yaml.urls)
576
+ assert_deprecated('MIME::Type#urls') do
577
+ assert_empty(yaml.urls)
578
+ end
579
+
580
+ assert_deprecated('MIME::Type#references=') do
581
+ yaml.references = %w(IANA RFC123 DRAFT:xyz [abc])
582
+ end
583
+
584
+ assert_deprecated('MIME::Type#urls') do
585
+ assert_equal(
586
+ %w(
587
+ http://www.iana.org/assignments/media-types/text/yaml
588
+ http://rfc-editor.org/rfc/rfc123.txt
589
+ http://datatracker.ietf.org/public/idindex.cgi?command=id_details&filename=xyz
590
+ http://www.iana.org/assignments/contact-people.htm#abc
591
+ ),
592
+ yaml.urls
593
+ )
594
+ end
595
+
596
+ assert_deprecated('MIME::Type#references=') do
597
+ yaml.references = '[def=lax]'
598
+ end
599
+
600
+ assert_deprecated('MIME::Type#urls') do
601
+ assert_equal([%w(def http://www.iana.org/assignments/contact-people.htm#lax)],
602
+ yaml.urls)
603
+ end
604
+
605
+ assert_deprecated('MIME::Type#references=') do
606
+ yaml.references = '{mno=pqr}'
607
+ end
608
+
609
+ assert_deprecated('MIME::Type#urls') do
610
+ assert_equal([%w(mno pqr)], yaml.urls)
611
+ end
612
+
613
+ assert_deprecated('MIME::Type#references=') do
614
+ yaml.references = 'hoge'
615
+ end
616
+
617
+ assert_deprecated('MIME::Type#urls') do
618
+ assert_equal(%w(hoge), yaml.urls)
619
+ end
556
620
  end
557
621
 
558
622
  def test_use_instead
@@ -581,7 +645,7 @@ class TestMIMEType < Minitest::Test
581
645
  end
582
646
 
583
647
  def test_friendly_set
584
- assert_equal({ 'en' => 'Zip' }, @applzip.friendly([ 'en', 'Zip' ]))
648
+ assert_equal({ 'en' => 'Zip' }, @applzip.friendly(%w(en Zip)))
585
649
  assert_equal({ 'en' => 'Zip Archive' }, @applzip.friendly('en' => 'Zip Archive'))
586
650
  end
587
651
 
@@ -596,7 +660,7 @@ class TestMIMEType < Minitest::Test
596
660
  assert_output(nil, /MIME::InvalidContentType/) do
597
661
  assert_same(MIME::InvalidContentType, MIME::Type::InvalidContentType)
598
662
  end
599
- assert_silent do
663
+ assert_output(nil, /MIME::InvalidContentType/) do
600
664
  assert_same(MIME::InvalidContentType, MIME::Type::InvalidContentType)
601
665
  end
602
666
  assert_raises(NameError) { MIME::Foo }