module Sass::Rails::SassImporter::Globbing

Constants

GLOB

Public Instance Methods

find(name, options) click to toggle source
Calls superclass method
# File lib/sass/rails/importer.rb, line 22
def find(name, options)
  # globs must be relative
  return if name =~ GLOB
  super
end
find_relative(name, base, options) click to toggle source
Calls superclass method
# File lib/sass/rails/importer.rb, line 12
def find_relative(name, base, options)
  if options[:sprockets] && m = name.match(GLOB)
    path = name.sub(m[0], "")
    base = File.expand_path(path, File.dirname(base))
    glob_imports(base, m[2], options)
  else
    super
  end
end

Private Instance Methods

each_globbed_file(base, glob, context) { |path| ... } click to toggle source
# File lib/sass/rails/importer.rb, line 44
def each_globbed_file(base, glob, context)
  raise ArgumentError unless glob == "*" || glob == "**/*"

  exts = extensions.keys.map { |ext| Regexp.escape(".#{ext}") }.join("|")
  sass_re = Regexp.compile("(#{exts})$")

  context.depend_on(base)

  Dir["#{base}/#{glob}"].sort.each do |path|
    if File.directory?(path)
      context.depend_on(path)
    elsif sass_re =~ path
      yield path
    end
  end
end
glob_imports(base, glob, options) click to toggle source
# File lib/sass/rails/importer.rb, line 29
def glob_imports(base, glob, options)
  contents = ""
  context = options[:sprockets][:context]
  each_globbed_file(base, glob, context) do |filename|
    next if filename == options[:filename]
    contents << "@import #{filename.inspect};\n"
  end
  return nil if contents == ""
  Sass::Engine.new(contents, options.merge(
    :filename => base,
    :importer => self,
    :syntax => :scss
  ))
end