Class: Sass::Plugin::StalenessChecker
- Inherits:
-
Object
- Object
- Sass::Plugin::StalenessChecker
- Defined in:
- lib/sass/plugin/staleness_checker.rb
Overview
The class handles .s[ca]ss
file staleness checks via their mtime timestamps.
To speed things up two level of caches are employed:
- A class-level dependency cache which stores @import paths for each file. This is a long-lived cache that is reused by every StalenessChecker instance.
- Three short-lived instance-level caches, one for file mtimes, one for whether a file is stale during this particular run. and one for the parse tree for a file. These are only used by a single StalenessChecker instance.
Usage:
- For a one-off staleness check of a single
.s[ca]ss
file, the class-level StalenessChecker.stylesheet_needs_update? method should be used. - For a series of staleness checks (e.g. checking all files for staleness) a StalenessChecker instance should be created, and the instance-level #stylesheet_needs_update? method should be used. the caches should make the whole process significantly faster. WARNING: It is important not to retain the instance for too long, as its instance-level caches are never explicitly expired.
Class Method Summary collapse
-
.stylesheet_modified_since?(template_file, mtime, importer = nil) ⇒ Boolean
Returns whether a Sass or SCSS stylesheet has been modified since a given time.
-
.stylesheet_needs_update?(css_file, template_file, importer = nil) ⇒ Boolean
Returns whether or not a given CSS file is out of date and needs to be regenerated.
Instance Method Summary collapse
-
#initialize(options) ⇒ StalenessChecker
constructor
Creates a new StalenessChecker for checking the staleness of several stylesheets at once.
-
#stylesheet_modified_since?(template_file, mtime, importer = nil) ⇒ Boolean
Returns whether a Sass or SCSS stylesheet has been modified since a given time.
-
#stylesheet_needs_update?(css_file, template_file, importer = nil) ⇒ Boolean
Returns whether or not a given CSS file is out of date and needs to be regenerated.
Constructor Details
#initialize(options) ⇒ StalenessChecker
Creates a new StalenessChecker for checking the staleness of several stylesheets at once.
39 40 41 42 43 44 45 46 47 |
# File 'lib/sass/plugin/staleness_checker.rb', line 39
def initialize(options)
@dependencies = self.class.dependencies_cache
# Entries in the following instance-level caches are never explicitly expired.
# Instead they are supposed to automaticaly go out of scope when a series of staleness checks
# (this instance of StalenessChecker was created for) is finished.
@mtimes, @dependencies_stale, @parse_trees = {}, {}, {}
@options = Sass::Engine.normalize_options(options)
end
|
Class Method Details
.stylesheet_modified_since?(template_file, mtime, importer = nil) ⇒ Boolean
Returns whether a Sass or SCSS stylesheet has been modified since a given time.
The distinction between this method and the instance-level #stylesheet_modified_since? is that the instance method preserves mtime and stale-dependency caches, so it's better to use when checking multiple stylesheets at once.
104 105 106 |
# File 'lib/sass/plugin/staleness_checker.rb', line 104
def self.stylesheet_modified_since?(template_file, mtime, importer = nil)
new(Plugin.engine_options).stylesheet_modified_since?(template_file, mtime, importer)
end
|
.stylesheet_needs_update?(css_file, template_file, importer = nil) ⇒ Boolean
Returns whether or not a given CSS file is out of date and needs to be regenerated.
The distinction between this method and the instance-level #stylesheet_needs_update? is that the instance method preserves mtime and stale-dependency caches, so it's better to use when checking multiple stylesheets at once.
89 90 91 |
# File 'lib/sass/plugin/staleness_checker.rb', line 89
def self.stylesheet_needs_update?(css_file, template_file, importer = nil)
new(Plugin.engine_options).stylesheet_needs_update?(css_file, template_file, importer)
end
|
Instance Method Details
#stylesheet_modified_since?(template_file, mtime, importer = nil) ⇒ Boolean
Returns whether a Sass or SCSS stylesheet has been modified since a given time.
73 74 75 76 |
# File 'lib/sass/plugin/staleness_checker.rb', line 73
def stylesheet_modified_since?(template_file, mtime, importer = nil)
importer ||= @options[:filesystem_importer].new(".")
dependency_updated?(mtime).call(template_file, importer)
end
|
#stylesheet_needs_update?(css_file, template_file, importer = nil) ⇒ Boolean
Returns whether or not a given CSS file is out of date and needs to be regenerated.
56 57 58 59 60 61 62 63 64 |
# File 'lib/sass/plugin/staleness_checker.rb', line 56
def stylesheet_needs_update?(css_file, template_file, importer = nil)
template_file = File.expand_path(template_file)
begin
css_mtime = File.mtime(css_file)
rescue Errno::ENOENT
return true
end
stylesheet_modified_since?(template_file, css_mtime, importer)
end
|