class Sass::CacheStores::Filesystem

A backend for the Sass cache using the filesystem.

Attributes

cache_location[RW]

The directory where the cached files will be stored.

@return [String]

Public Class Methods

new(cache_location) click to toggle source

@param #cache_location [String] see {#cache_location}

# File lib/sass/cache_stores/filesystem.rb, line 13
def initialize(cache_location)
  @cache_location = cache_location
end

Public Instance Methods

_retrieve(key, version, sha) click to toggle source

@see Base#_retrieve

# File lib/sass/cache_stores/filesystem.rb, line 18
def _retrieve(key, version, sha)
  return unless File.readable?(path_to(key))
  begin
    File.open(path_to(key), "rb") do |f|
      if f.readline("\n").strip == version && f.readline("\n").strip == sha
        return f.read
      end
    end
    File.unlink path_to(key)
  rescue Errno::ENOENT
    # Already deleted. Race condition?
  end
  nil
rescue EOFError, TypeError, ArgumentError => e
  Sass::Util.sass_warn "Warning. Error encountered while reading cache #{path_to(key)}: #{e}"
end
_store(key, version, sha, contents) click to toggle source

@see Base#_store

# File lib/sass/cache_stores/filesystem.rb, line 36
def _store(key, version, sha, contents)
  compiled_filename = path_to(key)
  FileUtils.mkdir_p(File.dirname(compiled_filename))
  Sass::Util.atomic_create_and_write_file(compiled_filename, 0600) do |f|
    f.puts(version)
    f.puts(sha)
    f.write(contents)
  end
rescue Errno::EACCES
  # pass
end

Private Instance Methods

path_to(key) click to toggle source

Returns the path to a file for the given key.

@param key [String] @return [String] The path to the cache file.

# File lib/sass/cache_stores/filesystem.rb, line 54
def path_to(key)
  key = key.gsub(/[<>:\|?*%]/) {|c| "%%%03d" % Sass::Util.ord(c)}
  File.join(cache_location, key)
end