Class: Sass::CacheStores::Base Abstract

Inherits:
Object
  • Object
show all
Defined in:
lib/sass/cache_stores/base.rb

Overview

This class is abstract.

An abstract base class for backends for the Sass cache. Any key-value store can act as such a backend; it just needs to implement the #_store and #_retrieve methods.

To use a cache store with Sass, use the :cache_store option.

Direct Known Subclasses

Chain, Filesystem, Memory

Instance Method Summary collapse

Instance Method Details

#_retrieve(key, version, sha) ⇒ String, NilClass

Retrieved cached contents. Must be implemented by all subclasses.

Note: if the key exists but the sha or version have changed, then the key may be deleted by the cache store, if it wants to do so.

Parameters:

  • key (String)

    The key to retrieve

  • version (String)

    The current sass version. Cached contents must not be retrieved across different versions of sass.

  • sha (String)

    The sha of the sass source. Cached contents must not be retrieved if the sha has changed.

Returns:

  • (String)

    The contents that were previously stored.

  • (NilClass)

    when the cache key is not found or the version or sha have changed.



41
42
43
# File 'lib/sass/cache_stores/base.rb', line 41

def _retrieve(key, version, sha)
  raise "#{self.class} must implement #_retrieve."
end

#_store(key, version, sha, contents)

Store cached contents for later retrieval Must be implemented by all CacheStore subclasses

Note: cache contents contain binary data.

Parameters:

  • key (String)

    The key to store the contents under

  • version (String)

    The current sass version. Cached contents must not be retrieved across different versions of sass.

  • sha (String)

    The sha of the sass source. Cached contents must not be retrieved if the sha has changed.

  • contents (String)

    The contents to store.



24
25
26
# File 'lib/sass/cache_stores/base.rb', line 24

def _store(key, version, sha, contents)
  raise "#{self.class} must implement #_store."
end

#key(sass_dirname, sass_basename)

Return the key for the sass file.

The (sass_dirname, sass_basename) pair should uniquely identify the Sass document, but otherwise there are no restrictions on their content.

Parameters:

  • sass_dirname (String)

    The fully-expanded location of the Sass file. This corresponds to the directory name on a filesystem.

  • sass_basename (String)

    The name of the Sass file that is being referenced. This corresponds to the basename on a filesystem.



81
82
83
84
85
# File 'lib/sass/cache_stores/base.rb', line 81

def key(sass_dirname, sass_basename)
  dir = Digest::SHA1.hexdigest(sass_dirname)
  filename = "#{sass_basename}c"
  "#{dir}/#{filename}"
end

#retrieve(key, sha) ⇒ Object

Retrieve a Tree::RootNode.

Parameters:

  • key (String)

    The key the root element was stored under.

  • sha (String)

    The checksum of the root element's content.

Returns:

  • (Object)

    The cached object.



62
63
64
65
66
67
68
# File 'lib/sass/cache_stores/base.rb', line 62

def retrieve(key, sha)
  contents = _retrieve(key, Sass::VERSION, sha)
  Marshal.load(contents) if contents
rescue EOFError, TypeError, ArgumentError, LoadError => e
  Sass::Util.sass_warn "Warning. Error encountered while reading cache #{path_to(key)}: #{e}"
  nil
end

#store(key, sha, root)

Store a Tree::RootNode.

Parameters:

  • key (String)

    The key to store it under.

  • sha (String)

    The checksum for the contents that are being stored.

  • root (Object)

    The root node to cache.



50
51
52
53
54
55
# File 'lib/sass/cache_stores/base.rb', line 50

def store(key, sha, root)
  _store(key, Sass::VERSION, sha, Marshal.dump(root))
rescue TypeError, LoadError => e
  Sass::Util.sass_warn "Warning. Error encountered while saving cache #{path_to(key)}: #{e}"
  nil
end