Class: Sass::Exec::Base
- Inherits:
- Object
- Object
- Sass::Exec::Base
- Defined in:
- /Users/ceppstei/Projects/sass-lang/.sass/lib/sass/exec/base.rb
Overview
The abstract base class for Sass executables.
Direct Known Subclasses
Constant Summary
Instance Method Summary (collapse)
- - (String) color(color, str) protected
Wraps the given string in terminal escapes causing it to have the given color.
- - encoding_option(opts) protected
Set an option for specifying
Encoding.default_external
. - - (String) get_line(exception) protected
Finds the line of the source template on which an exception was raised.
- - (Base) initialize(args) constructor
A new instance of Base.
- - parse
Parses the command-line arguments and runs the executable.
- - parse!
Parses the command-line arguments and runs the executable.
- - process_result protected
Processes the options set by the command-line arguments.
- - puts(*args) protected
Same as
Kernel.puts
, but doesn’t print anything if the--quiet
option is set. - - puts_action(name, color, arg) protected
Prints a status message about performing the given action, colored using the given color (via terminal escapes) if possible.
- - set_opts(opts) protected
Tells optparse how to parse the arguments available for all executables.
- - (String) to_s
A description of the executable.
- - write_output(text, destination) protected
Constructor Details
- (Base) initialize(args)
Returns a new instance of Base
7 8 9 10 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/exec/base.rb', line 7
def initialize(args)
@args = args
@options = {}
end |
Instance Method Details
- (String) color(color, str) (protected)
Wraps the given string in terminal escapes causing it to have the given color. If terminal escapes aren’t supported on this platform, just returns the string instead.
159 160 161 162 163 164 165 166 167 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/exec/base.rb', line 159
def color(color, str)
raise "[BUG] Unrecognized color #{color}" unless COLORS[color]
# Almost any real Unix terminal will support color,
# so we just filter for Windows terms (which don't set TERM)
# and not-real terminals, which aren't ttys.
return str if ENV["TERM"].nil? || ENV["TERM"].empty? || !STDOUT.tty?
"\e[#{COLORS[color]}m#{str}\e[0m"
end |
- encoding_option(opts) (protected)
Set an option for specifying Encoding.default_external
.
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/exec/base.rb', line 92
def encoding_option(opts)
encoding_desc = if Sass::Util.ruby1_8?
'Does not work in Ruby 1.8.'
else
'Specify the default encoding for input files.'
end
opts.on('-E', '--default-encoding ENCODING', encoding_desc) do |encoding|
if Sass::Util.ruby1_8?
$stderr.puts "Specifying the encoding is not supported in ruby 1.8."
exit 1
else
Encoding.default_external = encoding
end
end
end |
- (String) get_line(exception) (protected)
Finds the line of the source template on which an exception was raised.
69 70 71 72 73 74 75 76 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/exec/base.rb', line 69
def get_line(exception)
# SyntaxErrors have weird line reporting
# when there's trailing whitespace
if exception.is_a?(::SyntaxError)
return (exception.message.scan(/:(\d+)/).first || ["??"]).first
end
(exception.backtrace[0].scan(/:(\d+)/).first || ["??"]).first
end |
- parse
Parses the command-line arguments and runs the executable. This does not handle exceptions or exit the program.
48 49 50 51 52 53 54 55 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/exec/base.rb', line 48
def parse
@opts = OptionParser.new(&method(:set_opts))
@opts.parse!(@args)
process_result
@options
end |
- parse!
Parses the command-line arguments and runs the executable. Calls Kernel#exit
at the end, so it never returns.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/exec/base.rb', line 16
def parse!
# rubocop:disable RescueException
begin
parse
rescue Exception => e
# Exit code 65 indicates invalid data per
# http://www.freebsd.org/cgi/man.cgi?query=sysexits. Setting it via
# at_exit is a bit of a hack, but it allows us to rethrow when --trace
# is active and get both the built-in exception formatting and the
# correct exit code.
at_exit {exit 65} if e.is_a?(Sass::SyntaxError)
raise e if @options[:trace] || e.is_a?(SystemExit)
if e.is_a?(Sass::SyntaxError)
$stderr.puts e.sass_backtrace_str("standard input")
else
$stderr.print "#{e.class}: " unless e.class == RuntimeError
$stderr.puts e.message.to_s
end
$stderr.puts " Use --trace for backtrace."
exit 1
end
exit 0
# rubocop:enable RescueException
end |
- process_result (protected)
Processes the options set by the command-line arguments. In particular, sets @options[:input]
and @options[:output]
to appropriate IO streams.
This is meant to be overridden by subclasses so they can run their respective programs.
113 114 115 116 117 118 119 120 121 122 123 124 125 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/exec/base.rb', line 113
def process_result
input, output = @options[:input], @options[:output]
args = @args.dup
input ||=
begin
filename = args.shift
@options[:filename] = filename
open_file(filename) || $stdin
end
@options[:output_filename] = args.shift
output ||= @options[:output_filename] || $stdout
@options[:input], @options[:output] = input, output
end |
- puts(*args) (protected)
Same as Kernel.puts
, but doesn’t print anything if the --quiet
option is set.
145 146 147 148 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/exec/base.rb', line 145
def puts(*args)
return if @options[:for_engine][:quiet]
Kernel.puts(*args)
end |
- puts_action(name, color, arg) (protected)
Prints a status message about performing the given action, colored using the given color (via terminal escapes) if possible.
136 137 138 139 140 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/exec/base.rb', line 136
def puts_action(name, color, arg)
return if @options[:for_engine][:quiet]
printf color(color, "%11s %s\n"), name, arg
STDOUT.flush
end |
- set_opts(opts) (protected)
Tells optparse how to parse the arguments available for all executables.
This is meant to be overridden by subclasses so they can add their own options.
85 86 87 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/exec/base.rb', line 85
def set_opts(opts)
Sass::Util.abstract(this)
end |
- (String) to_s
Returns A description of the executable
58 59 60 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/exec/base.rb', line 58
def to_s
@opts.to_s
end |
- write_output(text, destination) (protected)
169 170 171 172 173 174 175 | # File '/Users/ceppstei/Projects/sass-lang/.sass/lib/sass/exec/base.rb', line 169
def write_output(text, destination)
if destination.is_a?(String)
open_file(destination, 'w') {|file| file.write(text)}
else
destination.write(text)
end
end |