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