class SassC::Rails::Importer

Constants

EXTENSIONS
GLOB
PREFIXS

Public Instance Methods

imports(path, parent_path) click to toggle source
# File lib/sassc/rails/importer.rb, line 88
def imports(path, parent_path)
  parent_dir, _ = File.split(parent_path)
  specified_dir, specified_file = File.split(path)

  if m = path.match(GLOB)
    path = path.sub(m[0], "")
    base = File.expand_path(path, File.dirname(parent_path))
    return glob_imports(base, m[2], parent_path)
  end

  search_paths = ([parent_dir] + load_paths).uniq

  if specified_dir != "."
    search_paths.map! do |path|
      File.join(path, specified_dir)
    end
    search_paths.select! do |path|
      File.directory?(path)
    end
  end

  search_paths.each do |search_path|
    PREFIXS.each do |prefix|
      file_name = prefix + specified_file

      EXTENSIONS.each do |extension|
        try_path = File.join(search_path, file_name + extension.postfix)
        if File.exist?(try_path)
          record_import_as_dependency try_path
          return extension.import_for(try_path, parent_dir, options)
        end
      end
    end
  end

  SassC::Importer::Import.new(path)
end

Private Instance Methods

context() click to toggle source
# File lib/sassc/rails/importer.rb, line 138
def context
  options[:sprockets][:context]
end
extension_for_file(file) click to toggle source
# File lib/sassc/rails/importer.rb, line 128
def extension_for_file(file)
  EXTENSIONS.detect do |extension|
    file.include? extension.postfix
  end
end
glob_imports(base, glob, current_file) click to toggle source
# File lib/sassc/rails/importer.rb, line 146
def glob_imports(base, glob, current_file)
  files = globbed_files(base, glob)
  files = files.reject { |f| f == current_file }

  files.map do |filename|
    record_import_as_dependency(filename)
    extension = extension_for_file(filename)
    extension.import_for(filename, base, options)
  end
end
globbed_files(base, glob) click to toggle source
# File lib/sassc/rails/importer.rb, line 157
def globbed_files(base, glob)
  # TODO: Raise an error from SassC here
  raise ArgumentError unless glob == "*" || glob == "**/*"

  extensions = EXTENSIONS.map(&:postfix)
  exts = extensions.map { |ext| Regexp.escape("#{ext}") }.join("|")
  sass_re = Regexp.compile("(#{exts})$")

  record_import_as_dependency(base)

  files = Dir["#{base}/#{glob}"].sort.map do |path|
    if File.directory?(path)
      record_import_as_dependency(path)
      nil
    elsif sass_re =~ path
      path
    end
  end

  files.compact
end
load_paths() click to toggle source
# File lib/sassc/rails/importer.rb, line 142
def load_paths
  options[:load_paths]
end
record_import_as_dependency(path) click to toggle source
# File lib/sassc/rails/importer.rb, line 134
def record_import_as_dependency(path)
  context.depend_on path
end