gf-treevisitor 0.0.12 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.12
1
+ 0.0.13
data/lib/treevisitor.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class TreeVisitor
2
- VERSION = '0.0.12'
2
+ VERSION = '0.0.13'
3
3
  end
@@ -108,6 +108,10 @@ class AbsNode
108
108
  not_implemented
109
109
  end
110
110
 
111
+ def to_s
112
+ @name.to_s
113
+ end
114
+
111
115
  protected
112
116
 
113
117
  def parent=( parent )
@@ -96,7 +96,7 @@ class DirTreeWalker
96
96
  @visitor.enter_tree_node( dirname )
97
97
  # return if ignore_dir?( dirname )
98
98
 
99
- Dir.entries( dirname ).each { |basename|
99
+ Dir.entries( dirname ).sort.each { |basename|
100
100
  next if basename == "." or basename == ".." # ignore always "." and ".."
101
101
  pathname = File.join( dirname, basename )
102
102
 
@@ -23,8 +23,4 @@ class LeafNode < AbsNode
23
23
  visitor
24
24
  end
25
25
 
26
- def to_str
27
- name.to_str
28
- end
29
-
30
26
  end
@@ -57,8 +57,10 @@ class TreeNode < AbsNode
57
57
  if @leaves.length > 0
58
58
  @leaves.last.next = leaf
59
59
  leaf.prev = @leaves.last
60
- leaf.next = nil
60
+ else
61
+ leaf.prev = nil
61
62
  end
63
+ leaf.next = nil
62
64
  leaf.invalidate
63
65
  @leaves << leaf
64
66
  end
@@ -66,12 +68,19 @@ class TreeNode < AbsNode
66
68
  def add_child( tree_node )
67
69
  return if tree_node.parent == self
68
70
  if not tree_node.parent.nil?
69
- tree_node.remove_from_parent()
71
+ tree_node.remove_from_parent
70
72
  else
71
73
  tree_node.prefix_path = nil
72
74
  end
73
75
  tree_node.invalidate
74
76
  tree_node.parent = self
77
+ if @children.length > 0
78
+ @children.last.next = tree_node
79
+ tree_node.prev = @children.last
80
+ else
81
+ tree_node.prev = nil
82
+ end
83
+ tree_node.next = nil
75
84
  @children << tree_node
76
85
  end
77
86
 
@@ -105,33 +114,36 @@ class TreeNode < AbsNode
105
114
  visitor
106
115
  end
107
116
 
108
- def to_str( depth = 0 )
117
+ def to_str( prefix= "" )
109
118
  str = ""
110
- (0...depth).step {
111
- str << " |-"
112
- }
113
-
114
- str << @name
115
- str << "\n"
116
119
 
117
- if ! @leaves.empty?
118
- @leaves.each{ |l|
119
- (0...depth-1).step {
120
- str << " |-"
121
- }
122
- if @children.empty?
123
- str << " | "
124
- else
125
- str << " | | "
126
- end
127
- str << l.to_str
128
- str << "\n"
129
- }
120
+ if root?
121
+ str << to_s << "\n"
122
+ else
123
+ str << prefix
124
+ if self.next
125
+ str << "|-- "
126
+ else
127
+ str << "\`-- "
128
+ end
129
+ str << to_s << "\n"
130
+ prefix += self.next ? "| " : " "
131
+ end
132
+
133
+ @leaves.each do |leaf|
134
+ str << prefix
135
+ if !leaf.next.nil? or !@children.empty?
136
+ str << "|-- "
137
+ else
138
+ str << "\`-- "
139
+ end
140
+ str << leaf.to_s << "\n"
130
141
  end
131
142
 
132
- @children.each { |tn|
133
- str << tn.to_str( depth + 1 )
134
- }
143
+ @children.each do |child|
144
+ str << child.to_str( prefix )
145
+ end
135
146
  str
136
147
  end
148
+
137
149
  end
@@ -7,8 +7,8 @@ class CallbackTreeNodeVisitor < TreeNodeVisitor
7
7
 
8
8
  def initialize
9
9
  super()
10
- @stack = []
11
10
  @root = nil
11
+ @stack = []
12
12
  @action_enter_tree_node = nil
13
13
  @action_visit_leaf_node = nil
14
14
  end
@@ -8,10 +8,11 @@ class CallbackTreeNodeVisitor2 < TreeNodeVisitor
8
8
 
9
9
  attr_reader :root
10
10
 
11
- def initialize
11
+ def initialize( delegate = nil)
12
12
  super()
13
13
  @stack = []
14
14
  @root = nil
15
+ @delegate = delegate
15
16
  end
16
17
 
17
18
  def on_enter_tree_node( &action )
@@ -22,21 +23,37 @@ class CallbackTreeNodeVisitor2 < TreeNodeVisitor
22
23
  @action_visit_leaf_node = action
23
24
  end
24
25
 
25
- def enter_tree_node( tree_node )
26
- parent_node = @stack.empty? ? nil : @stack.last
27
- new_tree_node = @action_enter_tree_node.call( tree_node, parent_node )
28
- @root = new_tree_node if @stack.empty?
29
- @stack.push( new_tree_node )
26
+ def _on_enter_tree_node( src_tree_node, dst_parent_node )
27
+ if @action_enter_tree_node
28
+ dst_tree_node = @action_enter_tree_node.call( src_tree_node, dst_parent_node )
29
+ elsif @delegate
30
+ dst_tree_node = @delegate.on_enter_tree_node( src_tree_node, dst_parent_node )
31
+ end
32
+ dst_tree_node
30
33
  end
31
34
 
32
- def exit_tree_node( tree_node )
35
+ def _on_visit_leaf_node( src_leaf_node, parent_node )
36
+ if @action_visit_leaf_node
37
+ @action_visit_leaf_node.call( src_leaf_node, parent_node )
38
+ elsif @delegate
39
+ @delegate.on_visit_leaf_node( src_leaf_node, parent_node )
40
+ end
41
+ end
42
+
43
+ def enter_tree_node( src_tree_node )
44
+ dst_parent_node = @stack.empty? ? nil : @stack.last
45
+ dst_tree_node = _on_enter_tree_node( src_tree_node, dst_parent_node )
46
+ @root = dst_tree_node if @stack.empty?
47
+ @stack.push( dst_tree_node )
48
+ end
49
+
50
+ def exit_tree_node( src_tree_node )
33
51
  @stack.pop
34
52
  end
35
53
 
36
- def visit_leaf_node( leaf_node )
54
+ def visit_leaf_node( src_leaf_node )
37
55
  parent_node = @stack.last
38
- @action_visit_leaf_node.call( leaf_node, parent_node )
56
+ _on_visit_leaf_node( src_leaf_node, parent_node )
39
57
  end
40
-
41
58
  end
42
59
 
@@ -8,7 +8,6 @@ class PrintTreeNodeVisitor < TreeNodeVisitor
8
8
  end
9
9
 
10
10
  def enter_tree_node( tree_node )
11
-
12
11
  str = ""
13
12
  (0...@depth).step {
14
13
  str << " |-"
@@ -17,7 +17,7 @@ class TCDirTreeWalker < Test::Unit::TestCase
17
17
  visitor = BlockTreeNodeVisitor.new { |pathname| accumulator << File.basename( pathname ) }
18
18
  dir_tree_walker.run( visitor )
19
19
  assert_equal( 9, accumulator.length )
20
- assert_equal( %w{ test_data dir.1 dir.1.2 file.1.2.1 file.1.1 dir.2 file.2.1 .dir_with_dot dummy.txt}, accumulator )
20
+ assert_equal( %w{ test_data dir.1 dir.1.2 file.1.2.1 file.1.1 dir.2 file.2.1 .dir_with_dot dummy.txt}.sort, accumulator.sort )
21
21
  end
22
22
 
23
23
  def test_ignore_function
@@ -4,7 +4,7 @@ require 'treevisitor/tree_node.rb'
4
4
 
5
5
  class TCTreeNode < Test::Unit::TestCase
6
6
 
7
- def test_simple_build
7
+ def test_new
8
8
  ta = TreeNode.new( "a" )
9
9
  assert( ta.root? )
10
10
 
@@ -28,7 +28,7 @@ class TCTreeNode < Test::Unit::TestCase
28
28
  # puts ta.to_str
29
29
  end
30
30
 
31
- def test_add_methods
31
+ def test_add_child_and_add_leaf
32
32
  ta = TreeNode.new( "a" )
33
33
  assert( ta.root? )
34
34
 
@@ -48,22 +48,32 @@ class TCTreeNode < Test::Unit::TestCase
48
48
  # puts ta.to_str
49
49
  end
50
50
 
51
- def test_next_prev
51
+ def test_next_and_prev
52
52
  ta = TreeNode.new( "a" )
53
+ assert_nil ta.prev
54
+ assert_nil ta.next
53
55
 
54
56
  ln1 = LeafNode.new("1", ta)
55
- assert_nil( ln1.next )
56
- assert_nil( ln1.prev )
57
+ assert_nil ln1.prev
58
+ assert_nil ln1.next
57
59
 
58
60
  ln2 = LeafNode.new("2", ta)
59
- assert_equal( ln1, ln2.prev )
60
- assert_nil( ln2.next )
61
+ assert_equal ln1, ln2.prev
62
+ assert_nil ln2.next
61
63
 
62
64
  ln3 = LeafNode.new("3", ta)
63
- assert_equal( ln3, ln2.next )
65
+ assert_equal ln3, ln2.next
66
+
67
+ tb = TreeNode.new("b", ta)
68
+ assert_nil tb.next
69
+ assert_nil tb.prev
70
+
71
+ tc = TreeNode.new("c", ta)
72
+ assert_equal tb, tc.prev
73
+ assert_nil tc.next
64
74
  end
65
75
 
66
- def test_nr_methods
76
+ def test_nr_nodes_and_nr_leaves_adn_nr_children
67
77
  ta = TreeNode.new( "a" )
68
78
  ln1 = LeafNode.new("1", ta)
69
79
  ln2 = LeafNode.new("2", ta)
@@ -134,4 +144,22 @@ class TCTreeNode < Test::Unit::TestCase
134
144
  assert_equal(tb, ta.find( "b"))
135
145
  assert_nil( ta.find("not existent"))
136
146
  end
147
+
148
+ def test_to_str
149
+ ta = TreeNode.new( "a" )
150
+ ln1 = LeafNode.new("1", ta)
151
+ ln2 = LeafNode.new("2", ta)
152
+ tb = TreeNode.new( "b", ta )
153
+ ln3 = LeafNode.new( "3", tb )
154
+
155
+ out = <<EOS
156
+ a
157
+ |-- 1
158
+ |-- 2
159
+ `-- b
160
+ `-- 3
161
+ EOS
162
+ assert_equal out, ta.to_str
163
+ end
164
+
137
165
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gf-treevisitor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - gf
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-06 00:00:00 -07:00
12
+ date: 2009-06-07 00:00:00 -07:00
13
13
  default_executable: tree.rb
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -54,7 +54,6 @@ files:
54
54
  - lib/treevisitor/visitors/flat_print_tree_node_visitors.rb
55
55
  - lib/treevisitor/visitors/print_dir_tree_visitor.rb
56
56
  - lib/treevisitor/visitors/print_tree_node_visitor.rb
57
- - lib/treevisitor/visitors/print_tree_node_visitor2.rb
58
57
  - test_data/gf_utility/kwartz_test_data/out.certified/dummy.txt
59
58
  - test_data/gf_utility/kwartz_test_data/out/dummy.txt
60
59
  - test_data/gf_utility/kwartz_test_data/source/test1.html
@@ -1,38 +0,0 @@
1
- #
2
- # Prints node using "to_s" instead of name
3
- # TODO: join this with PrintTreeNodeVisitor
4
- class PrintTreeNodeVisitor2 < TreeNodeVisitor
5
-
6
- def initialize
7
- @depth = 0
8
- end
9
-
10
- def enter_tree_node( tree_node )
11
-
12
- str = ""
13
- (0...@depth).step {
14
- str << " |-"
15
- }
16
-
17
- if @depth == 0
18
- puts str + tree_node.to_s
19
- else
20
- puts str + tree_node.to_s
21
- end
22
- @depth += 1
23
- end
24
-
25
- def exit_tree_node( tree_node )
26
- @depth -= 1
27
- end
28
-
29
- def visit_leaf_node( leaf_node )
30
- str = ""
31
- (0...@depth-1).step {
32
- str << " |-"
33
- }
34
- str << " | "
35
- puts str + leaf_node.to_s
36
- end
37
-
38
- end