Class: Sass::CacheStore
- Inherits:
-
Object
- Object
- Sass::CacheStore
- Defined in:
- lib/sass/cache_store.rb
Overview
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
Instance Method Summary collapse
-
#_retrieve(key, version, sha) ⇒ String, NilClass
Retrieved cached contents.
-
#_store(key, version, sha, contents)
Store cached contents for later retrieval Must be implemented by all CacheStore subclasses.
-
#key(sass_dirname, sass_basename)
Return the key for the sass file.
-
#retrieve(key, sha) ⇒ Sass::Tree::RootNode
Retrieve a Tree::RootNode.
-
#store(key, sha, root)
Store a Tree::RootNode.
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.
40 41 42 |
# File 'lib/sass/cache_store.rb', line 40
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.
23 24 25 |
# File 'lib/sass/cache_store.rb', line 23
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.
82 83 84 85 86 |
# File 'lib/sass/cache_store.rb', line 82
def key(sass_dirname, sass_basename)
dir = Digest::SHA1.hexdigest(sass_dirname)
filename = "#{sass_basename}c"
"#{dir}/#{filename}"
end
|
#retrieve(key, sha) ⇒ Sass::Tree::RootNode
Retrieve a Tree::RootNode.
63 64 65 66 67 68 69 |
# File 'lib/sass/cache_store.rb', line 63
def retrieve(key, sha)
contents = _retrieve(key, Sass::VERSION, sha)
Haml::Util.load(contents) if contents
rescue EOFError, TypeError, ArgumentError => e
raise
Haml::Util.haml_warn "Warning. Error encountered while reading cache #{path_to(key)}: #{e}"
end
|
#store(key, sha, root)
Store a Tree::RootNode.
49 50 51 52 53 54 55 56 |
# File 'lib/sass/cache_store.rb', line 49
def store(key, sha, root)
orig_options = root.options
begin
_store(key, Sass::VERSION, sha, Haml::Util.dump(root))
ensure
root.options = orig_options
end
end
|