Class: Haml::Exec::Sass

Inherits:
HamlSass show all
Defined in:
lib/haml/exec.rb

Overview

A class encapsulating executable functionality specific to Sass.

Instance Method Summary collapse

Methods inherited from Generic

#parse!, #to_s

Constructor Details

#initialize(args) ⇒ Sass

:nodoc:



168
169
170
171
172
# File 'lib/haml/exec.rb', line 168

def initialize(args)
  super
  @name = "Sass"
  @options[:for_engine][:load_paths] = ['.'] + (ENV['SASSPATH'] || '').split(File::PATH_SEPARATOR)
end

Instance Method Details

#process_resultObject



194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
# File 'lib/haml/exec.rb', line 194

def process_result
  if @options[:interactive]
    require 'sass'
    require 'sass/repl'
    ::Sass::Repl.run
    return
  end

  super
  input = @options[:input]
  output = @options[:output]

  template = input.read()
  input.close() if input.is_a? File

  begin
    # We don't need to do any special handling of @options[:check_syntax] here,
    # because the Sass syntax checking happens alongside evaluation
    # and evaluation doesn't actually evaluate any code anyway.
    result = ::Sass::Engine.new(template, @options[:for_engine]).render
  rescue ::Sass::SyntaxError => e
    raise e if @options[:trace]
    raise "Syntax error on line #{get_line e}: #{e.message}"
  end

  output.write(result)
  output.close() if output.is_a? File
end

#set_opts(opts) ⇒ Object



174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
# File 'lib/haml/exec.rb', line 174

def set_opts(opts)
  super

  opts.on('-t', '--style NAME',
          'Output style. Can be nested (default), compact, compressed, or expanded.') do |name|
    @options[:for_engine][:style] = name.to_sym
  end
  opts.on('-l', '--line-comments',
          'Line Comments. Emit comments in the generated CSS indicating the corresponding sass line.') do
    @options[:for_engine][:line_comments] = true
  end
  opts.on('-i', '--interactive',
          'Run an interactive SassScript shell.') do
    @options[:interactive] = true
  end
  opts.on('-I', '--load-path PATH', 'Add a sass import path.') do |path|
    @options[:for_engine][:load_paths] << path
  end
end