Class: Haml::Exec::Generic

### Home Classes Methods

### In Files

- lib/haml/exec.rb

### Parent

Object

### Methods

- ::new
- #color
- #get_line
- #parse
- #parse!
- #process_result
- #puts
- #puts_action
- #set_opts
- #to_s

### Class/Module Index

Quicksearch

- Haml
- Haml::Buffer
- Haml::Compiler
- Haml::Engine
- Haml::Error
- Haml::ErubisTemplateHandler
- Haml::Exec
- Haml::Exec::Generic
- Haml::Exec::Haml
- Haml::Filters
- Haml::Filters::Base
- Haml::Filters::Cdata
- Haml::Filters::Css
- Haml::Filters::Erb
- Haml::Filters::Escaped
- Haml::Filters::Javascript
- Haml::Filters::Plain
- Haml::Filters::PrecompiledTiltFilter
- Haml::Filters::Preserve
- Haml::Filters::Ruby
- Haml::Filters::SassRailsTemplate
- Haml::Filters::ScssRailsTemplate
- Haml::Filters::TiltFilter
- Haml::Helpers
- Haml::Helpers::ActionViewExtensions
- Haml::Helpers::ErrorReturn
- Haml::Helpers::XssMods
- Haml::Options
- Haml::Parser
- Haml::Parser::Line
- Haml::Parser::ParseNode
- Haml::Plugin
- Haml::Railtie
- Haml::SafeErubisTemplate
- Haml::SyntaxError
- Haml::Template
- Haml::Util
- Haml::Util::StaticConditionalContext
- ActionView
- ActionView::Base
- ActionView::Helpers
- ActionView::Helpers::CaptureHelper
- ActionView::Helpers::FormHelper
- ActionView::Helpers::FormTagHelper
- ActionView::Helpers::HamlSupport
- ActionView::Helpers::InstanceTag
- ActionView::Helpers::TagHelper
- ActionView::Helpers::Tags
- ActionView::Helpers::Tags::TextArea
- ActionView::Helpers::TextHelper
- Object

No matching classes.

# Haml::Exec::Generic

An abstract class that encapsulates the executable code for all three executables.

### Constants

COLORS

### Public Class Methods

new(args) click to toggle source

@param args [Array<String>] The command-line arguments

    # File lib/haml/exec.rb, line 12
    def initialize(args)
      @args = args
      @options = {:for_engine => {}}
    end

### Public Instance Methods

parse() click to toggle source

Parses the command-line arguments and runs the executable. This does not handle exceptions or exit the program.

@see parse!

    # File lib/haml/exec.rb, line 39
    def parse
      @opts = OptionParser.new(&method(:set_opts))
      @opts.parse!(@args)

      process_result

      @options
    end

parse!() click to toggle source

Parses the command-line arguments and runs the executable. Calls `Kernel#exit` at the end, so it never returns.

@see parse

    # File lib/haml/exec.rb, line 21
    def parse!
      begin
        parse
      rescue Exception => e
        raise e if @options[:trace] || e.is_a?(SystemExit)

        $stderr.print "#{e.class}: " unless e.class == RuntimeError
        $stderr.puts "#{e.message}"
        $stderr.puts "  Use --trace for backtrace."
        exit 1
      end
      exit 0
    end

to_s() click to toggle source

@return [String] A description of the executable

    # File lib/haml/exec.rb, line 49
    def to_s
      @opts.to_s
    end

### Protected Instance Methods

color(color, str) click to toggle source

Wraps the given string in terminal escapes causing it to have the given color. If terminal esapes aren't supported on this platform, just returns the string instead.

@param color [Symbol] The name of the color to use.

    Can be `:red`, `:green`, or `:yellow`.

@param str [String] The string to wrap in the given color. @return [String] The wrapped string.

    # File lib/haml/exec.rb, line 154
    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?
      return "\e[#{COLORS[color]}m#{str}\e[0m"
    end

get_line(exception) click to toggle source

Finds the line of the source template on which an exception was raised.

@param exception [Exception] The exception @return [String] The line number

    # File lib/haml/exec.rb, line 60
    def get_line(exception)
      # SyntaxErrors have weird line reporting
      # when there's trailing whitespace,
      # which there is for Haml documents.
      return (exception.message.scan(/:(\d+)/).first || ["??"]).first if exception.is_a?(::SyntaxError)
      (exception.backtrace[0].scan(/:(\d+)/).first || ["??"]).first
    end

process_result() click to toggle source

Processes the options set by the command-line arguments. In particular, sets `@options` and `@options` to appropriate IO streams.

This is meant to be overridden by subclasses so they can run their respective programs.

    # File lib/haml/exec.rb, line 109
    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
      output ||= open_file(args.shift, 'w') || $stdout

      @options[:input], @options[:output] = input, output
    end

puts(*args) click to toggle source

Same as `Kernel.puts`, but doesn't print anything if the `--quiet` option is set.

@param args [Array] Passed on to `Kernel.puts`

    # File lib/haml/exec.rb, line 140
    def puts(*args)
      return if @options[:for_engine][:quiet]
      Kernel.puts(*args)
    end

puts_action(name, color, arg) click to toggle source

Prints a status message about performing the given action, colored using the given color (via terminal escapes) if possible.

@param name [to_s] A short name for the action being performed.

    Shouldn't be longer than 11 characters.

@param color [Symbol] The name of the color to use for this action.

    Can be `:red`, `:green`, or `:yellow`.

    # File lib/haml/exec.rb, line 132
    def puts_action(name, color, arg)
      return if @options[:for_engine][:quiet]
      printf color(color, "%11s %s\n"), name, arg
    end

set_opts(opts) click to toggle source

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.

@param opts [OptionParser]

    # File lib/haml/exec.rb, line 75
    def set_opts(opts)
      opts.on('-s', '--stdin', :NONE, 'Read input from standard input instead of an input file') do
        @options[:input] = $stdin
      end

      opts.on('--trace', :NONE, 'Show a full traceback on error') do
        @options[:trace] = true
      end

      opts.on('--unix-newlines', 'Use Unix-style newlines in written files.') do
        # Note that this is the preferred way to check for Windows, since
        # JRuby and Rubinius also run there.
        if RbConfig::CONFIG['host_os'] =~ /mswin|windows|mingw/
          @options[:unix_newlines] = true
        end
      end

      opts.on_tail("-?", "-h", "--help", "Show this message") do
        puts opts
        exit
      end

      opts.on_tail("-v", "--version", "Print version") do
        puts("Haml #{::Haml::VERSION}")
        exit
      end
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.