class Sass::Importers::Filesystem

Simply loads Sass files from the filesystem using the default logic.
The default importer, used for any strings found in the load path.

def _find(dir, name, options)

def _find(dir, name, options)
  full_filename, syntax = find_real_file(dir, name)
  return unless full_filename && File.readable?(full_filename)
  options[:syntax] = syntax
  options[:filename] = full_filename
  options[:importer] = self
  Sass::Engine.new(File.read(full_filename), options)
end

def extensions

Returns:
  • ({String => Symbol}) -
def extensions
  {'sass' => :sass, 'scss' => :scss}
end

def find(name, options)

Other tags:
    See: Base#find -
def find(name, options)
  _find(@root, name, options)
end

def find_real_file(dir, name)

Returns:
  • ((String, Symbol)) - A filename-syntax pair.

Parameters:
  • name (String) -- The filename to search for.
  • dir (String) -- The directory relative to which to search.
def find_real_file(dir, name)
  possible_files(name).each do |f, s|
    if File.exists?(full_path = join(dir, f))
      return full_path, s
    end
  end
  nil
end

def find_relative(name, base, options)

Other tags:
    See: Base#find_relative -
def find_relative(name, base, options)
  _find(File.dirname(base), name, options)
end

def initialize(root)

Parameters:
  • root (String) -- The root path.
def initialize(root)
  @root = root
end

def join(base, path)

def join(base, path)
  Pathname.new(base).join(path).to_s
end

def key(name, options)

Other tags:
    See: Base#key -
def key(name, options)
  [self.class.name + ":" + File.dirname(File.expand_path(name)),
    File.basename(name)]
end

def mtime(name, options)

Other tags:
    See: Base#mtime -
def mtime(name, options)
  file = find_real_file(@root, name)
  File.mtime(name)
rescue Errno::ENOENT
  nil
end

def possible_files(name)

Returns:
  • (Array(String, Symbol)) - An array of pairs.

Parameters:
  • name (String) -- The filename.
def possible_files(name)
  dirname, basename, extname = split(name)
  sorted_exts = extensions.sort
  syntax = extensions[extname]
  Sass::Util.flatten(
    ["#{dirname}/#{basename}", "#{dirname}/_#{basename}"].map do |name|
      next [["#{name}.#{extensions.invert[syntax]}", syntax]] if syntax
      sorted_exts.map {|ext, syn| ["#{name}.#{ext}", syn]}
    end, 1)
end

def split(name)

Only the known extensions returned from the extensions method will be recognized as such.
Splits a filename into three parts, a directory part, a basename, and an extension
def split(name)
  extension = nil
  dirname, basename = File.dirname(name), File.basename(name)
  if basename =~ /^(.*)\.(#{extensions.keys.map{|e| Regexp.escape(e)}.join('|')})$/
    basename = $1
    extension = $2
  end
  [dirname, basename, extension]
end

def to_s

Other tags:
    See: Base#to_s -
def to_s
  @root
end