class Sprockets::SassImporter

Constants

GLOB

Attributes

context[R]

Public Class Methods

new(context, root) click to toggle source
Calls superclass method
# File lib/sass/rails/importer.rb, line 11
def initialize(context, root)
  @context = context
  super root.to_s
end

Public Instance Methods

each_globbed_file(glob, base_pathname, options) { |filename| ... } click to toggle source
# File lib/sass/rails/importer.rb, line 45
def each_globbed_file(glob, base_pathname, options)
  Dir["#{base_pathname}/#{glob}"].sort.each do |filename|
    next if filename == options[:filename]
    yield filename if File.directory?(filename) || context.asset_requirable?(filename)
  end
end
extensions() click to toggle source
Calls superclass method
# File lib/sass/rails/importer.rb, line 16
def extensions
  {
    'css'          => :scss,
    'css.scss'     => :scss,
    'css.sass'     => :sass,
    'css.erb'      => :scss,
    'scss.erb'     => :scss,
    'sass.erb'     => :sass,
    'css.scss.erb' => :scss,
    'css.sass.erb' => :sass
  }.merge!(super)
end
find(name, options) click to toggle source
# File lib/sass/rails/importer.rb, line 37
def find(name, options)
  if name =~ GLOB
    nil # globs must be relative
  else
    engine_from_path(name, root, options)
  end
end
find_relative(name, base, options) click to toggle source
# File lib/sass/rails/importer.rb, line 29
def find_relative(name, base, options)
  if name =~ GLOB
    glob_imports(name, Pathname.new(base), options)
  else
    engine_from_path(name, File.dirname(base), options)
  end
end
glob_imports(glob, base_pathname, options) click to toggle source
# File lib/sass/rails/importer.rb, line 52
def glob_imports(glob, base_pathname, options)
  contents = ""
  each_globbed_file(glob, base_pathname.dirname, options) do |filename|
    if File.directory?(filename)
      depend_on(filename)
    elsif context.asset_requirable?(filename)
      depend_on(filename)
      contents << "@import #{Pathname.new(filename).relative_path_from(base_pathname.dirname).to_s.inspect};\n"
    end
  end
  return nil if contents.empty?
  Sass::Engine.new(contents, options.merge(
    :filename => base_pathname.to_s,
    :importer => self,
    :syntax => :scss
  ))
end

Private Instance Methods

depend_on(filename) click to toggle source
# File lib/sass/rails/importer.rb, line 72
def depend_on(filename)
  context.depend_on(filename)
  context.depend_on(globbed_file_parent(filename))
end
engine_from_path(name, dir, options) click to toggle source
# File lib/sass/rails/importer.rb, line 85
def engine_from_path(name, dir, options)
  full_filename, syntax = Sass::Util.destructure(find_real_file(dir, name, options))
  return unless full_filename && File.readable?(full_filename)

  engine = Sass::Engine.new(evaluate(full_filename), options.merge(
    syntax: syntax,
    filename: full_filename,
    importer: self
  ))

  if engine && (filename = engine.options[:filename])
    @context.depend_on(filename)
  end

  engine
end
evaluate(filename) click to toggle source
# File lib/sass/rails/importer.rb, line 102
def evaluate(filename)
  attributes = context.environment.attributes_for(filename)
  processors = context.environment.preprocessors(attributes.content_type) +
    attributes.engines.reverse - [Sprockets::ScssTemplate, Sprockets::SassTemplate]

  context.evaluate(filename, processors: processors)
end
globbed_file_parent(filename) click to toggle source
# File lib/sass/rails/importer.rb, line 77
def globbed_file_parent(filename)
  if File.directory?(filename)
    File.expand_path('..', filename)
  else
    File.dirname(filename)
  end
end