class Searchr::ExplanationParser

Attributes

lines[R]

Public Class Methods

new(lines) click to toggle source
# File lib/searchr/explanation_parser.rb, line 7
def initialize(lines)
  @lines = lines.select{ |line| !line.empty? }.collect{ |line| ExplainLine.new line }
end

Public Instance Methods

explanation() click to toggle source
# File lib/searchr/explanation_parser.rb, line 11
def explanation
  Explanation.new top_node.simple_string, top_node.simple_json, top_node.simple_array
end
top_node() click to toggle source
# File lib/searchr/explanation_parser.rb, line 15
def top_node
  @top_node ||= scrunch
end

Private Instance Methods

bump_line() click to toggle source
# File lib/searchr/explanation_parser.rb, line 50
def bump_line
  @_line_num += 1
end
consume_subordinate_lines(node) click to toggle source
# File lib/searchr/explanation_parser.rb, line 58
def consume_subordinate_lines(node)
  current_line = line
  bump_line
  while !eof? and (line.indent_level==0 or current_line.indent_level<line.indent_level)
    node.add_line "#{'  '*[line.indent_level-current_line.indent_level,0].max}#{line.line}"
    bump_line
  end
end
eof?() click to toggle source
# File lib/searchr/explanation_parser.rb, line 54
def eof?
  @_line_num >= @lines.size
end
line() click to toggle source
# File lib/searchr/explanation_parser.rb, line 34
def line
  @lines[@_line_num]
end
parent_node() click to toggle source
# File lib/searchr/explanation_parser.rb, line 31
def parent_node
  @_nodes[line.indent_level - 1]
end
process_next_line() click to toggle source
# File lib/searchr/explanation_parser.rb, line 43
def process_next_line
  node = line.node parent_node
  set_current_node node, line.indent_level
  bump_line
  consume_subordinate_lines node if node.is_leaf
end
scrunch() click to toggle source
# File lib/searchr/explanation_parser.rb, line 21
def scrunch
  @_nodes = Array.new(20)
  @_nodes[0] = @lines[0].node(nil)
  @_node_depth = 0
  @_line_num = 1
  process_next_line until eof?

  return @_nodes[0]
end
set_current_node(node, depth) click to toggle source
# File lib/searchr/explanation_parser.rb, line 38
def set_current_node(node, depth)
  @_node_depth = depth
  @_nodes[depth] = node
end