module MenuTxt

Constants

BLANK_REGEXP
LINE_REGEXP
VERSION

Public Instance Methods

parse(io, root = SimpleNode.new(nil)) click to toggle source
# File lib/menu_txt.rb, line 15
def parse(io, root = SimpleNode.new(nil))
  current_node = root

  io.each_line do |line|
    next if BLANK_REGEXP === line
    indent, name, url = line.match(LINE_REGEXP).captures.map(&:strip)
    current_node_indent_size = current_node.level + 1

    if (indent.size - current_node_indent_size) > 1
      raise "Can only nest submenus 1 level at a time: (#{line})"
    elsif indent.size > current_node_indent_size
      current_node = current_node.children.last
      current_node.add_child(name, url)
    elsif indent.size < current_node_indent_size
      unindents_count = current_node_indent_size - indent.size
      unindents_count.times { current_node = current_node.parent }
      current_node.add_child(name, url)
    else
      current_node.add_child(name, url)
    end
  end

  root
end
parse_path(path, root = SimpleNode.new(nil)) click to toggle source
# File lib/menu_txt.rb, line 11
def parse_path(path, root = SimpleNode.new(nil))
  File.open(path, 'r') { |file| parse(file, root) }
end