class Haml::CLI

Public Instance Methods

compile(file) click to toggle source
# File lib/haml/cli.rb, line 23
def compile(file)
  code = generate_code(file)
  if options[:check]
    if error = validate_ruby(code, file)
      abort error.message.split("\n").first
    end
    puts "Syntax OK"
    return
  end
  puts_code(code, color: options[:color])
end
parse(file) click to toggle source
# File lib/haml/cli.rb, line 43
def parse(file)
  pp_object(generate_ast(file), color: options[:color])
end
render(file) click to toggle source
# File lib/haml/cli.rb, line 13
def render(file)
  process_load_options
  code = generate_code(file)
  puts eval(code, binding, file)
end
temple(file) click to toggle source
# File lib/haml/cli.rb, line 37
def temple(file)
  pp_object(generate_temple(file), color: options[:color])
end
version() click to toggle source
# File lib/haml/cli.rb, line 48
def version
  puts Haml::VERSION
end

Private Instance Methods

engine_options() click to toggle source
# File lib/haml/cli.rb, line 105
def engine_options
  Haml::Engine.options.to_h.merge(
    escape_attrs: options[:escape_attrs],
    escape_html:  options[:escape_html],
  )
end
generate_ast(file) click to toggle source
# File lib/haml/cli.rb, line 95
def generate_ast(file)
  template = read_file(file)
  Haml::Parser.new(engine_options).call(template)
end
generate_code(file) click to toggle source
# File lib/haml/cli.rb, line 74
    def generate_code(file)
      template = read_file(file)
      if options[:actionview]
        require 'action_view'
        require 'action_view/base'
        require 'haml/rails_template'
        handler = Haml::RailsTemplate.new
        template = ActionView::Template.new(template, 'inline template', handler, { locals: [] })
        code = handler.call(template)
        <<-end_src
          def _inline_template___2144273726781623612_70327218547300(local_assigns, output_buffer)
            _old_virtual_path, @virtual_path = @virtual_path, nil;_old_output_buffer = @output_buffer;;#{code}
          ensure
            @virtual_path, @output_buffer = _old_virtual_path, _old_output_buffer
          end
        end_src
      else
        Haml::Engine.new(engine_options).call(template)
      end
    end
generate_temple(file) click to toggle source
# File lib/haml/cli.rb, line 100
def generate_temple(file)
  ast = generate_ast(file)
  Haml::Compiler.new(engine_options).call(ast)
end
method_missing(*args) click to toggle source

Flexible default_task, compatible with haml’s CLI

Calls superclass method
# File lib/haml/cli.rb, line 113
def method_missing(*args)
  return super(*args) if args.length > 1
  render(args.first.to_s)
end
pp_object(arg, color: true) click to toggle source

Enable colored pretty printing only for development environment.

# File lib/haml/cli.rb, line 132
def pp_object(arg, color: true)
  begin
    require 'irb/color_printer'
  rescue LoadError
    color = false
  end
  if color
    IRB::ColorPrinter.pp(arg)
  else
    require 'pp'
    pp(arg)
  end
end
process_load_options() click to toggle source
# File lib/haml/cli.rb, line 54
def process_load_options
  if options[:load_path]
    options[:load_path].split(':').each do |dir|
      $LOAD_PATH.unshift(dir) unless $LOAD_PATH.include?(dir)
    end
  end

  if options[:require]
    require options[:require]
  end
end
puts_code(code, color: true) click to toggle source
# File lib/haml/cli.rb, line 118
def puts_code(code, color: true)
  begin
    require 'irb/color'
  rescue LoadError
    color = false
  end
  if color
    puts IRB::Color.colorize_code(code)
  else
    puts code
  end
end
read_file(file) click to toggle source
# File lib/haml/cli.rb, line 66
def read_file(file)
  if file == '-'
    STDIN.read
  else
    File.read(file)
  end
end
validate_ruby(code, file) click to toggle source
# File lib/haml/cli.rb, line 146
def validate_ruby(code, file)
  begin
    eval("BEGIN {return nil}; #{code}", binding, file)
  rescue ::SyntaxError # Not to be confused with Haml::SyntaxError
    $!
  end
end