module Compass::ImportOnce::Importer

Any importer object that is extended with this module will get the import once behavior.

Public Instance Methods

find(uri, options, *args) click to toggle source
Calls superclass method
# File lib/compass/import-once/importer.rb, line 10
def find(uri, options, *args)
  uri, force_import = handle_force_import(uri)
  maybe_replace_with_dummy_engine(super(uri, options, *args), options, force_import)
end
find_relative(uri, base, options, *args) click to toggle source
Calls superclass method
# File lib/compass/import-once/importer.rb, line 5
def find_relative(uri, base, options, *args)
  uri, force_import = handle_force_import(uri)
  maybe_replace_with_dummy_engine(super(uri, base, options, *args), options, force_import)
end
key(uri, options, *args) click to toggle source
Calls superclass method
# File lib/compass/import-once/importer.rb, line 15
def key(uri, options, *args)
  if uri =~ /^\(NOT IMPORTED\) (.*)$/
    ["(import-once)", $1]
  else
    super
  end
end
mtime(uri, options, *args) click to toggle source
Calls superclass method
# File lib/compass/import-once/importer.rb, line 23
def mtime(uri, options, *args)
  if uri =~ /^\(NOT IMPORTED\) (.*)$/
    File.mtime($1) if File.exist?($1)
  else
    super
  end
end

Protected Instance Methods

dummy_engine(engine, options) click to toggle source
# File lib/compass/import-once/importer.rb, line 67
def dummy_engine(engine, options)
  new_options = engine.options.merge(:filename => "(NOT IMPORTED) #{engine.options[:filename]}" )
  Sass::Engine.new("", new_options)
end
handle_force_import(uri) click to toggle source

any uri that ends with an exclamation mark will be forced to import

# File lib/compass/import-once/importer.rb, line 34
def handle_force_import(uri)
  if uri.end_with?("!")
    [uri[0...-1], true]
  else
    [uri, false]
  end
end
import_tracker_key(engine, options) click to toggle source
# File lib/compass/import-once/importer.rb, line 63
def import_tracker_key(engine, options)
  normalize_filesystem_importers(key(engine.options[:filename], options)).join("|").freeze
end
imported!(engine, options) click to toggle source
# File lib/compass/import-once/importer.rb, line 76
def imported!(engine, options)
  tracker(options) << import_tracker_key(engine, options)
end
imported?(engine, options) click to toggle source
# File lib/compass/import-once/importer.rb, line 72
def imported?(engine, options)
  tracker(options).include?(import_tracker_key(engine, options))
end
maybe_replace_with_dummy_engine(engine, options, force_import) click to toggle source
# File lib/compass/import-once/importer.rb, line 42
def maybe_replace_with_dummy_engine(engine, options, force_import)
  if engine && !force_import && imported?(engine, options)
    engine = dummy_engine(engine, options)
  elsif engine
    imported!(engine, options)
  end
  engine
end
normalize_filesystem_importers(key) click to toggle source

Giant hack to support sass-globbing. Need to find a better fix.

# File lib/compass/import-once/importer.rb, line 57
def normalize_filesystem_importers(key)
  key.map do |part|
    part.sub(/Glob:/, 'Sass::Importers::Filesystem:')
  end
end
tracker(options) click to toggle source
# File lib/compass/import-once/importer.rb, line 51
def tracker(options)
   Compass::ImportOnce.import_tracker[options[:css_filename]] ||= Set.new
end