gf-treevisitor 0.0.12 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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