class Scad4r::ResultParser

Public Instance Methods

parse(result) click to toggle source
# File lib/scad4r/result_parser.rb, line 3
def parse(result)
  parse_timings(result).merge(parse_messages(result))
end

Protected Instance Methods

extract_echos(result) click to toggle source
# File lib/scad4r/result_parser.rb, line 26
def extract_echos(result)
  find_messages(result, "ECHO")
end
extract_warnings(result) click to toggle source
# File lib/scad4r/result_parser.rb, line 22
def extract_warnings(result)
  find_messages(result, "WARNING")
end
parse_messages(result) click to toggle source
# File lib/scad4r/result_parser.rb, line 8
def parse_messages(result)
  case result
  when %r{Parser error in line (\d+): (.*)$}
    {error: "#{$2} line #{$1}"}
  when %r{Object isn't}
    {error: result}
  when %r{WARNING:}, %r{ECHO:}
    { warnings: extract_warnings(result),
      echos: extract_echos(result)}
  else
    {}
  end
end
parse_timings(result) click to toggle source
# File lib/scad4r/result_parser.rb, line 30
def parse_timings(result)
  {real: extract_time(result, :real),
    user: extract_time(result, :user),
    sys: extract_time(result, :sys)
  }
end

Private Instance Methods

extract_time(result, type) click to toggle source
# File lib/scad4r/result_parser.rb, line 50
def extract_time(result, type)
  if matching = result.match(/([\d\.]+) #{type}/)
    matching[1]
  end
end
find_messages(result, message) click to toggle source
# File lib/scad4r/result_parser.rb, line 39
def find_messages(result, message)
  found_messages = []
  message_regexp = /^#{message}: ([^\n]*)$/m
  scanner = StringScanner.new(result)
  while message = scanner.scan_until(message_regexp)
    found_messages << scanner.matched.match(message_regexp)[1]
  end

  found_messages
end