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