Module: Sass::Files

Extended by:
Files
Included in:
Files
Defined in:
lib/sass/files.rb

Overview

This module contains various bits of functionality related to finding and caching Sass files.

Instance Method Summary collapse

Instance Method Details

#find_file_to_import(filename, load_paths) ⇒ String

Find the full filename of a Sass or CSS file to import. This follows Sass's import rules: if the filename given ends in ".sass" or ".css", it will try to find that type of file; otherwise, it will try to find the corresponding Sass file and fall back on CSS if it's not available.

Any Sass filename returned will correspond to an actual Sass file on the filesystem. CSS filenames, however, may not; they're expected to be put through directly to the stylesheet as CSS @import statements.

Parameters:

  • filename (String)

    The filename to search for

  • load_paths (Array<String>)

    The set of filesystem paths to search for Sass files.

Returns:

  • (String)

    The filename of the imported file. This is an absolute path if the file is a ".sass" file.

Raises:

  • (Sass::SyntaxError)

    if filename ends in ".sass" and no corresponding Sass file could be found.



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/sass/files.rb', line 65

def find_file_to_import(filename, load_paths)
  was_sass = false
  original_filename = filename

  if filename[-5..-1] == ".sass"
    filename = filename[0...-5]
    was_sass = true
  elsif filename[-4..-1] == ".css"
    return filename
  end

  new_filename = find_full_path("#{filename}.sass", load_paths)

  return new_filename if new_filename
  return filename + '.css' unless was_sass
  raise SyntaxError.new("File to import not found or unreadable: #{original_filename}.", @line)
end

#tree_for(filename, options) ⇒ Object

Returns the Tree for the given file, reading it from the Sass cache if possible.

Parameters:

  • filename (String)

    The path to the Sass file

  • options (Hash<Symbol, Object>)

    The options hash. Only the :cache_location option is used

Raises:



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/sass/files.rb', line 17

def tree_for(filename, options)
  options = Sass::Engine::DEFAULT_OPTIONS.merge(options)
  text = File.read(filename)

  if options[:cache]
    compiled_filename = sassc_filename(filename, options)
    sha = Digest::SHA1.hexdigest(text)

    if root = try_to_read_sassc(filename, compiled_filename, sha)
      root.options = options.merge(:filename => filename)
      return root
    end
  end

  engine = Sass::Engine.new(text, options.merge(:filename => filename))

  begin
    root = engine.to_tree
  rescue Sass::SyntaxError => err
    err.add_backtrace_entry(filename)
    raise err
  end

  try_to_write_sassc(root, compiled_filename, sha, options) if options[:cache]

  root
end