mime-types 1.24 → 1.25
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 +15 -0
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.travis.yml +2 -2
- data/Contributing.rdoc +10 -9
- data/History.rdoc +14 -0
- data/Manifest.txt +2 -0
- data/README.rdoc +28 -2
- data/Rakefile +40 -0
- data/lib/mime/types.rb +140 -51
- data/lib/mime/types/video.nonstandard +1 -1
- data/test/test_mime_type.rb +1 -4
- data/test/test_mime_types.rb +6 -3
- data/test/test_mime_types_cache.rb +77 -0
- data/test/test_mime_types_lazy.rb +40 -0
- metadata +87 -72
- metadata.gz.sig +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZjkzNjc3YzY2ZTY3YTU2MDhkYjE3MzQ0MThmZWI0NjU5NWEzMDA1Mg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MzY2ZmU2Nzc4YzNhZjJiMTYzNjc0ODdiMzc2NjE3NzQ1MTk3YzE5ZQ==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZmU3NTI2ZDQ3MjdlNWQ2YWYwNjNkNDkwNDEyNGYzZGRiZTYyMjNjMzY1MTQw
|
10
|
+
MjIxZmFkZmRhNTNmNmJhNWZmYWExZjllYWMxOWZjZjFmZGI1ODc4MTZiOGEz
|
11
|
+
YWI2NGVjNjAyNmIyYzI5MTc0MzNjNjJiMDRlZDdkN2I1NzVhNGE=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
Nzk0Mjg1NWViZTRkZWRjNzliZmY4OTFlOTQ3ODgxYjI2MWJjY2IzNTg5NDlk
|
14
|
+
Nzc5OGY3MTY0NDA1Y2Q5ZjUwYzQ1YzRkZmE1N2M2MWEwMjVkNDMzMjFmZmVi
|
15
|
+
YjJkY2U0MzMzM2QwYjg0ZDNhODlhNDQ4OTMxOTZiN2Y0MjRjZDY=
|
checksums.yaml.gz.sig
ADDED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/.travis.yml
CHANGED
data/Contributing.rdoc
CHANGED
@@ -57,12 +57,13 @@ Here's the most direct way to get your work merged into the project:
|
|
57
57
|
|
58
58
|
Thanks to everyone else who has contributed to MIME::Types:
|
59
59
|
|
60
|
-
*
|
61
|
-
*
|
62
|
-
*
|
63
|
-
*
|
64
|
-
*
|
65
|
-
*
|
66
|
-
*
|
67
|
-
*
|
68
|
-
*
|
60
|
+
* Andre Pankratz
|
61
|
+
* Mauricio Linhares
|
62
|
+
* Richard Hirner
|
63
|
+
* Todd Carrico
|
64
|
+
* Garret Alfert
|
65
|
+
* Hans de Graaff
|
66
|
+
* Henrik Hodne
|
67
|
+
* Martin d'Allens
|
68
|
+
* cgat
|
69
|
+
* Greg Brockman
|
data/History.rdoc
CHANGED
@@ -1,3 +1,17 @@
|
|
1
|
+
== 1.25 / 2013-08-30
|
2
|
+
|
3
|
+
* New Features:
|
4
|
+
* Adding lazy loading and caching functionality to the default data based on
|
5
|
+
work done by Greg Brockman (gdb).
|
6
|
+
* Bugs:
|
7
|
+
* Force the default internal application encoding to be used when reading the
|
8
|
+
MIME types database. Based on a change by briangamble, found in the rapid7
|
9
|
+
fork.
|
10
|
+
* New extensions:
|
11
|
+
* mjpeg (video/x-motion-jpeg) based on a change by punkrats, found in the
|
12
|
+
vidibus fork.
|
13
|
+
* Modernized MiniTest configuration.
|
14
|
+
|
1
15
|
== 1.24 / 2013-08-14
|
2
16
|
|
3
17
|
* Code Climate:
|
data/Manifest.txt
CHANGED
data/README.rdoc
CHANGED
@@ -10,8 +10,34 @@ continuous integration :: {<img src="https://travis-ci.org/halostatue/mime-types
|
|
10
10
|
== Description
|
11
11
|
|
12
12
|
This library allows for the identification of a file's likely MIME content
|
13
|
-
type. This is release 1.
|
14
|
-
|
13
|
+
type. This is release 1.25, adding experimental caching and lazy loading
|
14
|
+
functionality.
|
15
|
+
|
16
|
+
The caching and lazy loading features were initially implemented by Greg
|
17
|
+
Brockman (gdb). As these features are experimental, they are disabled by
|
18
|
+
default and must be enabled through the use of environment variables. The cache
|
19
|
+
is invalidated on a per-version basis; the cache for version 1.25 will not be
|
20
|
+
reused for version 1.26.
|
21
|
+
|
22
|
+
To use lazy loading, set the environment variable +RUBY_MIME_TYPES_LAZY_LOAD+
|
23
|
+
to any value other than 'false'. When using lazy loading, the initial startup
|
24
|
+
of MIME::Types is around 12–25× faster than normal startup (on my system,
|
25
|
+
normal startup is about 90 ms; lazy startup is about 4 ms). This isn't
|
26
|
+
generally useful, however, as the MIME::Types database has not been loaded.
|
27
|
+
Lazy startup and load is just *slightly* faster—around 1 ms. The real advantage
|
28
|
+
comes from using the cache.
|
29
|
+
|
30
|
+
To enable the cache, set the environment variable +RUBY_MIME_TYPES_CACHE+ to a
|
31
|
+
filename where MIME::Types will have read-write access. The first time a new
|
32
|
+
version of MIME::Types is run using this file, it will be created, taking a
|
33
|
+
little longer than normal. Subsequent loads using the same cache file will be
|
34
|
+
approximately 3½× faster (25 ms) than normal loads. This can be combined with
|
35
|
+
+RUBY_MIME_TYPES_LAZY_LOAD+, but this is *not* recommended in a multithreaded
|
36
|
+
or multiprocess environment where all threads or processes will be using the
|
37
|
+
same cache file.
|
38
|
+
|
39
|
+
As the caching interface is still experimental, the only values cached are the
|
40
|
+
default MIME::Types database, not any custom MIME::Types added by users.
|
15
41
|
|
16
42
|
MIME types are used in MIME-compliant communications, as in e-mail or HTTP
|
17
43
|
traffic, to indicate the type of content which is transmitted. MIME::Types
|
data/Rakefile
CHANGED
@@ -33,6 +33,46 @@ spec = Hoe.spec 'mime-types' do
|
|
33
33
|
self.extra_dev_deps << ['rake', '~> 10.0']
|
34
34
|
end
|
35
35
|
|
36
|
+
def reload_mime_types(repeats = 1, force_load = false)
|
37
|
+
repeats.times {
|
38
|
+
Object.send(:remove_const, :MIME) if defined? MIME
|
39
|
+
load 'lib/mime/types.rb'
|
40
|
+
MIME::Types.send(:__types__) if force_load
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
desc 'Benchmark'
|
45
|
+
task :benchmark, :repeats do |t, args|
|
46
|
+
repeats = args.repeats.to_i
|
47
|
+
repeats = 50 if repeats.zero?
|
48
|
+
require 'benchmark'
|
49
|
+
$LOAD_PATH.unshift 'lib'
|
50
|
+
|
51
|
+
cache_file = File.expand_path('../cache.mtx', __FILE__)
|
52
|
+
rm cache_file if File.exist? cache_file
|
53
|
+
|
54
|
+
Benchmark.bm(17) do |x|
|
55
|
+
x.report("Normal:") { reload_mime_types repeats }
|
56
|
+
|
57
|
+
ENV['RUBY_MIME_TYPES_LAZY_LOAD'] = 'yes'
|
58
|
+
x.report("Lazy:") { reload_mime_types repeats }
|
59
|
+
x.report("Lazy+Load:") { reload_mime_types repeats, true }
|
60
|
+
|
61
|
+
ENV.delete('RUBY_MIME_TYPES_LAZY_LOAD')
|
62
|
+
|
63
|
+
ENV['RUBY_MIME_TYPES_CACHE'] = cache_file
|
64
|
+
reload_mime_types
|
65
|
+
|
66
|
+
x.report("Cached:") { reload_mime_types repeats }
|
67
|
+
ENV['RUBY_MIME_TYPES_LAZY_LOAD'] = 'yes'
|
68
|
+
x.report("Lazy Cached:") { reload_mime_types repeats }
|
69
|
+
x.report("Lazy Cached Load:") { reload_mime_types repeats, true }
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
rm cache_file
|
74
|
+
end
|
75
|
+
|
36
76
|
namespace :mime do
|
37
77
|
desc "Download the current MIME type registrations from IANA."
|
38
78
|
task :iana, :save, :destination do |t, args|
|
data/lib/mime/types.rb
CHANGED
@@ -33,7 +33,7 @@ module MIME
|
|
33
33
|
#
|
34
34
|
class Type
|
35
35
|
# The released version of Ruby MIME::Types
|
36
|
-
VERSION = '1.
|
36
|
+
VERSION = '1.25'
|
37
37
|
|
38
38
|
include Comparable
|
39
39
|
|
@@ -557,28 +557,39 @@ module MIME
|
|
557
557
|
# ftp://ftp.iana.org/assignments/media-types with some unofficial types
|
558
558
|
# added from the the collection at
|
559
559
|
# http://www.ltsw.se/knbase/internet/mime.htp
|
560
|
-
#
|
561
|
-
# This is originally based on Perl MIME::Types by Mark Overmeer.
|
562
|
-
#
|
563
|
-
# = Author
|
564
|
-
# Copyright:: Copyright 2002–2013 by Austin Ziegler
|
565
|
-
# <austin@rubyforge.org>
|
566
|
-
# Version:: 1.20.1
|
567
|
-
# Licence:: See Licence.rdoc
|
568
|
-
# See Also:: http://www.iana.org/assignments/media-types/
|
569
|
-
# http://www.ltsw.se/knbase/internet/mime.htp
|
570
|
-
#
|
571
560
|
class Types
|
572
561
|
# The released version of Ruby MIME::Types
|
573
|
-
VERSION
|
562
|
+
VERSION = MIME::Type::VERSION
|
563
|
+
DATA_VERSION = (VERSION.to_f * 100).to_i
|
574
564
|
|
575
|
-
|
565
|
+
# The data version.
|
576
566
|
attr_reader :data_version
|
577
567
|
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
568
|
+
class HashWithArrayDefault < Hash # :nodoc:
|
569
|
+
def initialize
|
570
|
+
super { |h, k| h[k] = [] }
|
571
|
+
end
|
572
|
+
|
573
|
+
def marshal_dump
|
574
|
+
{}.merge(self)
|
575
|
+
end
|
576
|
+
|
577
|
+
def marshal_load(hash)
|
578
|
+
self.merge!(hash)
|
579
|
+
end
|
580
|
+
end
|
581
|
+
|
582
|
+
class CacheContainer # :nodoc:
|
583
|
+
attr_reader :version, :data
|
584
|
+
def initialize(version, data)
|
585
|
+
@version, @data = version, data
|
586
|
+
end
|
587
|
+
end
|
588
|
+
|
589
|
+
def initialize(data_version = DATA_VERSION)
|
590
|
+
@type_variants = HashWithArrayDefault.new
|
591
|
+
@extension_index = HashWithArrayDefault.new
|
592
|
+
@data_version = data_version
|
582
593
|
end
|
583
594
|
|
584
595
|
def add_type_variant(mime_type) #:nodoc:
|
@@ -592,19 +603,19 @@ module MIME
|
|
592
603
|
def defined_types #:nodoc:
|
593
604
|
@type_variants.values.flatten
|
594
605
|
end
|
595
|
-
|
606
|
+
|
596
607
|
# Returns the number of known types. A shortcut of MIME::Types[//].size.
|
597
608
|
# (Keep in mind that this is memory intensive, cache the result to spare
|
598
609
|
# resources)
|
599
610
|
def count
|
600
611
|
defined_types.size
|
601
612
|
end
|
602
|
-
|
613
|
+
|
603
614
|
def each
|
604
615
|
defined_types.each { |t| yield t }
|
605
616
|
end
|
606
617
|
|
607
|
-
@__types__
|
618
|
+
@__types__ = nil
|
608
619
|
|
609
620
|
# Returns a list of MIME::Type objects, which may be empty. The optional
|
610
621
|
# flag parameters are :complete (finds only complete MIME::Type objects)
|
@@ -633,22 +644,16 @@ module MIME
|
|
633
644
|
# 6. Obsolete definitions use-instead clauses are compared.
|
634
645
|
# 7. Sort on name.
|
635
646
|
def [](type_id, flags = {})
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
else
|
645
|
-
matches = @type_variants[MIME::Type.simplified(type_id)]
|
646
|
-
end
|
647
|
+
matches = case type_id
|
648
|
+
when MIME::Type
|
649
|
+
@type_variants[type_id.simplified]
|
650
|
+
when Regexp
|
651
|
+
match(type_id)
|
652
|
+
else
|
653
|
+
@type_variants[MIME::Type.simplified(type_id)]
|
654
|
+
end
|
647
655
|
|
648
|
-
matches.
|
649
|
-
matches.delete_if { |e| not e.platform? } if flags[:platform]
|
650
|
-
|
651
|
-
matches.sort { |a, b| a.priority_compare(b) }
|
656
|
+
prune_matches(matches, flags).sort { |a, b| a.priority_compare(b) }
|
652
657
|
end
|
653
658
|
|
654
659
|
# Return the list of MIME::Types which belongs to the file based on its
|
@@ -686,7 +691,7 @@ module MIME
|
|
686
691
|
else
|
687
692
|
if @type_variants.include?(mime_type.simplified)
|
688
693
|
if @type_variants[mime_type.simplified].include?(mime_type)
|
689
|
-
warn "Type #{mime_type} already registered as a variant of #{mime_type.simplified}." unless defined? MIME::Types::
|
694
|
+
warn "Type #{mime_type} already registered as a variant of #{mime_type.simplified}." unless defined? MIME::Types::LOAD
|
690
695
|
end
|
691
696
|
end
|
692
697
|
add_type_variant(mime_type)
|
@@ -695,13 +700,29 @@ module MIME
|
|
695
700
|
end
|
696
701
|
end
|
697
702
|
|
703
|
+
private
|
704
|
+
def prune_matches(matches, flags)
|
705
|
+
matches.delete_if { |e| not e.complete? } if flags[:complete]
|
706
|
+
matches.delete_if { |e| not e.platform? } if flags[:platform]
|
707
|
+
matches
|
708
|
+
end
|
709
|
+
|
710
|
+
def match(pattern)
|
711
|
+
matches = @type_variants.select { |k, v| k =~ pattern }
|
712
|
+
if matches.respond_to? :values
|
713
|
+
matches.values.flatten
|
714
|
+
else
|
715
|
+
matches.map { |m| m.last }.flatten
|
716
|
+
end
|
717
|
+
end
|
718
|
+
|
698
719
|
class << self
|
699
720
|
def add_type_variant(mime_type) #:nodoc:
|
700
|
-
|
721
|
+
__types__.add_type_variant(mime_type)
|
701
722
|
end
|
702
723
|
|
703
724
|
def index_extensions(mime_type) #:nodoc:
|
704
|
-
|
725
|
+
__types__.index_extensions(mime_type)
|
705
726
|
end
|
706
727
|
|
707
728
|
# The regular expression used to match a file-based MIME type
|
@@ -760,7 +781,7 @@ module MIME
|
|
760
781
|
# be provided.
|
761
782
|
def load_from_file(filename) #:nodoc:
|
762
783
|
if defined? ::Encoding
|
763
|
-
data = File.open(filename, 'r:UTF-8') { |f| f.read }
|
784
|
+
data = File.open(filename, 'r:UTF-8:-') { |f| f.read }
|
764
785
|
else
|
765
786
|
data = File.open(filename) { |f| f.read }
|
766
787
|
end
|
@@ -824,17 +845,17 @@ module MIME
|
|
824
845
|
# puts t.to_a.join(", ")
|
825
846
|
# end
|
826
847
|
def [](type_id, flags = {})
|
827
|
-
|
848
|
+
__types__[type_id, flags]
|
828
849
|
end
|
829
850
|
|
830
851
|
include Enumerable
|
831
|
-
|
852
|
+
|
832
853
|
def count
|
833
|
-
|
854
|
+
__types__.count
|
834
855
|
end
|
835
856
|
|
836
857
|
def each
|
837
|
-
|
858
|
+
__types__.each {|t| yield t }
|
838
859
|
end
|
839
860
|
|
840
861
|
# Return the list of MIME::Types which belongs to the file based on
|
@@ -848,12 +869,12 @@ module MIME
|
|
848
869
|
# puts "MIME::Types.type_for('citydesk.gif')
|
849
870
|
# => [image/gif]
|
850
871
|
def type_for(filename, platform = false)
|
851
|
-
|
872
|
+
__types__.type_for(filename, platform)
|
852
873
|
end
|
853
874
|
|
854
875
|
# A synonym for MIME::Types.type_for
|
855
876
|
def of(filename, platform = false)
|
856
|
-
|
877
|
+
__types__.type_for(filename, platform)
|
857
878
|
end
|
858
879
|
|
859
880
|
# Add one or more MIME::Type objects to the set of known types. Each
|
@@ -863,14 +884,82 @@ module MIME
|
|
863
884
|
# <strong>Please inform the maintainer of this module when registered
|
864
885
|
# types are missing.</strong>
|
865
886
|
def add(*types)
|
866
|
-
|
887
|
+
__types__.add(*types)
|
888
|
+
end
|
889
|
+
|
890
|
+
# Returns the currently defined cache file, if any.
|
891
|
+
def cache_file
|
892
|
+
ENV['RUBY_MIME_TYPES_CACHE']
|
893
|
+
end
|
894
|
+
|
895
|
+
private
|
896
|
+
def load_mime_types_from_cache
|
897
|
+
load_mime_types_from_cache! if cache_file
|
898
|
+
end
|
899
|
+
|
900
|
+
def load_mime_types_from_cache!
|
901
|
+
raise ArgumentError, "No RUBY_MIME_TYPES_CACHE set." unless cache_file
|
902
|
+
return false unless File.exists? cache_file
|
903
|
+
|
904
|
+
begin
|
905
|
+
data = File.read(cache_file)
|
906
|
+
container = Marshal.load(data)
|
907
|
+
|
908
|
+
if container.version == VERSION
|
909
|
+
@__types__ = Marshal.load(container.data)
|
910
|
+
true
|
911
|
+
else
|
912
|
+
false
|
913
|
+
end
|
914
|
+
rescue => e
|
915
|
+
warn "Could not load MIME::Types cache: #{e}"
|
916
|
+
false
|
917
|
+
end
|
918
|
+
end
|
919
|
+
|
920
|
+
def write_mime_types_to_cache
|
921
|
+
write_mime_types_to_cache! if cache_file
|
922
|
+
end
|
923
|
+
|
924
|
+
def write_mime_types_to_cache!
|
925
|
+
raise ArgumentError, "No RUBY_MIME_TYPES_CACHE set." unless cache_file
|
926
|
+
|
927
|
+
File.open(cache_file, 'w') do |f|
|
928
|
+
cache = MIME::Types::CacheContainer.new(VERSION,
|
929
|
+
Marshal.dump(__types__))
|
930
|
+
f.write Marshal.dump(cache)
|
931
|
+
end
|
932
|
+
|
933
|
+
true
|
934
|
+
end
|
935
|
+
|
936
|
+
def load_and_parse_mime_types
|
937
|
+
const_set(:LOAD, true) unless $DEBUG
|
938
|
+
Dir[File.join(File.dirname(__FILE__), 'types', '*')].sort.each { |f|
|
939
|
+
add(load_from_file(f))
|
940
|
+
}
|
941
|
+
remove_const :LOAD if defined? LOAD
|
942
|
+
end
|
943
|
+
|
944
|
+
def lazy_load?
|
945
|
+
(lazy = ENV['RUBY_MIME_TYPES_LAZY_LOAD']) && (lazy != 'false')
|
946
|
+
end
|
947
|
+
|
948
|
+
def __types__
|
949
|
+
load_mime_types unless @__types__
|
950
|
+
@__types__
|
951
|
+
end
|
952
|
+
|
953
|
+
def load_mime_types
|
954
|
+
@__types__ = new(VERSION)
|
955
|
+
unless load_mime_types_from_cache
|
956
|
+
load_and_parse_mime_types
|
957
|
+
write_mime_types_to_cache
|
958
|
+
end
|
867
959
|
end
|
868
960
|
end
|
869
961
|
|
870
|
-
|
871
|
-
MIME::Types::STARTUP = true unless $DEBUG
|
872
|
-
files.sort.each { |file| add load_from_file(file) }
|
873
|
-
remove_const :STARTUP if defined? STARTUP
|
962
|
+
load_mime_types unless lazy_load?
|
874
963
|
end
|
875
964
|
end
|
876
965
|
|
data/test/test_mime_type.rb
CHANGED
@@ -1,11 +1,8 @@
|
|
1
1
|
# -*- ruby encoding: utf-8 -*-
|
2
2
|
|
3
|
-
$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib") if __FILE__ == $0
|
4
|
-
|
5
3
|
require 'mime/types'
|
6
|
-
require 'minitest/autorun'
|
7
4
|
|
8
|
-
class
|
5
|
+
class TestMIMEType < Minitest::Test
|
9
6
|
def yaml_mime_type_from_array
|
10
7
|
MIME::Type.from_array('text/x-yaml', %w(yaml yml), '8bit', 'd9d172f608')
|
11
8
|
end
|
data/test/test_mime_types.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
# -*- ruby encoding: utf-8 -*-
|
2
2
|
|
3
|
-
$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib") if __FILE__ == $0
|
4
|
-
|
5
3
|
require 'mime/types'
|
6
4
|
|
7
|
-
class
|
5
|
+
class TestMIMETypes < Minitest::Test
|
6
|
+
def setup
|
7
|
+
MIME::Types.instance_variable_set(:@__types__, nil)
|
8
|
+
MIME::Types.send(:load_mime_types)
|
9
|
+
end
|
10
|
+
|
8
11
|
def test_class_index_1
|
9
12
|
text_plain = MIME::Type.new('text/plain') do |t|
|
10
13
|
t.encoding = '8bit'
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# -*- ruby encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'mime/types'
|
4
|
+
|
5
|
+
class TestMIMETypesCache < Minitest::Test
|
6
|
+
def setup
|
7
|
+
require 'fileutils'
|
8
|
+
@cache_file = File.expand_path('../cache.tst', __FILE__)
|
9
|
+
ENV['RUBY_MIME_TYPES_CACHE'] = @cache_file
|
10
|
+
clear_cache_file
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
clear_cache_file
|
15
|
+
ENV.delete('RUBY_MIME_TYPES_CACHE')
|
16
|
+
end
|
17
|
+
|
18
|
+
def reset_mime_types
|
19
|
+
MIME::Types.instance_variable_set(:@__types__, nil)
|
20
|
+
MIME::Types.send(:load_mime_types)
|
21
|
+
end
|
22
|
+
|
23
|
+
def clear_cache_file
|
24
|
+
FileUtils.rm @cache_file if File.exist? @cache_file
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_uses_correct_cache_file
|
28
|
+
assert_equal(@cache_file, MIME::Types.cache_file)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_does_not_use_cache_when_unset
|
32
|
+
ENV.delete('RUBY_MIME_TYPES_CACHE')
|
33
|
+
assert_equal(nil, MIME::Types.send(:load_mime_types_from_cache))
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_raises_exception_when_load_forced_without_cache_file
|
37
|
+
assert_raises(ArgumentError) {
|
38
|
+
ENV.delete('RUBY_MIME_TYPES_CACHE')
|
39
|
+
MIME::Types.send(:load_mime_types_from_cache!)
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_does_not_use_cache_when_missing
|
44
|
+
assert_equal(false, MIME::Types.send(:load_mime_types_from_cache))
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_does_not_create_cache_when_unset
|
48
|
+
ENV.delete('RUBY_MIME_TYPES_CACHE')
|
49
|
+
assert_equal(nil, MIME::Types.send(:write_mime_types_to_cache))
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_raises_exception_when_write_forced_without_cache_file
|
53
|
+
assert_raises(ArgumentError) {
|
54
|
+
ENV.delete('RUBY_MIME_TYPES_CACHE')
|
55
|
+
MIME::Types.send(:write_mime_types_to_cache!)
|
56
|
+
}
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_creates_cache
|
60
|
+
assert_equal(false, File.exist?(@cache_file))
|
61
|
+
MIME::Types.send(:write_mime_types_to_cache)
|
62
|
+
assert_equal(true, File.exist?(@cache_file))
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_uses_cache
|
66
|
+
html = MIME::Types['text/html'].first
|
67
|
+
html.extensions << 'hex'
|
68
|
+
MIME::Types.send(:write_mime_types_to_cache)
|
69
|
+
MIME::Types.instance_variable_set(:@__types__, nil)
|
70
|
+
|
71
|
+
assert_equal(true, MIME::Types.send(:load_mime_types_from_cache))
|
72
|
+
html = MIME::Types['text/html'].first
|
73
|
+
assert_includes(html.extensions, 'hex')
|
74
|
+
|
75
|
+
reset_mime_types
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# -*- ruby encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'mime/types'
|
4
|
+
|
5
|
+
class TestMIMETypesLazy < Minitest::Test
|
6
|
+
def setup
|
7
|
+
ENV['RUBY_MIME_TYPES_LAZY_LOAD'] = 'true'
|
8
|
+
ENV['RUBY_MIME_TYPES_CACHE'] = File.expand_path('../cache.tst', __FILE__)
|
9
|
+
MIME::Types.send(:write_mime_types_to_cache)
|
10
|
+
end
|
11
|
+
|
12
|
+
def teardown
|
13
|
+
reset_mime_types
|
14
|
+
if File.exist? ENV['RUBY_MIME_TYPES_CACHE']
|
15
|
+
FileUtils.rm ENV['RUBY_MIME_TYPES_CACHE']
|
16
|
+
ENV.delete('RUBY_MIME_TYPES_CACHE')
|
17
|
+
end
|
18
|
+
ENV.delete('RUBY_MIME_TYPES_LAZY_LOAD')
|
19
|
+
end
|
20
|
+
|
21
|
+
def reset_mime_types
|
22
|
+
MIME::Types.instance_variable_set(:@__types__, nil)
|
23
|
+
MIME::Types.send(:load_mime_types)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_lazy_load?
|
27
|
+
assert_equal(true, MIME::Types.send(:lazy_load?))
|
28
|
+
ENV['RUBY_MIME_TYPES_LAZY_LOAD'] = nil
|
29
|
+
assert_equal(nil, MIME::Types.send(:lazy_load?))
|
30
|
+
ENV['RUBY_MIME_TYPES_LAZY_LOAD'] = 'false'
|
31
|
+
assert_equal(false, MIME::Types.send(:lazy_load?))
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_lazy_loading
|
35
|
+
MIME::Types.instance_variable_set(:@__types__, nil)
|
36
|
+
assert_nil(MIME::Types.instance_variable_get(:@__types__))
|
37
|
+
refute_nil(MIME::Types['text/html'].first)
|
38
|
+
refute_nil(MIME::Types.instance_variable_get(:@__types__))
|
39
|
+
end
|
40
|
+
end
|
metadata
CHANGED
@@ -1,61 +1,46 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mime-types
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '1.
|
5
|
-
prerelease:
|
4
|
+
version: '1.25'
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Austin Ziegler
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain:
|
12
|
-
- !
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
rAZcBPlrYYuiwtGI0yqIOgBfXSZCWWsJsuyTKELep6mCLgz0YZUfmvKr8W/Ab3ax
|
43
|
-
|
44
|
-
DuLzH92LSRjZJyjyAUpw/Vc2rM4giiP5jtByrb1Y1dGnQhHTMHf1GfucWm7Nw/V9
|
45
|
-
|
46
|
-
twEPVw8+0f88JQucxOTmTF1NbLFpiRwQUZ1zoZbNg2e7mShc/eexnVLWKFKxRoP6
|
47
|
-
|
48
|
-
KPj3WoD+spB8fA==
|
49
|
-
|
50
|
-
-----END CERTIFICATE-----
|
51
|
-
|
52
|
-
'
|
53
|
-
date: 2013-08-14 00:00:00.000000000 Z
|
11
|
+
- !binary |-
|
12
|
+
LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUROakNDQWg2Z0F3SUJB
|
13
|
+
Z0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREJCTVE4d0RRWURWUVFEREFaaGRY
|
14
|
+
TjAKYVc0eEdUQVhCZ29Ka2lhSmsvSXNaQUVaRmdseWRXSjVabTl5WjJVeEV6
|
15
|
+
QVJCZ29Ka2lhSmsvSXNaQUVaRmdOdgpjbWN3SGhjTk1UTXdNakEwTURNek16
|
16
|
+
STNXaGNOTVRRd01qQTBNRE16TXpJM1dqQkJNUTh3RFFZRFZRUUREQVpoCmRY
|
17
|
+
TjBhVzR4R1RBWEJnb0praWFKay9Jc1pBRVpGZ2x5ZFdKNVptOXlaMlV4RXpB
|
18
|
+
UkJnb0praWFKay9Jc1pBRVoKRmdOdmNtY3dnZ0VpTUEwR0NTcUdTSWIzRFFF
|
19
|
+
QkFRVUFBNElCRHdBd2dnRUtBb0lCQVFDMm1QTmY0TDM3R2hLSQpTUENZc3ZZ
|
20
|
+
V1hBMi9SOXU1K3B5VW5iSjJSMW8yQ2lScTJaQS9BSXpZNk4zaEduc2dvV25o
|
21
|
+
NVJ6dmdUTjFMdDA4CkROSXJzSUcyVkRZay9KVnQ2ZjlKNnpaOEVRSGJ6bldh
|
22
|
+
M2NXWW9DRmFhSUNkazdqVjFuLzQyaGc3MGpFRFlYbDkKZ0RPbDBrNkpteUYv
|
23
|
+
cnRmRnUvT0lrRkdXZUZZSXVGSHZSdUx5VWJ3NjYrUURUT3pLYjN0OG81NUlo
|
24
|
+
Z3kxR1Z3VAppNnBrRHM4TGhaV1hkT0QrOTIxbDJaMU5aR1phOUtOYkpJZzZ2
|
25
|
+
dGdZS1U5OGpRNXFyOWlZM2lrQkFzcEhyRmFzCks2VVN2R2dBZzhmQ0Q1WWlv
|
26
|
+
dEJFdkNCTVl0ZnFtZnJocGRVMnArZ3ZUZ2VMVzFLYWV2d3FkN25nUW1GVXJG
|
27
|
+
RzEKZVVKU1VSdjVBZ01CQUFHak9UQTNNQWtHQTFVZEV3UUNNQUF3SFFZRFZS
|
28
|
+
ME9CQllFRkF0SktNcDZZWU5xbGdSMwo5VGlaTFdxdkxhZ1NNQXNHQTFVZER3
|
29
|
+
UUVBd0lFc0RBTkJna3Foa2lHOXcwQkFRVUZBQU9DQVFFQXBUUGt2RG04Cjdn
|
30
|
+
SmxVVDRGZnVtWFB2dHVxUDY3THhVdEdFOHN5dlIwQTRBcyswUC93eWxMSkZV
|
31
|
+
T3NHVFRkWll0VGhoeENTSkcKKzdLRzJGZkljSDRaejJkOTdhclpHQXpCb2k4
|
32
|
+
aVBodDIvVXRTbDFmQ2NVSTV2bUphMU1pWFpUMm9xZFc3V3lkcQpyQVpjQlBs
|
33
|
+
cllZdWl3dEdJMHlxSU9nQmZYU1pDV1dzSnN1eVRLRUxlcDZtQ0xnejBZWlVm
|
34
|
+
bXZLcjhXL0FiM2F4CkR1THpIOTJMU1JqWkp5anlBVXB3L1ZjMnJNNGdpaVA1
|
35
|
+
anRCeXJiMVkxZEduUWhIVE1IZjFHZnVjV203TncvVjkKdHdFUFZ3OCswZjg4
|
36
|
+
SlF1Y3hPVG1URjFOYkxGcGlSd1FVWjF6b1piTmcyZTdtU2hjL2VleG5WTFdL
|
37
|
+
Rkt4Um9QNgpLUGozV29EK3NwQjhmQT09Ci0tLS0tRU5EIENFUlRJRklDQVRF
|
38
|
+
LS0tLS0K
|
39
|
+
date: 2013-08-30 00:00:00.000000000 Z
|
54
40
|
dependencies:
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: rubyforge
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
44
|
requirements:
|
60
45
|
- - ! '>='
|
61
46
|
- !ruby/object:Gem::Version
|
@@ -63,7 +48,6 @@ dependencies:
|
|
63
48
|
type: :development
|
64
49
|
prerelease: false
|
65
50
|
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
51
|
requirements:
|
68
52
|
- - ! '>='
|
69
53
|
- !ruby/object:Gem::Version
|
@@ -71,7 +55,6 @@ dependencies:
|
|
71
55
|
- !ruby/object:Gem::Dependency
|
72
56
|
name: minitest
|
73
57
|
requirement: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
58
|
requirements:
|
76
59
|
- - ~>
|
77
60
|
- !ruby/object:Gem::Version
|
@@ -79,7 +62,6 @@ dependencies:
|
|
79
62
|
type: :development
|
80
63
|
prerelease: false
|
81
64
|
version_requirements: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
65
|
requirements:
|
84
66
|
- - ~>
|
85
67
|
- !ruby/object:Gem::Version
|
@@ -87,7 +69,6 @@ dependencies:
|
|
87
69
|
- !ruby/object:Gem::Dependency
|
88
70
|
name: rdoc
|
89
71
|
requirement: !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
72
|
requirements:
|
92
73
|
- - ~>
|
93
74
|
- !ruby/object:Gem::Version
|
@@ -95,7 +76,6 @@ dependencies:
|
|
95
76
|
type: :development
|
96
77
|
prerelease: false
|
97
78
|
version_requirements: !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
79
|
requirements:
|
100
80
|
- - ~>
|
101
81
|
- !ruby/object:Gem::Version
|
@@ -103,7 +83,6 @@ dependencies:
|
|
103
83
|
- !ruby/object:Gem::Dependency
|
104
84
|
name: hoe-bundler
|
105
85
|
requirement: !ruby/object:Gem::Requirement
|
106
|
-
none: false
|
107
86
|
requirements:
|
108
87
|
- - ~>
|
109
88
|
- !ruby/object:Gem::Version
|
@@ -111,7 +90,6 @@ dependencies:
|
|
111
90
|
type: :development
|
112
91
|
prerelease: false
|
113
92
|
version_requirements: !ruby/object:Gem::Requirement
|
114
|
-
none: false
|
115
93
|
requirements:
|
116
94
|
- - ~>
|
117
95
|
- !ruby/object:Gem::Version
|
@@ -119,7 +97,6 @@ dependencies:
|
|
119
97
|
- !ruby/object:Gem::Dependency
|
120
98
|
name: hoe-doofus
|
121
99
|
requirement: !ruby/object:Gem::Requirement
|
122
|
-
none: false
|
123
100
|
requirements:
|
124
101
|
- - ~>
|
125
102
|
- !ruby/object:Gem::Version
|
@@ -127,7 +104,6 @@ dependencies:
|
|
127
104
|
type: :development
|
128
105
|
prerelease: false
|
129
106
|
version_requirements: !ruby/object:Gem::Requirement
|
130
|
-
none: false
|
131
107
|
requirements:
|
132
108
|
- - ~>
|
133
109
|
- !ruby/object:Gem::Version
|
@@ -135,7 +111,6 @@ dependencies:
|
|
135
111
|
- !ruby/object:Gem::Dependency
|
136
112
|
name: hoe-gemspec2
|
137
113
|
requirement: !ruby/object:Gem::Requirement
|
138
|
-
none: false
|
139
114
|
requirements:
|
140
115
|
- - ~>
|
141
116
|
- !ruby/object:Gem::Version
|
@@ -143,7 +118,6 @@ dependencies:
|
|
143
118
|
type: :development
|
144
119
|
prerelease: false
|
145
120
|
version_requirements: !ruby/object:Gem::Requirement
|
146
|
-
none: false
|
147
121
|
requirements:
|
148
122
|
- - ~>
|
149
123
|
- !ruby/object:Gem::Version
|
@@ -151,7 +125,6 @@ dependencies:
|
|
151
125
|
- !ruby/object:Gem::Dependency
|
152
126
|
name: hoe-git
|
153
127
|
requirement: !ruby/object:Gem::Requirement
|
154
|
-
none: false
|
155
128
|
requirements:
|
156
129
|
- - ~>
|
157
130
|
- !ruby/object:Gem::Version
|
@@ -159,7 +132,6 @@ dependencies:
|
|
159
132
|
type: :development
|
160
133
|
prerelease: false
|
161
134
|
version_requirements: !ruby/object:Gem::Requirement
|
162
|
-
none: false
|
163
135
|
requirements:
|
164
136
|
- - ~>
|
165
137
|
- !ruby/object:Gem::Version
|
@@ -167,7 +139,6 @@ dependencies:
|
|
167
139
|
- !ruby/object:Gem::Dependency
|
168
140
|
name: hoe-rubygems
|
169
141
|
requirement: !ruby/object:Gem::Requirement
|
170
|
-
none: false
|
171
142
|
requirements:
|
172
143
|
- - ~>
|
173
144
|
- !ruby/object:Gem::Version
|
@@ -175,7 +146,6 @@ dependencies:
|
|
175
146
|
type: :development
|
176
147
|
prerelease: false
|
177
148
|
version_requirements: !ruby/object:Gem::Requirement
|
178
|
-
none: false
|
179
149
|
requirements:
|
180
150
|
- - ~>
|
181
151
|
- !ruby/object:Gem::Version
|
@@ -183,7 +153,6 @@ dependencies:
|
|
183
153
|
- !ruby/object:Gem::Dependency
|
184
154
|
name: hoe-travis
|
185
155
|
requirement: !ruby/object:Gem::Requirement
|
186
|
-
none: false
|
187
156
|
requirements:
|
188
157
|
- - ~>
|
189
158
|
- !ruby/object:Gem::Version
|
@@ -191,7 +160,6 @@ dependencies:
|
|
191
160
|
type: :development
|
192
161
|
prerelease: false
|
193
162
|
version_requirements: !ruby/object:Gem::Requirement
|
194
|
-
none: false
|
195
163
|
requirements:
|
196
164
|
- - ~>
|
197
165
|
- !ruby/object:Gem::Version
|
@@ -199,7 +167,6 @@ dependencies:
|
|
199
167
|
- !ruby/object:Gem::Dependency
|
200
168
|
name: rake
|
201
169
|
requirement: !ruby/object:Gem::Requirement
|
202
|
-
none: false
|
203
170
|
requirements:
|
204
171
|
- - ~>
|
205
172
|
- !ruby/object:Gem::Version
|
@@ -207,7 +174,6 @@ dependencies:
|
|
207
174
|
type: :development
|
208
175
|
prerelease: false
|
209
176
|
version_requirements: !ruby/object:Gem::Requirement
|
210
|
-
none: false
|
211
177
|
requirements:
|
212
178
|
- - ~>
|
213
179
|
- !ruby/object:Gem::Version
|
@@ -215,7 +181,6 @@ dependencies:
|
|
215
181
|
- !ruby/object:Gem::Dependency
|
216
182
|
name: hoe
|
217
183
|
requirement: !ruby/object:Gem::Requirement
|
218
|
-
none: false
|
219
184
|
requirements:
|
220
185
|
- - ~>
|
221
186
|
- !ruby/object:Gem::Version
|
@@ -223,7 +188,6 @@ dependencies:
|
|
223
188
|
type: :development
|
224
189
|
prerelease: false
|
225
190
|
version_requirements: !ruby/object:Gem::Requirement
|
226
|
-
none: false
|
227
191
|
requirements:
|
228
192
|
- - ~>
|
229
193
|
- !ruby/object:Gem::Version
|
@@ -231,9 +195,57 @@ dependencies:
|
|
231
195
|
description: ! 'This library allows for the identification of a file''s likely MIME
|
232
196
|
content
|
233
197
|
|
234
|
-
type. This is release 1.
|
198
|
+
type. This is release 1.25, adding experimental caching and lazy loading
|
199
|
+
|
200
|
+
functionality.
|
201
|
+
|
202
|
+
|
203
|
+
The caching and lazy loading features were initially implemented by Greg
|
204
|
+
|
205
|
+
Brockman (gdb). As these features are experimental, they are disabled by
|
206
|
+
|
207
|
+
default and must be enabled through the use of environment variables. The cache
|
208
|
+
|
209
|
+
is invalidated on a per-version basis; the cache for version 1.25 will not be
|
210
|
+
|
211
|
+
reused for version 1.26.
|
212
|
+
|
213
|
+
|
214
|
+
To use lazy loading, set the environment variable +RUBY_MIME_TYPES_LAZY_LOAD+
|
215
|
+
|
216
|
+
to any value other than ''false''. When using lazy loading, the initial startup
|
217
|
+
|
218
|
+
of MIME::Types is around 12–25× faster than normal startup (on my system,
|
219
|
+
|
220
|
+
normal startup is about 90 ms; lazy startup is about 4 ms). This isn''t
|
221
|
+
|
222
|
+
generally useful, however, as the MIME::Types database has not been loaded.
|
223
|
+
|
224
|
+
Lazy startup and load is just *slightly* faster—around 1 ms. The real advantage
|
225
|
+
|
226
|
+
comes from using the cache.
|
227
|
+
|
228
|
+
|
229
|
+
To enable the cache, set the environment variable +RUBY_MIME_TYPES_CACHE+ to a
|
230
|
+
|
231
|
+
filename where MIME::Types will have read-write access. The first time a new
|
232
|
+
|
233
|
+
version of MIME::Types is run using this file, it will be created, taking a
|
234
|
+
|
235
|
+
little longer than normal. Subsequent loads using the same cache file will be
|
236
|
+
|
237
|
+
approximately 3½× faster (25 ms) than normal loads. This can be combined with
|
238
|
+
|
239
|
+
+RUBY_MIME_TYPES_LAZY_LOAD+, but this is *not* recommended in a multithreaded
|
240
|
+
|
241
|
+
or multiprocess environment where all threads or processes will be using the
|
242
|
+
|
243
|
+
same cache file.
|
244
|
+
|
245
|
+
|
246
|
+
As the caching interface is still experimental, the only values cached are the
|
235
247
|
|
236
|
-
|
248
|
+
default MIME::Types database, not any custom MIME::Types added by users.
|
237
249
|
|
238
250
|
|
239
251
|
MIME types are used in MIME-compliant communications, as in e-mail or HTTP
|
@@ -320,11 +332,14 @@ files:
|
|
320
332
|
- lib/mime/types/video.obsolete
|
321
333
|
- test/test_mime_type.rb
|
322
334
|
- test/test_mime_types.rb
|
335
|
+
- test/test_mime_types_cache.rb
|
336
|
+
- test/test_mime_types_lazy.rb
|
323
337
|
homepage: http://mime-types.rubyforge.org/
|
324
338
|
licenses:
|
325
339
|
- MIT
|
326
340
|
- Artistic 2.0
|
327
341
|
- GPL-2
|
342
|
+
metadata: {}
|
328
343
|
post_install_message:
|
329
344
|
rdoc_options:
|
330
345
|
- --main
|
@@ -332,24 +347,24 @@ rdoc_options:
|
|
332
347
|
require_paths:
|
333
348
|
- lib
|
334
349
|
required_ruby_version: !ruby/object:Gem::Requirement
|
335
|
-
none: false
|
336
350
|
requirements:
|
337
351
|
- - ! '>='
|
338
352
|
- !ruby/object:Gem::Version
|
339
353
|
version: '0'
|
340
354
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
341
|
-
none: false
|
342
355
|
requirements:
|
343
356
|
- - ! '>='
|
344
357
|
- !ruby/object:Gem::Version
|
345
358
|
version: '0'
|
346
359
|
requirements: []
|
347
360
|
rubyforge_project: mime-types
|
348
|
-
rubygems_version:
|
361
|
+
rubygems_version: 2.0.7
|
349
362
|
signing_key:
|
350
|
-
specification_version:
|
363
|
+
specification_version: 4
|
351
364
|
summary: This library allows for the identification of a file's likely MIME content
|
352
365
|
type
|
353
366
|
test_files:
|
354
367
|
- test/test_mime_type.rb
|
355
368
|
- test/test_mime_types.rb
|
369
|
+
- test/test_mime_types_cache.rb
|
370
|
+
- test/test_mime_types_lazy.rb
|
metadata.gz.sig
CHANGED
Binary file
|