Module: Sass::Files
- Extends:
- Files
- Defined in:
- /var/www/sass-pages/.haml/lib/sass/files.rb
Overview
This module contains various bits of functionality related to finding and caching Sass files.
Instance Method Summary
- - (String) find_file_to_import(filename, load_paths) Find the full filename of a Sass, SCSS, or CSS file to import.
- - tree_for(filename, options) Returns the Sass::Tree for the given file, reading it from the Sass cache if possible.
Instance Method Details
- (String) find_file_to_import(filename, load_paths)
Find the full filename of a Sass, SCSS, or CSS file to import. This follows Sass’s import rules: if the filename given ends in ".sass", ".scss", or ".css", it will try to find that type of file; otherwise, it will try to find the corresponding Sass/SCSS file and fall back on CSS if it’s not available.
Any Sass/SCSS filename returned will correspond to an actual file of the corresponding type on the filesystem. CSS filenames, however, may not; they’re expected to be put through directly to the stylesheet as CSS @import statements.
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File '/var/www/sass-pages/.haml/lib/sass/files.rb', line 69
def find_file_to_import(filename, load_paths)
was_sass = was_scss = false
original_filename = filename
if [".sass", ".scss"].include?(filename[-5..-1])
was_sass = filename[-5..-1] == ".sass"
was_scss = filename[-5..-1] == ".scss"
filename = filename[0...-5]
elsif filename[-4..-1] == ".css"
return filename
end
new_filename = nil
load_paths = load_paths.uniq
load_paths.each do |load_path|
new_filename ||= find_full_path("#{filename}.sass", load_path) unless was_scss
new_filename ||= find_full_path("#{filename}.scss", load_path) unless was_sass
end
return new_filename if new_filename
unless was_sass || was_scss
Haml::Util.haml_warn "WARNING: Neither \#{filename}.sass nor .scss found. Using \#{filename}.css instead.\nThis behavior is deprecated and will be removed in a future version.\nIf you really need \#{filename}.css, import it explicitly.\n"
return filename + '.css'
end
message = "File to import not found or unreadable: #{original_filename}.\n"
if load_paths.size == 1
message << "Load path: #{load_paths.first}"
else
message << "Load paths:\n " << load_paths.join("\n ")
end
raise SyntaxError.new(message)
end
|
- tree_for(filename, options)
Returns the Sass::Tree for the given file, reading it from the Sass cache if possible.
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 44 45 46 47 |
# File '/var/www/sass-pages/.haml/lib/sass/files.rb', line 19
def tree_for(filename, options)
default_options = Sass::Engine::DEFAULT_OPTIONS.dup
default_options.delete(:syntax)
options = default_options.merge!(options)
text = File.read(filename)
if options[:cache] || options[:read_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
options = options.merge(:filename => filename)
if filename =~ /\.scss$/
options = {:syntax => :scss}.merge(options)
elsif filename =~ /\.sass$/
options = {:syntax => :sass}.merge(options)
end
engine = Sass::Engine.new(text, options)
root = engine.to_tree
try_to_write_sassc(root, compiled_filename, sha, options) if options[:cache]
root
end
|