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