class Kubes::Compiler::Strategy::Erb::YamlError

Public Class Methods

new(path, rendered_yaml) click to toggle source
# File lib/kubes/compiler/strategy/erb/yaml_error.rb, line 5
def initialize(path, rendered_yaml)
  @path, @rendered_yaml = path, rendered_yaml
end

Public Instance Methods

dest() click to toggle source
# File lib/kubes/compiler/strategy/erb/yaml_error.rb, line 15
def dest
  save_file = save_file(@path)
  "#{Kubes.root}/.kubes/output/#{save_file}"
end
handle_yaml_syntax_error(e, path) click to toggle source
# File lib/kubes/compiler/strategy/erb/yaml_error.rb, line 29
def handle_yaml_syntax_error(e, path)
  io = StringIO.new
  io.puts "Invalid yaml. Output written for debugging: #{path}".color(:red)
  io.puts "ERROR: #{e.message}".color(:red)

  # Grab line info.  Example error:
  #   ERROR: (<unknown>): could not find expected ':' while scanning a simple key at line 2 column 1
  md = e.message.match(/at line (\d+) column (\d+)/)
  line = md[1].to_i

  lines = IO.read(path).split("\n")
  context = 5 # lines of context
  top, bottom = [line-context-1, 0].max, line+context-1
  spacing = lines.size.to_s.size
  lines[top..bottom].each_with_index do |line_content, index|
    line_number = top+index+1
    if line_number == line
      io.printf("%#{spacing}d %s\n".color(:red), line_number, line_content)
    else
      io.printf("%#{spacing}d %s\n", line_number, line_content)
    end
  end

  if ENV['KUBES_TEST']
    io.string
  else
    puts io.string
    exit 1
  end
end
show() click to toggle source
# File lib/kubes/compiler/strategy/erb/yaml_error.rb, line 9
def show
  FileUtils.mkdir_p(File.dirname(dest))
  IO.write(dest, @rendered_yaml)
  show_error(dest)
end
show_error(path) click to toggle source
# File lib/kubes/compiler/strategy/erb/yaml_error.rb, line 20
def show_error(path)
  text = IO.read(path)
  begin
    YAML.load(text)
  rescue Psych::SyntaxError => e
    handle_yaml_syntax_error(e, path)
  end
end