mime-types 3.2.2 → 3.4.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/mime/type.rb CHANGED
@@ -9,25 +9,61 @@ end
9
9
  # == Usage
10
10
  # require 'mime/types'
11
11
  #
12
- # plaintext = MIME::Types['text/plain'].first
13
- # # returns [text/plain, text/plain]
12
+ # plaintext = MIME::Types['text/plain'] # => [ text/plain ]
14
13
  # text = plaintext.first
15
- # print text.media_type # => 'text'
16
- # print text.sub_type # => 'plain'
14
+ # puts text.media_type # => 'text'
15
+ # puts text.sub_type # => 'plain'
17
16
  #
18
- # puts text.extensions.join(" ") # => 'asc txt c cc h hh cpp'
17
+ # puts text.extensions.join(' ') # => 'txt asc c cc h hh cpp hpp dat hlp'
18
+ # puts text.preferred_extension # => 'txt'
19
+ # puts text.friendly # => 'Text Document'
20
+ # puts text.i18n_key # => 'text.plain'
19
21
  #
20
- # puts text.encoding # => 8bit
22
+ # puts text.encoding # => quoted-printable
23
+ # puts text.default_encoding # => quoted-printable
21
24
  # puts text.binary? # => false
22
25
  # puts text.ascii? # => true
26
+ # puts text.obsolete? # => false
27
+ # puts text.registered? # => true
28
+ # puts text.provisional? # => false
29
+ # puts text.complete? # => true
30
+ #
31
+ # puts text # => 'text/plain'
32
+ #
23
33
  # puts text == 'text/plain' # => true
24
- # puts MIME::Type.simplified('x-appl/x-zip') # => 'appl/zip'
34
+ # puts 'text/plain' == text # => true
35
+ # puts text == 'text/x-plain' # => false
36
+ # puts 'text/x-plain' == text # => false
37
+ #
38
+ # puts MIME::Type.simplified('x-appl/x-zip') # => 'x-appl/x-zip'
39
+ # puts MIME::Type.i18n_key('x-appl/x-zip') # => 'x-appl.x-zip'
40
+ #
41
+ # puts text.like?('text/x-plain') # => true
42
+ # puts text.like?(MIME::Type.new('x-text/x-plain')) # => true
43
+ #
44
+ # puts text.xrefs.inspect # => { "rfc" => [ "rfc2046", "rfc3676", "rfc5147" ] }
45
+ # puts text.xref_urls # => [ "http://www.iana.org/go/rfc2046",
46
+ # # "http://www.iana.org/go/rfc3676",
47
+ # # "http://www.iana.org/go/rfc5147" ]
25
48
  #
26
- # puts MIME::Types.any? { |type|
27
- # type.content_type == 'text/plain'
28
- # } # => true
29
- # puts MIME::Types.all?(&:registered?)
30
- # # => false
49
+ # xtext = MIME::Type.new('x-text/x-plain')
50
+ # puts xtext.media_type # => 'text'
51
+ # puts xtext.raw_media_type # => 'x-text'
52
+ # puts xtext.sub_type # => 'plain'
53
+ # puts xtext.raw_sub_type # => 'x-plain'
54
+ # puts xtext.complete? # => false
55
+ #
56
+ # puts MIME::Types.any? { |type| type.content_type == 'text/plain' } # => true
57
+ # puts MIME::Types.all?(&:registered?) # => false
58
+ #
59
+ # # Various string representations of MIME types
60
+ # qcelp = MIME::Types['audio/QCELP'].first # => audio/QCELP
61
+ # puts qcelp.content_type # => 'audio/QCELP'
62
+ # puts qcelp.simplified # => 'audio/qcelp'
63
+ #
64
+ # xwingz = MIME::Types['application/x-Wingz'].first # => application/x-Wingz
65
+ # puts xwingz.content_type # => 'application/x-Wingz'
66
+ # puts xwingz.simplified # => 'application/x-wingz'
31
67
  class MIME::Type
32
68
  # Reflects a MIME content-type specification that is not correctly
33
69
  # formatted (it isn't +type+/+subtype+).
@@ -57,24 +93,24 @@ class MIME::Type
57
93
  end
58
94
 
59
95
  # The released version of the mime-types library.
60
- VERSION = '3.2.2'
96
+ VERSION = "3.4.1"
61
97
 
62
98
  include Comparable
63
99
 
64
100
  # :stopdoc:
65
101
  # TODO verify mime-type character restrictions; I am pretty sure that this is
66
102
  # too wide open.
67
- MEDIA_TYPE_RE = %r{([-\w.+]+)/([-\w.+]*)}
68
- I18N_RE = %r{[^[:alnum:]]}
69
- BINARY_ENCODINGS = %w(base64 8bit)
70
- ASCII_ENCODINGS = %w(7bit quoted-printable)
103
+ MEDIA_TYPE_RE = %r{([-\w.+]+)/([-\w.+]*)}.freeze
104
+ I18N_RE = /[^[:alnum:]]/.freeze
105
+ BINARY_ENCODINGS = %w[base64 8bit].freeze
106
+ ASCII_ENCODINGS = %w[7bit quoted-printable].freeze
71
107
  # :startdoc:
72
108
 
73
109
  private_constant :MEDIA_TYPE_RE, :I18N_RE, :BINARY_ENCODINGS,
74
110
  :ASCII_ENCODINGS
75
111
 
76
112
  # Builds a MIME::Type object from the +content_type+, a MIME Content Type
77
- # value (e.g., 'text/plain' or 'applicaton/x-eruby'). The constructed object
113
+ # value (e.g., 'text/plain' or 'application/x-eruby'). The constructed object
78
114
  # is yielded to an optional block for additional configuration, such as
79
115
  # associating extensions and encoding information.
80
116
  #
@@ -86,9 +122,9 @@ class MIME::Type
86
122
  # * Otherwise, the content_type will be used as a string.
87
123
  #
88
124
  # Yields the newly constructed +self+ object.
89
- def initialize(content_type) # :yields self:
125
+ def initialize(content_type) # :yields: self
90
126
  @friendly = {}
91
- @obsolete = @registered = false
127
+ @obsolete = @registered = @provisional = false
92
128
  @preferred_extension = @docs = @use_instead = nil
93
129
  self.extensions = []
94
130
 
@@ -113,11 +149,12 @@ class MIME::Type
113
149
  # Indicates that a MIME type is like another type. This differs from
114
150
  # <tt>==</tt> because <tt>x-</tt> prefixes are removed for this comparison.
115
151
  def like?(other)
116
- other = if other.respond_to?(:simplified)
117
- MIME::Type.simplified(other.simplified, remove_x_prefix: true)
118
- else
119
- MIME::Type.simplified(other.to_s, remove_x_prefix: true)
120
- end
152
+ other =
153
+ if other.respond_to?(:simplified)
154
+ MIME::Type.simplified(other.simplified, remove_x_prefix: true)
155
+ else
156
+ MIME::Type.simplified(other.to_s, remove_x_prefix: true)
157
+ end
121
158
  MIME::Type.simplified(simplified, remove_x_prefix: true) == other
122
159
  end
123
160
 
@@ -131,8 +168,8 @@ class MIME::Type
131
168
  elsif other.respond_to?(:simplified)
132
169
  simplified <=> other.simplified
133
170
  else
134
- filtered = 'silent' if other == :silent
135
- filtered ||= 'true' if other == true
171
+ filtered = "silent" if other == :silent
172
+ filtered ||= "true" if other == true
136
173
  filtered ||= other.to_s
137
174
 
138
175
  simplified <=> MIME::Type.simplified(filtered)
@@ -158,23 +195,24 @@ class MIME::Type
158
195
  def priority_compare(other)
159
196
  pc = simplified <=> other.simplified
160
197
  if pc.zero? || !(extensions & other.extensions).empty?
161
- pc = if (reg = registered?) != other.registered?
162
- reg ? -1 : 1 # registered < unregistered
163
- elsif (comp = complete?) != other.complete?
164
- comp ? -1 : 1 # complete < incomplete
165
- elsif (obs = obsolete?) != other.obsolete?
166
- obs ? 1 : -1 # current < obsolete
167
- elsif obs and ((ui = use_instead) != (oui = other.use_instead))
168
- if ui.nil?
169
- 1
170
- elsif oui.nil?
171
- -1
172
- else
173
- ui <=> oui
174
- end
175
- else
176
- 0
177
- end
198
+ pc =
199
+ if (reg = registered?) != other.registered?
200
+ reg ? -1 : 1 # registered < unregistered
201
+ elsif (comp = complete?) != other.complete?
202
+ comp ? -1 : 1 # complete < incomplete
203
+ elsif (obs = obsolete?) != other.obsolete?
204
+ obs ? 1 : -1 # current < obsolete
205
+ elsif obs && ((ui = use_instead) != (oui = other.use_instead))
206
+ if ui.nil?
207
+ 1
208
+ elsif oui.nil?
209
+ -1
210
+ else
211
+ ui <=> oui
212
+ end
213
+ else
214
+ 0
215
+ end
178
216
  end
179
217
 
180
218
  pc
@@ -183,7 +221,7 @@ class MIME::Type
183
221
  # Returns +true+ if the +other+ object is a MIME::Type and the content types
184
222
  # match.
185
223
  def eql?(other)
186
- other.kind_of?(MIME::Type) and self == other
224
+ other.is_a?(MIME::Type) && (self == other)
187
225
  end
188
226
 
189
227
  # Returns the whole MIME content-type string.
@@ -197,8 +235,7 @@ class MIME::Type
197
235
  # audio/QCELP => audio/QCELP
198
236
  attr_reader :content_type
199
237
  # A simplified form of the MIME content-type string, suitable for
200
- # case-insensitive comparison, with any extension markers (<tt>x-</tt)
201
- # removed and converted to lowercase.
238
+ # case-insensitive comparison, with the content_type converted to lowercase.
202
239
  #
203
240
  # text/plain => text/plain
204
241
  # x-chemical/x-pdb => x-chemical/x-pdb
@@ -290,9 +327,9 @@ class MIME::Type
290
327
 
291
328
  ##
292
329
  def encoding=(enc) # :nodoc:
293
- if enc.nil? or enc == :default
330
+ if enc.nil? || (enc == :default)
294
331
  @encoding = default_encoding
295
- elsif BINARY_ENCODINGS.include?(enc) or ASCII_ENCODINGS.include?(enc)
332
+ elsif BINARY_ENCODINGS.include?(enc) || ASCII_ENCODINGS.include?(enc)
296
333
  @encoding = enc
297
334
  else
298
335
  fail InvalidEncoding, enc
@@ -301,7 +338,7 @@ class MIME::Type
301
338
 
302
339
  # Returns the default encoding for the MIME::Type based on the media type.
303
340
  def default_encoding
304
- (@media_type == 'text') ? 'quoted-printable' : 'base64'
341
+ @media_type == "text" ? "quoted-printable" : "base64"
305
342
  end
306
343
 
307
344
  ##
@@ -331,7 +368,7 @@ class MIME::Type
331
368
  # call-seq:
332
369
  # text_plain.friendly # => "Text File"
333
370
  # text_plain.friendly('en') # => "Text File"
334
- def friendly(lang = 'en'.freeze)
371
+ def friendly(lang = "en")
335
372
  @friendly ||= {}
336
373
 
337
374
  case lang
@@ -367,15 +404,15 @@ class MIME::Type
367
404
  attr_reader :xrefs
368
405
 
369
406
  ##
370
- def xrefs=(x) # :nodoc:
371
- @xrefs = MIME::Types::Container.new(x)
407
+ def xrefs=(xrefs) # :nodoc:
408
+ @xrefs = MIME::Types::Container.new(xrefs)
372
409
  end
373
410
 
374
411
  # The decoded cross-reference URL list for this MIME::Type.
375
412
  def xref_urls
376
413
  xrefs.flat_map { |type, values|
377
- name = :"xref_url_for_#{type.tr('-', '_')}"
378
- respond_to?(name, true) and xref_map(values, name) or values.to_a
414
+ name = :"xref_url_for_#{type.tr("-", "_")}"
415
+ respond_to?(name, true) && xref_map(values, name) || values.to_a
379
416
  }
380
417
  end
381
418
 
@@ -383,6 +420,14 @@ class MIME::Type
383
420
  attr_accessor :registered
384
421
  alias_method :registered?, :registered
385
422
 
423
+ # Indicates whether the MIME type's registration with IANA is provisional.
424
+ attr_accessor :provisional
425
+
426
+ # Indicates whether the MIME type's registration with IANA is provisional.
427
+ def provisional?
428
+ registered? && @provisional
429
+ end
430
+
386
431
  # MIME types can be specified to be sent across a network in particular
387
432
  # formats. This method returns +true+ when the MIME::Type encoding is set
388
433
  # to <tt>base64</tt>.
@@ -422,7 +467,7 @@ class MIME::Type
422
467
 
423
468
  # Converts the MIME::Type to a JSON string.
424
469
  def to_json(*args)
425
- require 'json'
470
+ require "json"
426
471
  to_h.to_json(*args)
427
472
  end
428
473
 
@@ -438,28 +483,27 @@ class MIME::Type
438
483
  #
439
484
  # This method should be considered a private implementation detail.
440
485
  def encode_with(coder)
441
- coder['content-type'] = @content_type
442
- coder['docs'] = @docs unless @docs.nil? or @docs.empty?
443
- unless @friendly.nil? or @friendly.empty?
444
- coder['friendly'] = @friendly
445
- end
446
- coder['encoding'] = @encoding
447
- coder['extensions'] = @extensions.to_a unless @extensions.empty?
448
- coder['preferred-extension'] = @preferred_extension if @preferred_extension
486
+ coder["content-type"] = @content_type
487
+ coder["docs"] = @docs unless @docs.nil? || @docs.empty?
488
+ coder["friendly"] = @friendly unless @friendly.nil? || @friendly.empty?
489
+ coder["encoding"] = @encoding
490
+ coder["extensions"] = @extensions.to_a unless @extensions.empty?
491
+ coder["preferred-extension"] = @preferred_extension if @preferred_extension
449
492
  if obsolete?
450
- coder['obsolete'] = obsolete?
451
- coder['use-instead'] = use_instead if use_instead
493
+ coder["obsolete"] = obsolete?
494
+ coder["use-instead"] = use_instead if use_instead
452
495
  end
453
496
  unless xrefs.empty?
454
497
  {}.tap do |hash|
455
498
  xrefs.each do |k, v|
456
499
  hash[k] = v.to_a.sort
457
500
  end
458
- coder['xrefs'] = hash
501
+ coder["xrefs"] = hash
459
502
  end
460
503
  end
461
- coder['registered'] = registered?
462
- coder['signature'] = signature? if signature?
504
+ coder["registered"] = registered?
505
+ coder["provisional"] = provisional? if provisional?
506
+ coder["signature"] = signature? if signature?
463
507
  coder
464
508
  end
465
509
 
@@ -468,18 +512,19 @@ class MIME::Type
468
512
  #
469
513
  # This method should be considered a private implementation detail.
470
514
  def init_with(coder)
471
- self.content_type = coder['content-type']
472
- self.docs = coder['docs'] || ''
473
- self.encoding = coder['encoding']
474
- self.extensions = coder['extensions'] || []
475
- self.preferred_extension = coder['preferred-extension']
476
- self.obsolete = coder['obsolete'] || false
477
- self.registered = coder['registered'] || false
478
- self.signature = coder['signature']
479
- self.xrefs = coder['xrefs'] || {}
480
- self.use_instead = coder['use-instead']
515
+ self.content_type = coder["content-type"]
516
+ self.docs = coder["docs"] || ""
517
+ self.encoding = coder["encoding"]
518
+ self.extensions = coder["extensions"] || []
519
+ self.preferred_extension = coder["preferred-extension"]
520
+ self.obsolete = coder["obsolete"] || false
521
+ self.registered = coder["registered"] || false
522
+ self.provisional = coder["provisional"] || false
523
+ self.signature = coder["signature"]
524
+ self.xrefs = coder["xrefs"] || {}
525
+ self.use_instead = coder["use-instead"]
481
526
 
482
- friendly(coder['friendly'] || {})
527
+ friendly(coder["friendly"] || {})
483
528
  end
484
529
 
485
530
  def inspect # :nodoc:
@@ -503,8 +548,8 @@ class MIME::Type
503
548
  # Converts a provided +content_type+ into a translation key suitable for
504
549
  # use with the I18n library.
505
550
  def i18n_key(content_type)
506
- simplify_matchdata(match(content_type), joiner: '.') { |e|
507
- e.gsub!(I18N_RE, '-'.freeze)
551
+ simplify_matchdata(match(content_type), joiner: ".") { |e|
552
+ e.gsub!(I18N_RE, "-")
508
553
  }
509
554
  end
510
555
 
@@ -521,12 +566,12 @@ class MIME::Type
521
566
 
522
567
  private
523
568
 
524
- def simplify_matchdata(matchdata, remove_x = false, joiner: '/'.freeze)
569
+ def simplify_matchdata(matchdata, remove_x = false, joiner: "/")
525
570
  return nil unless matchdata
526
571
 
527
572
  matchdata.captures.map { |e|
528
573
  e.downcase!
529
- e.sub!(%r{^x-}, ''.freeze) if remove_x
574
+ e.sub!(/^x-/, "") if remove_x
530
575
  yield e if block_given?
531
576
  e
532
577
  }.join(joiner)
@@ -539,11 +584,28 @@ class MIME::Type
539
584
  match = MEDIA_TYPE_RE.match(type_string)
540
585
  fail InvalidContentType, type_string if match.nil?
541
586
 
542
- @content_type = type_string
587
+ @content_type = intern_string(type_string)
543
588
  @raw_media_type, @raw_sub_type = match.captures
544
- @simplified = MIME::Type.simplified(match)
545
- @i18n_key = MIME::Type.i18n_key(match)
546
- @media_type, @sub_type = MEDIA_TYPE_RE.match(@simplified).captures
589
+ @simplified = intern_string(MIME::Type.simplified(match))
590
+ @i18n_key = intern_string(MIME::Type.i18n_key(match))
591
+ @media_type, @sub_type = MEDIA_TYPE_RE.match(@simplified).captures
592
+
593
+ @raw_media_type = intern_string(@raw_media_type)
594
+ @raw_sub_type = intern_string(@raw_sub_type)
595
+ @media_type = intern_string(@media_type)
596
+ @sub_type = intern_string(@sub_type)
597
+ end
598
+
599
+ if String.method_defined?(:-@)
600
+ def intern_string(string)
601
+ -string
602
+ end
603
+ else
604
+ # MRI 2.2 and older don't have a method for string interning,
605
+ # so we simply freeze them for keeping a similar interface
606
+ def intern_string(string)
607
+ string.freeze
608
+ end
547
609
  end
548
610
 
549
611
  def xref_map(values, helper)
@@ -551,23 +613,22 @@ class MIME::Type
551
613
  end
552
614
 
553
615
  def xref_url_for_rfc(value)
554
- 'http://www.iana.org/go/%s'.freeze % value
616
+ "http://www.iana.org/go/%s" % value
555
617
  end
556
618
 
557
619
  def xref_url_for_draft(value)
558
- 'http://www.iana.org/go/%s'.freeze % value.sub(/\ARFC/, 'draft')
620
+ "http://www.iana.org/go/%s" % value.sub(/\ARFC/, "draft")
559
621
  end
560
622
 
561
623
  def xref_url_for_rfc_errata(value)
562
- 'http://www.rfc-editor.org/errata_search.php?eid=%s'.freeze % value
624
+ "http://www.rfc-editor.org/errata_search.php?eid=%s" % value
563
625
  end
564
626
 
565
627
  def xref_url_for_person(value)
566
- 'http://www.iana.org/assignments/media-types/media-types.xhtml#%s'.freeze %
567
- value
628
+ "http://www.iana.org/assignments/media-types/media-types.xhtml#%s" % value
568
629
  end
569
630
 
570
631
  def xref_url_for_template(value)
571
- 'http://www.iana.org/assignments/media-types/%s'.freeze % value
632
+ "http://www.iana.org/assignments/media-types/%s" % value
572
633
  end
573
634
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'mime/type/columnar'
3
+ require "mime/type/columnar"
4
4
 
5
5
  # MIME::Types::Columnar is used to extend a MIME::Types container to load data
6
6
  # by columns instead of from JSON or YAML. Column loads of MIME types loaded
@@ -19,10 +19,10 @@ module MIME::Types::Columnar
19
19
  end
20
20
 
21
21
  # Load the first column data file (type and extensions).
22
- def load_base_data(path) #:nodoc:
22
+ def load_base_data(path) # :nodoc:
23
23
  @__root__ = path
24
24
 
25
- each_file_line('content_type', false) do |line|
25
+ each_file_line("content_type", false) do |line|
26
26
  line = line.split
27
27
  content_type = line.shift
28
28
  extensions = line
@@ -45,11 +45,11 @@ 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'.freeze).each do |line|
48
+ IO.readlines(column, encoding: "UTF-8").each do |line|
49
49
  line.chomp!
50
50
 
51
51
  if lookup
52
- type = @__mime_data__[i += 1] or next
52
+ (type = @__mime_data__[i += 1]) || next
53
53
  yield type, line
54
54
  else
55
55
  yield line
@@ -61,58 +61,58 @@ module MIME::Types::Columnar
61
61
  end
62
62
 
63
63
  def load_encoding
64
- each_file_line('encoding') do |type, line|
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
70
69
 
71
70
  def load_docs
72
- each_file_line('docs') do |type, line|
71
+ each_file_line("docs") do |type, line|
73
72
  type.instance_variable_set(:@docs, opt(line))
74
73
  end
75
74
  end
76
75
 
77
76
  def load_preferred_extension
78
- each_file_line('pext') do |type, line|
77
+ each_file_line("pext") do |type, line|
79
78
  type.instance_variable_set(:@preferred_extension, opt(line))
80
79
  end
81
80
  end
82
81
 
83
82
  def load_flags
84
- each_file_line('flags') do |type, line|
83
+ each_file_line("flags") do |type, line|
85
84
  line = line.split
86
85
  type.instance_variable_set(:@obsolete, flag(line.shift))
87
86
  type.instance_variable_set(:@registered, flag(line.shift))
88
87
  type.instance_variable_set(:@signature, flag(line.shift))
88
+ type.instance_variable_set(:@provisional, flag(line.shift))
89
89
  end
90
90
  end
91
91
 
92
92
  def load_xrefs
93
- each_file_line('xrefs') { |type, line|
93
+ each_file_line("xrefs") { |type, line|
94
94
  type.instance_variable_set(:@xrefs, dict(line, array: true))
95
95
  }
96
96
  end
97
97
 
98
98
  def load_friendly
99
- each_file_line('friendly') { |type, line|
99
+ each_file_line("friendly") { |type, line|
100
100
  type.instance_variable_set(:@friendly, dict(line))
101
101
  }
102
102
  end
103
103
 
104
104
  def load_use_instead
105
- each_file_line('use_instead') do |type, line|
105
+ each_file_line("use_instead") do |type, line|
106
106
  type.instance_variable_set(:@use_instead, opt(line))
107
107
  end
108
108
  end
109
109
 
110
110
  def dict(line, array: false)
111
- if line == '-'.freeze
111
+ if line == "-"
112
112
  {}
113
113
  else
114
- line.split('|'.freeze).each_with_object({}) { |l, h|
115
- k, v = l.split('^'.freeze)
114
+ line.split("|").each_with_object({}) { |l, h|
115
+ k, v = l.split("^")
116
116
  v = nil if v.empty?
117
117
  h[k] = array ? Array(v) : v
118
118
  }
@@ -120,18 +120,18 @@ module MIME::Types::Columnar
120
120
  end
121
121
 
122
122
  def arr(line)
123
- if line == '-'.freeze
123
+ if line == "-"
124
124
  []
125
125
  else
126
- line.split('|'.freeze).flatten.compact.uniq
126
+ line.split("|").flatten.compact.uniq
127
127
  end
128
128
  end
129
129
 
130
130
  def opt(line)
131
- line unless line == '-'.freeze
131
+ line unless line == "-"
132
132
  end
133
133
 
134
134
  def flag(line)
135
- line == '1'.freeze ? true : false
135
+ line == "1"
136
136
  end
137
137
  end
@@ -15,23 +15,23 @@ class << MIME::Types::Cache
15
15
  # file does not exist, if the file cannot be loaded, or if the data in
16
16
  # the cache version is different than this version.
17
17
  def load(cache_file = nil)
18
- cache_file ||= ENV['RUBY_MIME_TYPES_CACHE']
19
- return nil unless cache_file and File.exist?(cache_file)
18
+ cache_file ||= ENV["RUBY_MIME_TYPES_CACHE"]
19
+ return nil unless cache_file && File.exist?(cache_file)
20
20
 
21
21
  cache = Marshal.load(File.binread(cache_file))
22
22
  if cache.version == MIME::Types::Data::VERSION
23
23
  Marshal.load(cache.data)
24
24
  else
25
- MIME::Types.logger.warn <<-warning.chomp
26
- Could not load MIME::Types cache: invalid version
27
- warning
25
+ MIME::Types.logger.warn <<-WARNING.chomp.strip
26
+ Could not load MIME::Types cache: invalid version
27
+ WARNING
28
28
  nil
29
29
  end
30
30
  rescue => e
31
- MIME::Types.logger.warn <<-warning.chomp
32
- Could not load MIME::Types cache: #{e}
33
- warning
34
- return nil
31
+ MIME::Types.logger.warn <<-WARNING.chomp.strip
32
+ Could not load MIME::Types cache: #{e}
33
+ WARNING
34
+ nil
35
35
  end
36
36
 
37
37
  # Attempts to save the types provided to the cache file provided.
@@ -44,12 +44,12 @@ Could not load MIME::Types cache: #{e}
44
44
  # +RUBY_MIME_TYPES_CACHE+. If there is no cache file specified either
45
45
  # directly or through the environment, this method will return +nil+
46
46
  def save(types = nil, cache_file = nil)
47
- cache_file ||= ENV['RUBY_MIME_TYPES_CACHE']
47
+ cache_file ||= ENV["RUBY_MIME_TYPES_CACHE"]
48
48
  return nil unless cache_file
49
49
 
50
50
  types ||= MIME::Types.send(:__types__)
51
51
 
52
- File.open(cache_file, 'wb') do |f|
52
+ File.open(cache_file, "wb") do |f|
53
53
  f.write(
54
54
  Marshal.dump(new(MIME::Types::Data::VERSION, Marshal.dump(types)))
55
55
  )
@@ -1,3 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'mime/types'
3
+ require "mime/types"