Class: MIME::Types::Cache

Inherits:
Struct
  • Object
show all
Defined in:
lib/mime/types/cache.rb

Overview

Caching of MIME::Types registries is advisable if you will be loading the default registry relatively frequently. With the class methods on MIME::Types::Cache, any MIME::Types registry can be marshaled quickly and easily.

The cache is invalidated on a per-version basis; a cache file for version 2.0 will not be reused with version 2.0.1.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Attribute Details

#dataObject

Returns the value of attribute data

Returns:

  • (Object)

    the current value of data


11
12
13
# File 'lib/mime/types/cache.rb', line 11

def data
  @data
end

#versionObject

Returns the value of attribute version

Returns:

  • (Object)

    the current value of version


11
12
13
# File 'lib/mime/types/cache.rb', line 11

def version
  @version
end

Class Method Details

.load(cache_file = nil) ⇒ Object

Attempts to load the cache from the file provided as a parameter or in the environment variable RUBY_MIME_TYPES_CACHE. Returns nil if the file does not exist, if the file cannot be loaded, or if the data in the cache version is different than this version.


18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/mime/types/cache.rb', line 18

def load(cache_file = nil)
  cache_file = cache_file || ENV['RUBY_MIME_TYPES_CACHE']
  return nil unless cache_file and File.exists?(cache_file)

  cache = Marshal.load(File.binread(cache_file))
  if cache.version == MIME::Types::VERSION
    Marshal.load(cache.data)
  else
    warn "Could not load MIME::Types cache: invalid version"
    nil
  end
rescue => e
  warn "Could not load MIME::Types cache: #{e}"
  return nil
end

.save(types = nil, cache_file = nil) ⇒ Object

Attempts to save the types provided to the cache file provided.

If types is not provided or is nil, the cache will contain the current MIME::Types default registry.

If cache_file is not provided or is nil, the cache will be written to the file specified in the environment variable RUBY_MIME_TYPES_CACHE. If there is no cache file specified either directly or through the environment, this method will return nil


43
44
45
46
47
48
49
50
51
52
# File 'lib/mime/types/cache.rb', line 43

def save(types = nil, cache_file = nil)
  cache_file = cache_file || ENV['RUBY_MIME_TYPES_CACHE']
  return nil unless cache_file

  types      = types || MIME::Types.send(:__types__)

  File.open(cache_file, 'wb') do |f|
    f.write(Marshal.dump(new(types.data_version, Marshal.dump(types))))
  end
end