Class: Sass::Importers::Filesystem

Inherits:
Base
  • Object
show all
Defined in:
/var/www/sass-pages/.sass/lib/sass/importers/filesystem.rb

Overview

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

Constant Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

- (Filesystem) initialize(root)

Creates a new filesystem importer that imports files relative to a given path.

Parameters:

  • (String) root — The root path. This importer will import files relative to this path.


15
16
17
# File '/var/www/sass-pages/.sass/lib/sass/importers/filesystem.rb', line 15

def initialize(root)
  @root = File.expand_path(root)
end

Instance Attribute Details

- root

Returns the value of attribute root



9
10
11
# File '/var/www/sass-pages/.sass/lib/sass/importers/filesystem.rb', line 9

def root
  @root
end

Instance Method Details

- (Boolean) eql?(other)

Returns:

  • (Boolean)


52
53
54
# File '/var/www/sass-pages/.sass/lib/sass/importers/filesystem.rb', line 52

def eql?(other)
  root.eql?(other.root)
end

- escape_glob_characters(name) (protected)



96
97
98
99
100
# File '/var/www/sass-pages/.sass/lib/sass/importers/filesystem.rb', line 96

def escape_glob_characters(name)
  name.gsub(/[\*\[\]\{\}\?]/) do |char|
    "\\#{char}"
  end
end

- ({String => Symbol}) extensions (protected)

A hash from file extensions to the syntaxes for those extensions. The syntaxes must be :sass or :scss.

This can be overridden by subclasses that want normal filesystem importing with unusual extensions.

Returns:

  • ({String => Symbol})


75
76
77
# File '/var/www/sass-pages/.sass/lib/sass/importers/filesystem.rb', line 75

def extensions
  {'sass' => :sass, 'scss' => :scss}
end

- find(name, options)

See Also:



25
26
27
# File '/var/www/sass-pages/.sass/lib/sass/importers/filesystem.rb', line 25

def find(name, options)
  _find(@root, name, options)
end

- ((String, Symbol)) find_real_file(dir, name) (protected)

Given a base directory and an @imported name, finds an existant file that matches the name.

Parameters:

  • (String) dir — The directory relative to which to search.
  • (String) name — The filename to search for.

Returns:

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


109
110
111
112
113
114
115
116
117
118
# File '/var/www/sass-pages/.sass/lib/sass/importers/filesystem.rb', line 109

def find_real_file(dir, name)
  for (f,s) in possible_files(remove_root(name))
    path = (dir == "." || Pathname.new(f).absolute?) ? f : "#{dir}/#{f}"
    if full_path = Dir[path].first
      full_path.gsub!(REDUNDANT_DIRECTORY,File::SEPARATOR)
      return full_path, s
    end
  end
  nil
end

- find_relative(name, base, options)

See Also:



20
21
22
# File '/var/www/sass-pages/.sass/lib/sass/importers/filesystem.rb', line 20

def find_relative(name, base, options)
  _find(File.dirname(base), name, options)
end

- hash



48
49
50
# File '/var/www/sass-pages/.sass/lib/sass/importers/filesystem.rb', line 48

def hash
  @root.hash
end

- key(name, options)

See Also:



38
39
40
41
# File '/var/www/sass-pages/.sass/lib/sass/importers/filesystem.rb', line 38

def key(name, options)
  [self.class.name + ":" + File.dirname(File.expand_path(name)),
    File.basename(name)]
end

- mtime(name, options)

See Also:



30
31
32
33
34
35
# File '/var/www/sass-pages/.sass/lib/sass/importers/filesystem.rb', line 30

def mtime(name, options)
  file, s = find_real_file(@root, name)
  File.mtime(file) if file
rescue Errno::ENOENT
  nil
end

- (Array(String, Symbol)) possible_files(name) (protected)

Given an @imported path, returns an array of possible on-disk filenames and their corresponding syntaxes for that path.

Parameters:

  • (String) name — The filename.

Returns:

  • (Array(String, Symbol)) — An array of pairs. The first element of each pair is a filename to look for; the second element is the syntax that file would be in (:sass or :scss).


86
87
88
89
90
91
92
93
94
# File '/var/www/sass-pages/.sass/lib/sass/importers/filesystem.rb', line 86

def possible_files(name)
  name = escape_glob_characters(name)
  dirname, basename, extname = split(name)
  sorted_exts = extensions.sort
  syntax = extensions[extname]

  return [["#{dirname}/{_,}#{basename}.#{extensions.invert[syntax]}", syntax]] if syntax
  sorted_exts.map {|ext, syn| ["#{dirname}/{_,}#{basename}.#{ext}", syn]}
end

- remove_root(name) (protected)

If a full uri is passed, this removes the root from it otherwise returns the name unchanged



60
61
62
63
64
65
66
# File '/var/www/sass-pages/.sass/lib/sass/importers/filesystem.rb', line 60

def remove_root(name)
  if name.index(@root + "/") == 0
    name[(@root.length + 1)..-1]
  else
    name
  end
end

- split(name) (protected)

Splits a filename into three parts, a directory part, a basename, and an extension Only the known extensions returned from the extensions method will be recognized as such.



122
123
124
125
126
127
128
129
130
# File '/var/www/sass-pages/.sass/lib/sass/importers/filesystem.rb', line 122

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

- to_s

See Also:



44
45
46
# File '/var/www/sass-pages/.sass/lib/sass/importers/filesystem.rb', line 44

def to_s
  @root
end