Class: JinyuDebugTools::CodeParser::CodeTree
- Inherits:
-
Object
- Object
- JinyuDebugTools::CodeParser::CodeTree
- Defined in:
- lib/utils/code_parser.rb
Constant Summary collapse
- ROOT_NAME =
'JiNyUsUpErNoDe'
Instance Method Summary collapse
- #_find_mistab_nodes(parent_node_index, child_level) ⇒ Object
- #_find_parent_with_index(parent_name) ⇒ Object
- #add_record(parent_name, child_name) ⇒ Object
- #get_reverse_index(index) ⇒ Object
-
#initialize ⇒ CodeTree
constructor
A new instance of CodeTree.
- #my_pretty_print ⇒ Object
- #to_hash ⇒ Object
Constructor Details
#initialize ⇒ CodeTree
Returns a new instance of CodeTree.
63 64 65 66 67 68 |
# File 'lib/utils/code_parser.rb', line 63 def initialize @root = CodeNode.new(ROOT_NAME).tap { |node| node.set_level(0) } @node_level_list = [] @node_level_list << [@root, @root.get_level] @root.set_index(@node_level_list.size - 1) end |
Instance Method Details
#_find_mistab_nodes(parent_node_index, child_level) ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/utils/code_parser.rb', line 125 def _find_mistab_nodes(parent_node_index, child_level) # ... because, the father node which attached on root directly like new # would match this situation, parent is root and level < child_level mistab_nodes = @node_level_list[parent_node_index...-1].select do |node, level| next false if node.get_parent != @root next false if node.get_level >= child_level true end return mistab_nodes end |
#_find_parent_with_index(parent_name) ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/utils/code_parser.rb', line 98 def _find_parent_with_index(parent_name) if parent_name == @root.get_name return @root, @root.get_index end target_index_reverse = @node_level_list.size - 1 node_level_list_reverse = @node_level_list.reverse node_level_list_reverse.each_with_index do |node_level_pair, index| node, level = *node_level_pair if node.get_name == parent_name target_index_reverse = index break end end target_node, target_level = node_level_list_reverse[target_index_reverse] target_index = get_reverse_index(target_index_reverse) if target_node == @root target_node, target_index = add_record(@root.get_name, parent_name) end return target_node, target_index end |
#add_record(parent_name, child_name) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/utils/code_parser.rb', line 70 def add_record(parent_name, child_name) parent_node, parent_node_index = _find_parent_with_index(parent_name) child_level = parent_node.get_level + 1 mistab_nodes = _find_mistab_nodes(parent_node_index, child_level) if mistab_nodes.any? mistab_nodes.each do |mistab_node| mistab_node.set_parent(parent_node) @root.delete_child(mistab_node) parent_node.append_child(mistab_node) end end child_node = CodeNode.new(child_name) child_node.set_level(child_level) @node_level_list << child_node child_node.set_index(@node_level_list.size - 1) parent_node.append_child(child_node) child_node.set_parent(parent_node) return child_node, child_node.get_index end |
#get_reverse_index(index) ⇒ Object
94 95 96 |
# File 'lib/utils/code_parser.rb', line 94 def get_reverse_index(index) @node_level_list.size - 1 - index end |
#my_pretty_print ⇒ Object
141 142 143 144 145 146 147 |
# File 'lib/utils/code_parser.rb', line 141 def my_pretty_print require 'json' output = JSON.pretty_generate(self.to_hash) output.gsub!(/[\{\}\[\],:]| null/,'') output.gsub!(/^\s+$/,'') output.gsub!(/^\n/,'') end |
#to_hash ⇒ Object
137 138 139 |
# File 'lib/utils/code_parser.rb', line 137 def to_hash @root.to_hash end |