Class | Sass::Plugin::StalenessChecker
In: | lib/sass/plugin/staleness_checker.rb
Parent: | Object

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.
- Two short-lived instance-level caches, one for file mtimes and one for whether a file is stale during this particular run. 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 {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.

### Methods

new stylesheet_needs_update? stylesheet_needs_update?

### Constants

DELETED | = | 1.0/0.0

### Attributes

dependencies_cache | [RW] | @private

### Public Class methods

new()

Creates a new StalenessChecker for checking the staleness of several stylesheets at once.

[Source]

        # File lib/sass/plugin/staleness_checker.rb, line 35
    35:       def initialize
    36:         @dependencies = self.class.dependencies_cache
    37:
    38:         # Entries in the following instance-level caches are never explicitly expired.
    39:         # Instead they are supposed to automaticaly go out of scope when a series of staleness checks
    40:         # (this instance of StalenessChecker was created for) is finished.
    41:         @mtimes, @dependencies_stale = {}, {}
    42:       end

stylesheet_needs_update?(css_file, template_file)

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.

@param css_file [String] The location of the CSS file to check. @param template_file [String] The location of the Sass or SCSS template

      that is compiled to `css_file`.

[Source]

        # File lib/sass/plugin/staleness_checker.rb, line 66
    66:       def self.stylesheet_needs_update?(css_file, template_file)
    67:         new.stylesheet_needs_update?(css_file, template_file)
    68:       end

### Public Instance methods

stylesheet_needs_update?(css_file, template_file)

Returns whether or not a given CSS file is out of date and needs to be regenerated.

@param css_file [String] The location of the CSS file to check. @param template_file [String] The location of the Sass or SCSS template

      that is compiled to `css_file`.

[Source]

        # File lib/sass/plugin/staleness_checker.rb, line 50
    50:       def stylesheet_needs_update?(css_file, template_file)
    51:         template_file, css_mtime = File.expand_path(template_file), mtime(css_file)
    52:
    53:         css_mtime == DELETED || dependency_updated?(css_mtime).call(template_file)
    54:       end

[Validate]