class CommandList
Public Class Methods
new()
click to toggle source
# File libs/command_tree.rb, line 533 def initialize @cmd_tree={} end
Public Instance Methods
find_and_parse(str)
click to toggle source
# File libs/command_tree.rb, line 574 def find_and_parse(str) tokens=CommandTokenizer.new(str) token_items=tokens.length cur_node=@cmd_tree pos=tokens.walk(0) while !tokens.end?(pos) item=tokens[pos].value break if cur_node[item].nil? cur_node=cur_node[item] pos=tokens.walk(pos+1) end #tokens.each do |item| # if item.empty? || !item.scan(/^\s*$/).empty? # count+=1 # else # break if cur_node[item].nil? # count+=1 # cur_node=cur_node[item] # end #end raise InvalidCommand.new(str) if cur_node.nil? || !cur_node[:node] cmd=cur_node[:node] #params=str_array[count..str_array.length].join.strip debug(6,:msg=>"Tokens", :var=>tokens) debug(6,:msg=>"Pos", :var=>pos) # debug(6,:msg=>"Parsed", :var=>tokens.parse) params = tokens.drop(pos+1).join debug(6,:msg=>"Parameters", :var=>params) Cmd.new(cmd,params) end
get(path)
click to toggle source
# File libs/command_tree.rb, line 558 def get(path) path=setup_path(path) cur_node=@cmd_tree count=0 path.collect do |item| break if cur_node[item].nil? count+=1 cur_node=cur_node[item] end cmd=cur_node.nil? ? nil : cur_node[:node] end
get_command_list(tree=nil)
click to toggle source
# File libs/command_tree.rb, line 615 def get_command_list(tree=nil) def get_subtree(tree) tmp=tree.dup path=nil if !tmp[:node].nil? path=tree[:node].path.join(" ") tmp.delete(:node) end tree=tmp if tree.empty? return path if !path.nil? return nil end results=tree.keys.sort.map {|key| get_subtree(tree[key]) } [path,results] end get_subtree(@cmd_tree).flatten.compact.sort end
get_subtree(tree)
click to toggle source
# File libs/command_tree.rb, line 616 def get_subtree(tree) tmp=tree.dup path=nil if !tmp[:node].nil? path=tree[:node].path.join(" ") tmp.delete(:node) end tree=tmp if tree.empty? return path if !path.nil? return nil end results=tree.keys.sort.map {|key| get_subtree(tree[key]) } [path,results] end
insert(insert_path, cmd_obj)
click to toggle source
# File libs/command_tree.rb, line 537 def insert(insert_path, cmd_obj) raise "Insert_path must be an array" if insert_path.class!=Array tree_node=@cmd_tree path_length=insert_path.length-1 insert_path.each_index do |index| if tree_node[insert_path[index]].nil? if index<path_length tree_node[insert_path[index]]={} tree_node=tree_node[insert_path[index]] else tree_node[insert_path[index]]={:node=>cmd_obj} end else tree_node=tree_node[insert_path[index]] end end (0..(cmd_obj.alias_total-1)).each {|i| insert(cmd_obj.aliases[i],cmd_obj.generate_alias(i))} if cmd_obj.alias_total>0 end
Private Instance Methods
setup_path(path)
click to toggle source
# File libs/command_tree.rb, line 640 def setup_path(path) if path.class==Array path elsif path.class==String path.split2 else raise "Path must be Array or string" end end