class Sprockets::Sass::SassTemplate

Attributes

sass_functions_initialized[RW]
sass_functions_initialized?[RW]
context[R]

A reference to the current Sprockets context

Public Class Methods

engine_initialized?() click to toggle source

Templates are initialized once the functions are added.

Calls superclass method
# File lib/sprockets/sass/sass_template.rb, line 19
def engine_initialized?
  super && sass_functions_initialized?
end

Public Instance Methods

evaluate(context, locals, &block) click to toggle source

See `Tilt::Template#evaluate`.

# File lib/sprockets/sass/sass_template.rb, line 50
def evaluate(context, locals, &block)
  @output ||= begin
    @context = context
    ::Sass::Engine.new(data, sass_options).render
  rescue ::Sass::SyntaxError => e
    # Annotates exception message with parse line number
    context.__LINE__ = e.sass_backtrace.first[:line]
    raise e
  end
end
initialize_engine() click to toggle source

Add the Sass functions if they haven't already been added.

Calls superclass method
# File lib/sprockets/sass/sass_template.rb, line 25
def initialize_engine
  super unless self.class.superclass.engine_initialized?

  if Sass.add_sass_functions != false
    begin
      require 'sprockets/helpers'
      require 'sprockets/sass/functions'
    rescue LoadError; end
  end

  self.class.sass_functions_initialized = true
end
prepare() click to toggle source

See `Tilt::Template#prepare`.

# File lib/sprockets/sass/sass_template.rb, line 44
def prepare
  @context = nil
  @output  = nil
end
syntax() click to toggle source

Define the expected syntax for the template

# File lib/sprockets/sass/sass_template.rb, line 39
def syntax
  :sass
end

Protected Instance Methods

cache_store() click to toggle source

Returns a Sprockets-aware cache store for Sass::Engine.

# File lib/sprockets/sass/sass_template.rb, line 64
def cache_store
  return nil if context.environment.cache.nil?

  if defined?(Sprockets::SassCacheStore)
    Sprockets::SassCacheStore.new context.environment
  else
    CacheStore.new context.environment
  end
end
default_sass_options() click to toggle source

Get the default, global Sass options. Start with Compass's options, if it's available.

# File lib/sprockets/sass/sass_template.rb, line 97
def default_sass_options
  if defined?(Compass)
    merge_sass_options Compass.sass_engine_options.dup, Sprockets::Sass.options
  else
    Sprockets::Sass.options.dup
  end
end
merge_sass_options(options, other_options) click to toggle source

Merges two sets of `Sass::Engine` options, prepending the `:load_paths` instead of clobbering them.

# File lib/sprockets/sass/sass_template.rb, line 107
def merge_sass_options(options, other_options)
  if (load_paths = options[:load_paths]) && (other_paths = other_options[:load_paths])
    other_options[:load_paths] = other_paths + load_paths
  end
  options.merge other_options
end
sass_options() click to toggle source

Assemble the options for the `Sass::Engine`

# File lib/sprockets/sass/sass_template.rb, line 75
def sass_options
  # Allow the use of custom SASS importers, making sure the
  # custom importer is a `Sprockets::Sass::Importer`
  if default_sass_options.has_key?(:importer) &&
     default_sass_options[:importer].is_a?(Importer)
    importer = default_sass_options[:importer]
  else
    importer = Importer.new
  end

  merge_sass_options(default_sass_options, options).merge(
    :filename    => eval_file,
    :line        => line,
    :syntax      => syntax,
    :cache_store => cache_store,
    :importer    => importer,
    :custom      => { :sprockets_context => context }
  )
end