treevisitor 0.1.6 → 0.2.0

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.
Files changed (32) hide show
  1. data/VERSION.yml +2 -2
  2. data/examples/directory_walker/directory_without_subdirectory.rb +2 -2
  3. data/examples/directory_walker/find_files.rb +2 -2
  4. data/examples/directory_walker/print_files.rb +1 -1
  5. data/lib/treevisitor/abs_node.rb +21 -23
  6. data/lib/treevisitor/basic_tree_node_visitor.rb +8 -3
  7. data/lib/treevisitor/directory_walker.rb +29 -5
  8. data/lib/treevisitor/leaf_node.rb +1 -1
  9. data/lib/treevisitor/tree_node.rb +11 -7
  10. data/lib/treevisitor/tree_node_visitor.rb +55 -12
  11. data/lib/treevisitor/visitors/block_tree_node_visitor.rb +2 -2
  12. data/lib/treevisitor/visitors/build_dir_tree_visitor.rb +4 -4
  13. data/lib/treevisitor/visitors/callback_tree_node_visitor.rb +6 -6
  14. data/lib/treevisitor/visitors/callback_tree_node_visitor2.rb +18 -27
  15. data/lib/treevisitor/visitors/clone_tree_node_visitor.rb +4 -4
  16. data/lib/treevisitor/visitors/depth_tree_node_visitor.rb +4 -4
  17. data/lib/treevisitor/visitors/directory_to_hash_visitor.rb +4 -4
  18. data/lib/treevisitor/visitors/flat_print_tree_node_visitors.rb +4 -4
  19. data/lib/treevisitor/visitors/print_dir_tree_visitor.rb +4 -4
  20. data/lib/treevisitor/visitors/print_tree_node_visitor.rb +4 -4
  21. data/lib/treevisitor.rb +5 -1
  22. data/spec/treevisitor/directory_walker_spec.rb +38 -23
  23. data/spec/treevisitor/tree_node_paths_spec.rb +70 -0
  24. data/spec/treevisitor/tree_node_spec.rb +32 -50
  25. data/spec/treevisitor/visitor_dsl_spec.rb +40 -6
  26. data/spec/treevisitor/visitors/block_tree_node_visitor_spec.rb +0 -2
  27. data/spec/treevisitor/visitors/callback_tree_node_visitor2_spec.rb +4 -4
  28. data/spec/treevisitor/visitors/callback_tree_node_visitors_spec.rb +2 -4
  29. data/spec/treevisitor/visitors/depth_tree_node_visitor_spec.rb +0 -2
  30. data/tasks/jeweler.rake +0 -5
  31. data/treevisitor.gemspec +3 -2
  32. metadata +6 -4
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :major: 0
3
- :minor: 1
4
- :patch: 6
3
+ :minor: 2
4
+ :patch: 0
5
5
  :build:
@@ -16,13 +16,13 @@ class DirWithoutSubDir < TreeVisitor::BasicTreeNodeVisitor
16
16
  @nr = 0
17
17
  end
18
18
 
19
- def enter_tree_node( pathname )
19
+ def enter_node( pathname )
20
20
  @nr += 1
21
21
  info = OpenStruct.new(:nr => @nr, :pathname => pathname)
22
22
  @stack.push( info )
23
23
  end
24
24
 
25
- def exit_tree_node( pathname )
25
+ def exit_node( pathname )
26
26
  info = @stack.pop
27
27
  if info.nr == @nr
28
28
  puts "leaf: #{pathname}"
@@ -6,12 +6,12 @@ require 'treevisitor'
6
6
  include TreeVisitor
7
7
 
8
8
  class MyVisitor < BasicTreeNodeVisitor
9
- def visit_leaf_node( pathname )
9
+ def visit_leaf( pathname )
10
10
  puts pathname
11
11
  end
12
12
  end
13
13
 
14
- dtw = DirTreeWalker.new( ".." )
14
+ dtw = DirTreeWalker.new( File.join(File.dirname(__FILE__), "..", ".." ) )
15
15
  dtw.match "leaf_node.rb"
16
16
  dtw.match "abs_node.rb"
17
17
  dtw.run( MyVisitor.new )
@@ -6,7 +6,7 @@ include TreeVisitor
6
6
 
7
7
  dtw = DirTreeWalker.new( :ignore => ".git" )
8
8
  dtw.run ".." do
9
- on_visit_leaf_node do |pathname|
9
+ on_leaf do |pathname|
10
10
  puts pathname
11
11
  end
12
12
  end
@@ -34,7 +34,7 @@ module TreeVisitor
34
34
 
35
35
  attr_reader :parent
36
36
  attr_reader :content
37
-
37
+
38
38
  attr_accessor :prev
39
39
  attr_accessor :next
40
40
 
@@ -43,39 +43,38 @@ module TreeVisitor
43
43
  #
44
44
  # @param content of node
45
45
  #
46
- def initialize( content )
47
- @parent = nil
48
- @content = content
46
+ def initialize(content)
47
+ @parent = nil
48
+ @content = content
49
49
  @prefix_path = nil
50
50
  invalidate
51
51
  end
52
-
52
+
53
53
  #
54
54
  # invalidate cached path info
55
55
  #
56
56
  def invalidate
57
- @path = nil
57
+ @path = nil
58
58
  @path_with_prefix = nil
59
- @depth = nil
60
- @root = nil
59
+ @depth = nil
60
+ @root = nil
61
61
  end
62
62
 
63
63
  #
64
64
  # Root node could have assigned a path
65
65
  #
66
66
  def prefix_path
67
- if not @parent.nil?
68
- raise "Not root!!"
69
- end
67
+ raise "Not root!!" unless @parent.nil?
70
68
  @prefix_path
71
69
  end
72
-
73
- def prefix_path=( prefix )
74
- if not @parent.nil?
75
- raise "Not root!!"
76
- end
70
+
71
+ def prefix_path=(prefix)
72
+ raise "Not root!!" unless @parent.nil?
77
73
  if prefix != @prefix_path
78
74
  @prefix_path = prefix
75
+ if prefix and prefix !~ /\/$/
76
+ @prefix_path += AbsNode::path_separator
77
+ end
79
78
  invalidate
80
79
  end
81
80
  end
@@ -107,13 +106,12 @@ module TreeVisitor
107
106
  # @return [String] path to this node with prefix
108
107
  #
109
108
  def path_with_prefix
110
- return @path_with_prefix unless @path_with_prefix.nil?
111
- if @parent.nil?
112
- @path_with_prefix = @prefix_path.nil? ? @content : @prefix_path + @content
109
+ return @path_with_prefix if @path_with_prefix
110
+ if root.prefix_path
111
+ @path_with_prefix = root.prefix_path + path
113
112
  else
114
- @path_with_prefix = @parent.path_with_prefix + AbsNode::path_separator + @content
113
+ @path_with_prefix = path
115
114
  end
116
- @path_with_prefix
117
115
  end
118
116
 
119
117
  #
@@ -128,7 +126,7 @@ module TreeVisitor
128
126
  #
129
127
  # Accept a node visitor
130
128
  #
131
- def accept( visitor )
129
+ def accept(visitor)
132
130
  not_implemented
133
131
  end
134
132
 
@@ -138,7 +136,7 @@ module TreeVisitor
138
136
 
139
137
  protected
140
138
 
141
- def parent=( parent )
139
+ def parent=(parent)
142
140
  @parent = parent
143
141
  end
144
142
 
@@ -9,21 +9,26 @@ module TreeVisitor
9
9
  #
10
10
  # called on tree node at start of the visit i.e. we start to visit the subtree
11
11
  #
12
- def enter_tree_node( tree_node )
12
+ def enter_node( tree_node )
13
13
  end
14
14
 
15
+ # alias :enter_tree_node :enter_node
16
+
15
17
  #
16
18
  # called on tree node at end of the visit i.e. oll subtree are visited
17
19
  #
18
- def exit_tree_node( tree_node )
20
+ def exit_node( tree_node )
19
21
  end
20
22
 
23
+ # alias :exit_tree_node :exit_node
24
+
21
25
  #
22
26
  # called when visit leaf node
23
27
  #
24
- def visit_leaf_node( leaf_node )
28
+ def visit_leaf( leaf_node )
25
29
  end
26
30
 
31
+ # alias :visit_leaf_node :visit_leaf
27
32
  end
28
33
 
29
34
  end
@@ -17,9 +17,12 @@ module TreeVisitor
17
17
  # @overload initialize(dirname)
18
18
  # @param [String] dirname the root of the tree (top level directory)
19
19
  #
20
- # @overload initialize(dirname,options)
20
+ # @overload initialize(dirname, options)
21
21
  # @param [Hash] options
22
22
  # @option options [String,Regex, Array<String,Regexp>] :ignore list of ignore pattern
23
+ # @option options [String] :ignore_dir
24
+ # @option options [String] :ignore_file
25
+ # @option options [String] :match
23
26
  #
24
27
  #
25
28
  # @example Print the contents of tmp directory
@@ -59,6 +62,27 @@ module TreeVisitor
59
62
  options[:ignore].each { |p| ignore(p) }
60
63
  end
61
64
 
65
+ if options and options[:ignore_dir]
66
+ unless options[:ignore_dir].respond_to?(:at)
67
+ options[:ignore_dir] = [options[:ignore_dir]]
68
+ end
69
+ options[:ignore_dir].each { |p| ignore_dir(p) }
70
+ end
71
+
72
+ if options and options[:ignore_file]
73
+ unless options[:ignore_file].respond_to?(:at)
74
+ options[:ignore_file] = [options[:ignore_file]]
75
+ end
76
+ options[:ignore_file].each { |p| ignore_file(p) }
77
+ end
78
+
79
+ if options and options[:match]
80
+ unless options[:match].respond_to?(:at)
81
+ options[:match] = [options[:match]]
82
+ end
83
+ options[:match].each { |p| match(p) }
84
+ end
85
+
62
86
  #
63
87
  # options
64
88
  #
@@ -179,7 +203,7 @@ module TreeVisitor
179
203
  #
180
204
  # args detection
181
205
  #
182
- if dirname and dirname.respond_to?(:enter_tree_node)
206
+ if dirname and dirname.respond_to?(:enter_node)
183
207
  tree_node_visitor = dirname
184
208
  dirname = nil
185
209
  end
@@ -235,7 +259,7 @@ module TreeVisitor
235
259
  # recurse on other directories
236
260
  #
237
261
  def process_directory(dirname)
238
- @visitor.enter_tree_node(dirname)
262
+ @visitor.enter_node(dirname)
239
263
  # return if ignore_dir?( dirname )
240
264
 
241
265
  begin
@@ -247,14 +271,14 @@ module TreeVisitor
247
271
  process_directory(pathname) unless ignore_dir?(basename)
248
272
  else
249
273
  if !!@visit_file && match?(basename) && !ignore_file?(basename)
250
- @visitor.visit_leaf_node(pathname)
274
+ @visitor.visit_leaf(pathname)
251
275
  end
252
276
  end
253
277
  }
254
278
  rescue Errno::EACCES => e
255
279
  $stderr.puts e
256
280
  end
257
- @visitor.exit_tree_node(dirname)
281
+ @visitor.exit_node(dirname)
258
282
  end
259
283
  end
260
284
  end
@@ -25,7 +25,7 @@ module TreeVisitor
25
25
  # @return [TreeNodeVisitor] the visitor
26
26
  #
27
27
  def accept( visitor )
28
- visitor.visit_leaf_node( self )
28
+ visitor.visit_leaf( self )
29
29
  visitor
30
30
  end
31
31
 
@@ -170,8 +170,8 @@ module TreeVisitor
170
170
 
171
171
  #
172
172
  # Find a node down the hierarchy with content
173
- # @param [Object] content of searched node
174
- # @return [Object, nil] nil if no
173
+ # @param [Object,Regexp] content of searched node
174
+ # @return [Object, nil] nil if not found
175
175
  #
176
176
  def find(content = nil, &block)
177
177
  if content and block_given?
@@ -179,11 +179,15 @@ module TreeVisitor
179
179
  end
180
180
 
181
181
  if content
182
- block = proc { |c| c == content }
182
+ if content.class == Regexp
183
+ block = proc { |l| l.content =~ content }
184
+ else
185
+ block = proc { |l| l.content == content }
186
+ end
183
187
  end
184
- return self if block.call(self.content)
188
+ return self if block.call(self)
185
189
 
186
- leaf = @leaves.find { |l| block.call(l.content) }
190
+ leaf = @leaves.find { |l| block.call(l) }
187
191
  return leaf if leaf
188
192
 
189
193
  @children.each do |child|
@@ -197,14 +201,14 @@ module TreeVisitor
197
201
  # return the visitor
198
202
  #
199
203
  def accept(visitor)
200
- visitor.enter_tree_node(self)
204
+ visitor.enter_node(self)
201
205
  @leaves.each { |leaf|
202
206
  leaf.accept(visitor)
203
207
  }
204
208
  @children.each { |child|
205
209
  child.accept(visitor)
206
210
  }
207
- visitor.exit_tree_node(self)
211
+ visitor.exit_node(self)
208
212
  visitor
209
213
  end
210
214
 
@@ -1,14 +1,32 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  module TreeVisitor
3
+
3
4
  #
4
- # More complex TreeNodeVisitor
5
+ # More complex TreeNodeVisitor, define a simple dsl
6
+ # @example
7
+ # TreeNodeVisitor.new do
8
+ # on_enter_node do |node|
9
+ # puts "hello #{node}"
10
+ # end
11
+ # on_exit_node do |node|
12
+ # puts "bye #{node}"
13
+ # end
14
+ # on_leaf do |leaf|
15
+ # puts "how you do #{leaf}"
16
+ # end
17
+ # end
5
18
  #
6
19
  class TreeNodeVisitor
7
20
 
8
21
  def initialize(&block)
22
+
9
23
  @on_enter_tree_node_blocks = []
10
- @on_exit_tree_node_blocks = []
24
+ @on_exit_tree_node_blocks = []
11
25
  @on_visit_leaf_node_blocks = []
26
+
27
+ @stack = []
28
+ @root = nil
29
+
12
30
  if block
13
31
  instance_eval(&block)
14
32
  end
@@ -17,41 +35,66 @@ module TreeVisitor
17
35
  #
18
36
  # called on tree node at start of the visit i.e. we start to visit the subtree
19
37
  #
20
- def enter_tree_node(tree_node)
21
- @on_enter_tree_node_blocks.each{ |b| b.call(tree_node) }
38
+ def enter_node(tree_node)
39
+ parent = @stack.last
40
+ @on_enter_tree_node_blocks.each { |b| b.call(tree_node, parent) }
41
+ @root = tree_node if @stack.empty?
42
+ @stack.push(tree_node)
22
43
  end
23
44
 
45
+ # alias :enter_tree_node :enter_node
46
+
24
47
  #
25
48
  # called on tree node at end of the visit i.e. oll subtree are visited
26
49
  #
27
- def exit_tree_node(tree_node)
28
- @on_exit_tree_node_blocks.each{ |b| b.call(tree_node) }
50
+ def exit_node(tree_node)
51
+ parent = @stack.last
52
+ @on_exit_tree_node_blocks.each { |b| b.call(tree_node, parent) }
53
+ @stack.pop
29
54
  end
30
55
 
56
+ # alias :exit_tree_node :exit_node
57
+
31
58
  #
32
59
  # called when visit leaf node
33
60
  #
34
- def visit_leaf_node(leaf_node)
35
- @on_visit_leaf_node_blocks.each{ |b| b.call(leaf_node) }
61
+ def visit_leaf(leaf_node)
62
+ parent = @stack.last
63
+ @on_visit_leaf_node_blocks.each { |b| b.call(leaf_node, parent) }
36
64
  end
37
65
 
38
- private
66
+ # alias :visit_leaf_node :visit_leaf
39
67
 
40
- def on_enter_tree_node(&block)
68
+ #
69
+ # add a block to be called when entering into a tree_node
70
+ #
71
+ def on_enter_node(&block)
41
72
  raise "block missing" unless block
42
73
  @on_enter_tree_node_blocks << block
43
74
  end
44
75
 
45
- def on_exit_tree_node(&block)
76
+ # alias :on_enter_tree_node :on_enter_node
77
+
78
+ #
79
+ # add a block to be called when exiting from a TreeNode
80
+ #
81
+ def on_exit_node(&block)
46
82
  raise "block missing" unless block
47
83
  @on_exit_tree_node_blocks << block
48
84
  end
49
85
 
50
- def on_visit_leaf_node(&block)
86
+ # alias :on_exit_tree_node :on_exit_node
87
+
88
+ #
89
+ # add a block to be called when visiting a leaf node
90
+ #
91
+ def on_leaf(&block)
51
92
  raise "block missing" unless block
52
93
  @on_visit_leaf_node_blocks << block
53
94
  end
54
95
 
96
+ # alias :on_visit_leaf_node :on_leaf
97
+
55
98
  end
56
99
 
57
100
  end
@@ -9,11 +9,11 @@ module TreeVisitor
9
9
  @block = action
10
10
  end
11
11
 
12
- def enter_tree_node( tree_node )
12
+ def enter_node( tree_node )
13
13
  @block.call( tree_node )
14
14
  end
15
15
 
16
- def visit_leaf_node( leaf_node )
16
+ def visit_leaf( leaf_node )
17
17
  @block.call( leaf_node )
18
18
  end
19
19
 
@@ -4,7 +4,7 @@ module TreeVisitor
4
4
  # Builds a TreeNode from a filesystem directory
5
5
  # It similar to CloneTreeNodeVisitor
6
6
  #
7
- class BuildDirTreeVisitor < BasicTreeNodeVisitor
7
+ class BuildDirTreeVisitor # < BasicTreeNodeVisitor
8
8
 
9
9
  attr_reader :root
10
10
 
@@ -28,7 +28,7 @@ module TreeVisitor
28
28
  @nr_files = 0
29
29
  end
30
30
 
31
- def enter_tree_node( pathname )
31
+ def enter_node( pathname )
32
32
  if @stack.empty?
33
33
  tree_node = TreeNode.new( File.basename( pathname ) )
34
34
  @root = tree_node
@@ -39,11 +39,11 @@ module TreeVisitor
39
39
  @stack.push( tree_node )
40
40
  end
41
41
 
42
- def exit_tree_node( pathname )
42
+ def exit_node( pathname )
43
43
  @stack.pop
44
44
  end
45
45
 
46
- def visit_leaf_node( pathname )
46
+ def visit_leaf( pathname )
47
47
  @nr_files += 1
48
48
  # connect the leaf_node created to the last tree_node on the stack
49
49
  LeafNode.new( File.basename(pathname), @stack.last )
@@ -5,7 +5,7 @@ module TreeVisitor
5
5
  # The block are defined from on_enter_X methods
6
6
  # The blocks take as argument only the node
7
7
  #
8
- class CallbackTreeNodeVisitor < BasicTreeNodeVisitor
8
+ class CallbackTreeNodeVisitor # < BasicTreeNodeVisitor
9
9
 
10
10
  def initialize
11
11
  @root = nil
@@ -14,26 +14,26 @@ module TreeVisitor
14
14
  @action_visit_leaf_node = nil
15
15
  end
16
16
 
17
- def on_enter_tree_node( &action )
17
+ def on_enter_node( &action )
18
18
  @action_enter_tree_node = action
19
19
  end
20
20
 
21
- def on_visit_leaf_node( &action )
21
+ def on_visit_leaf( &action )
22
22
  @action_visit_leaf_node = action
23
23
  end
24
24
 
25
- def enter_tree_node( tree_node )
25
+ def enter_node( tree_node )
26
26
  # parent_node = @stack.empty? ? nil : @stack.last
27
27
  @root = tree_node if @stack.empty?
28
28
  @stack.push( tree_node )
29
29
  @action_enter_tree_node.call( tree_node ) if @action_enter_tree_node
30
30
  end
31
31
 
32
- def exit_tree_node( tree_node )
32
+ def exit_node( tree_node )
33
33
  @stack.pop
34
34
  end
35
35
 
36
- def visit_leaf_node( leaf_node )
36
+ def visit_leaf( leaf_node )
37
37
  # parent_node = @stack.last
38
38
  @action_visit_leaf_node.call( leaf_node ) if @action_visit_leaf_node
39
39
  end
@@ -5,56 +5,47 @@ module TreeVisitor
5
5
  # The block are defined from on_enter_X methods
6
6
  # The blocks take as argument the node and the parent_node
7
7
  #
8
- class CallbackTreeNodeVisitor2 < BasicTreeNodeVisitor
8
+ class CallbackTreeNodeVisitor2 # < BasicTreeNodeVisitor
9
9
 
10
10
  attr_reader :root
11
11
 
12
- def initialize( delegate = nil)
12
+ def initialize(delegate = nil)
13
13
  super()
14
- @stack = []
15
- @root = nil
14
+ @stack = []
15
+ @root = nil
16
16
  @delegate = delegate
17
17
  end
18
18
 
19
- def on_enter_tree_node( &action )
19
+ def on_enter_node(&action)
20
20
  @action_enter_tree_node = action
21
21
  end
22
22
 
23
- def on_visit_leaf_node( &action )
23
+ def on_visit_leaf(&action)
24
24
  @action_visit_leaf_node = action
25
25
  end
26
26
 
27
- def _on_enter_tree_node( src_tree_node, dst_parent_node )
27
+ def enter_node(src_tree_node)
28
+ dst_parent_node = @stack.empty? ? nil : @stack.last
28
29
  if @action_enter_tree_node
29
- dst_tree_node = @action_enter_tree_node.call( src_tree_node, dst_parent_node )
30
- elsif @delegate
31
- dst_tree_node = @delegate.on_enter_tree_node( src_tree_node, dst_parent_node )
32
- end
33
- dst_tree_node
34
- end
35
-
36
- def _on_visit_leaf_node( src_leaf_node, parent_node )
37
- if @action_visit_leaf_node
38
- @action_visit_leaf_node.call( src_leaf_node, parent_node )
30
+ dst_tree_node = @action_enter_tree_node.call(src_tree_node, dst_parent_node)
39
31
  elsif @delegate
40
- @delegate.on_visit_leaf_node( src_leaf_node, parent_node )
32
+ dst_tree_node = @delegate.on_enter_tree_node(src_tree_node, dst_parent_node)
41
33
  end
42
- end
43
-
44
- def enter_tree_node( src_tree_node )
45
- dst_parent_node = @stack.empty? ? nil : @stack.last
46
- dst_tree_node = _on_enter_tree_node( src_tree_node, dst_parent_node )
47
34
  @root = dst_tree_node if @stack.empty?
48
- @stack.push( dst_tree_node )
35
+ @stack.push(dst_tree_node)
49
36
  end
50
37
 
51
- def exit_tree_node( src_tree_node )
38
+ def exit_node(src_tree_node)
52
39
  @stack.pop
53
40
  end
54
41
 
55
- def visit_leaf_node( src_leaf_node )
42
+ def visit_leaf(src_leaf_node)
56
43
  parent_node = @stack.last
57
- _on_visit_leaf_node( src_leaf_node, parent_node )
44
+ if @action_visit_leaf_node
45
+ @action_visit_leaf_node.call(src_leaf_node, parent_node)
46
+ elsif @delegate
47
+ @delegate.on_visit_leaf_node(src_leaf_node, parent_node)
48
+ end
58
49
  end
59
50
  end
60
51
 
@@ -4,7 +4,7 @@ module TreeVisitor
4
4
  # Clone a tree_node, nodes are duplicated.
5
5
  # Node content are not duplicated!
6
6
  #
7
- class CloneTreeNodeVisitor < BasicTreeNodeVisitor
7
+ class CloneTreeNodeVisitor # < BasicTreeNodeVisitor
8
8
 
9
9
  #
10
10
  # Contains the cloned tree node after the visit
@@ -17,7 +17,7 @@ module TreeVisitor
17
17
  @stack = []
18
18
  end
19
19
 
20
- def enter_tree_node( tree_node )
20
+ def enter_node( tree_node )
21
21
  if @stack.empty?
22
22
  cloned_tree_node = TreeNode.new( tree_node.content )
23
23
  @cloned_root = cloned_tree_node
@@ -27,11 +27,11 @@ module TreeVisitor
27
27
  @stack.push( cloned_tree_node )
28
28
  end
29
29
 
30
- def exit_tree_node( tree_node )
30
+ def exit_node( tree_node )
31
31
  @stack.pop
32
32
  end
33
33
 
34
- def visit_leaf_node( leaf_node )
34
+ def visit_leaf( leaf_node )
35
35
  LeafNode.new( leaf_node.content, @stack.last )
36
36
  end
37
37
 
@@ -3,7 +3,7 @@ module TreeVisitor
3
3
  #
4
4
  # Simple visitor: show how calculate the depth of a tree
5
5
  #
6
- class DepthTreeNodeVisitor < BasicTreeNodeVisitor
6
+ class DepthTreeNodeVisitor # < BasicTreeNodeVisitor
7
7
 
8
8
  attr_reader :depth
9
9
 
@@ -12,15 +12,15 @@ module TreeVisitor
12
12
  @depth = 0
13
13
  end
14
14
 
15
- def enter_tree_node( tree_node )
15
+ def enter_node( tree_node )
16
16
  @depth += 1
17
17
  end
18
18
 
19
- def exit_tree_node( tree_node )
19
+ def exit_node( tree_node )
20
20
  @depth -= 1
21
21
  end
22
22
 
23
- def visit_leaf_node( leaf_node )
23
+ def visit_leaf( leaf_node )
24
24
  end
25
25
 
26
26
  end
@@ -4,7 +4,7 @@ module TreeVisitor
4
4
  #
5
5
  # Build hash with directory structure
6
6
  #
7
- class DirectoryToHashVisitor < TreeVisitor::BasicTreeNodeVisitor
7
+ class DirectoryToHashVisitor # < TreeVisitor::BasicTreeNodeVisitor
8
8
 
9
9
  attr_reader :root
10
10
 
@@ -14,18 +14,18 @@ module TreeVisitor
14
14
  @root = @node
15
15
  end
16
16
 
17
- def enter_tree_node(pathname)
17
+ def enter_node(pathname)
18
18
  subnode = {}
19
19
  @node[File.basename(pathname)] = subnode
20
20
  @stack.push(@node)
21
21
  @node = subnode
22
22
  end
23
23
 
24
- def exit_tree_node(pathname)
24
+ def exit_node(pathname)
25
25
  @node = @stack.pop
26
26
  end
27
27
 
28
- def visit_leaf_node(pathname)
28
+ def visit_leaf(pathname)
29
29
  @node[File.basename(pathname)] = File.stat(pathname).size
30
30
  end
31
31
 
@@ -3,16 +3,16 @@ module TreeVisitor
3
3
  #
4
4
  # Print for every node the name
5
5
  #
6
- class FlatPrintTreeNodeVisitor < BasicTreeNodeVisitor
6
+ class FlatPrintTreeNodeVisitor # < BasicTreeNodeVisitor
7
7
 
8
- def enter_tree_node( tree_node )
8
+ def enter_node( tree_node )
9
9
  puts tree_node.name
10
10
  end
11
11
 
12
- def exit_tree_node( tree_node )
12
+ def exit_node( tree_node )
13
13
  end
14
14
 
15
- def visit_leaf_node( leaf_node )
15
+ def visit_leaf( leaf_node )
16
16
  puts leaf_node.name
17
17
  end
18
18
 
@@ -4,16 +4,16 @@ module TreeVisitor
4
4
  # Visitor for DirTreeWalker
5
5
  # Prints the node at enter
6
6
  # TODO: join this con PrintTreeNodeVisitor
7
- class PrintDirTreeVisitor < BasicTreeNodeVisitor
7
+ class PrintDirTreeVisitor # < BasicTreeNodeVisitor
8
8
 
9
- def enter_tree_node( pathname )
9
+ def enter_node( pathname )
10
10
  puts pathname
11
11
  end
12
12
 
13
- def exit_tree_node( pathname )
13
+ def exit_node( pathname )
14
14
  end
15
15
 
16
- def visit_leaf_node( pathname )
16
+ def visit_leaf( pathname )
17
17
  puts pathname
18
18
  end
19
19
 
@@ -3,13 +3,13 @@ module TreeVisitor
3
3
  #
4
4
  # Prints TreeNode names indenting according to depth
5
5
  #
6
- class PrintTreeNodeVisitor < BasicTreeNodeVisitor
6
+ class PrintTreeNodeVisitor # < BasicTreeNodeVisitor
7
7
 
8
8
  def initialize
9
9
  @depth = 0
10
10
  end
11
11
 
12
- def enter_tree_node( tree_node )
12
+ def enter_node( tree_node )
13
13
  str = ""
14
14
  (0...@depth).step {
15
15
  str << " |-"
@@ -23,11 +23,11 @@ module TreeVisitor
23
23
  @depth += 1
24
24
  end
25
25
 
26
- def exit_tree_node( tree_node )
26
+ def exit_node( tree_node )
27
27
  @depth -= 1
28
28
  end
29
29
 
30
- def visit_leaf_node( leaf_node )
30
+ def visit_leaf( leaf_node )
31
31
  str = ""
32
32
  (0...@depth-1).step {
33
33
  str << " |-"
data/lib/treevisitor.rb CHANGED
@@ -9,7 +9,7 @@ require 'yaml'
9
9
  #
10
10
  # rubygems
11
11
  #
12
- require 'rubygems'
12
+ # require 'rubygems' # rubygems must be loaded from binary file to not modify $LOAD_PATH
13
13
  require 'json'
14
14
 
15
15
  #
@@ -40,6 +40,10 @@ require 'treevisitor/directory_walker'
40
40
  #
41
41
  require 'treevisitor/visitors/block_tree_node_visitor'
42
42
  require 'treevisitor/visitors/build_dir_tree_visitor'
43
+ require 'treevisitor/visitors/callback_tree_node_visitor'
44
+ require 'treevisitor/visitors/callback_tree_node_visitor2'
45
+ require 'treevisitor/visitors/clone_tree_node_visitor'
46
+ require 'treevisitor/visitors/depth_tree_node_visitor'
43
47
  require 'treevisitor/visitors/print_dir_tree_visitor'
44
48
  require 'treevisitor/visitors/directory_to_hash_visitor'
45
49
 
@@ -3,38 +3,53 @@ require File.join(File.dirname(__FILE__), "..", "spec_helper")
3
3
 
4
4
  describe DirTreeWalker do
5
5
 
6
- it "should ignore files and directory" do
7
- dtp = DirTreeWalker.new(".")
8
-
9
- dtp.ignore(/^\./)
10
- dtp.ignore_file?(".thumbnails").should be_true
11
- dtp.ignore_dir?(".thumbnails").should be_true
6
+ it "should accept option :ignore" do
7
+ walker = DirTreeWalker.new :ignore => /^\./
8
+ walker.ignore_file?(".thumbnails").should be_true
9
+ walker.ignore_dir?(".thumbnails").should be_true
10
+ end
12
11
 
13
- dtp.ignore_dir("thumbnails")
14
- dtp.ignore_dir?(".thumbnails").should be_true
15
- dtp.ignore_dir?("thumbnails").should be_true
16
- dtp.ignore_dir?("pippo").should be_false
12
+ it "should accept option :ignore" do
13
+ walker = DirTreeWalker.new :ignore => ".git"
14
+ walker.ignore_file?(".git").should be_true
15
+ walker.ignore_dir?(".git").should be_true
16
+ end
17
17
 
18
- dtp.ignore_file("xvpics")
19
- dtp.ignore_file?("xvpics").should be_true
20
18
 
21
- dtp.ignore("sub")
22
- dtp.ignore_file?("[Dsube]").should be_false
23
- dtp.ignore_dir?("[Dsube]").should be_false
19
+ it "should accept option :ignore_dir" do
20
+ dtw = DirTreeWalker.new :ignore_dir => [/^\./, "private_dir" ]
21
+ dtw.should be_ignore_dir ".git"
22
+ dtw.should be_ignore_dir "private_dir"
24
23
  end
25
24
 
26
- it "should accept option :ignore" do
27
- dtp = DirTreeWalker.new :ignore => /^\./
25
+ it "should accept option :ignore_file" do
26
+ dtw = DirTreeWalker.new :ignore_file => [/.xml/, /(ignore)|(orig)/ ]
27
+ dtw.should be_ignore_file "pippo.xml"
28
+ end
28
29
 
29
- dtp.ignore_file?(".thumbnails").should be_true
30
- dtp.ignore_dir?(".thumbnails").should be_true
30
+ it "should accept option :match" do
31
+ dtw = DirTreeWalker.new :match => /.jpg/
32
+ dtw.should be_match "foo.jpg"
31
33
  end
32
34
 
33
- it "should accept option :ignore" do
34
- dtp = DirTreeWalker.new :ignore => ".git"
35
+ it "should ignore files and directory" do
36
+ walker = DirTreeWalker.new(".")
37
+
38
+ walker.ignore(/^\./)
39
+ walker.ignore_file?(".thumbnails").should be_true
40
+ walker.ignore_dir?(".thumbnails").should be_true
41
+
42
+ walker.ignore_dir("thumbnails")
43
+ walker.ignore_dir?(".thumbnails").should be_true
44
+ walker.ignore_dir?("thumbnails").should be_true
45
+ walker.ignore_dir?("pippo").should be_false
46
+
47
+ walker.ignore_file("xvpics")
48
+ walker.ignore_file?("xvpics").should be_true
35
49
 
36
- dtp.ignore_file?(".git").should be_true
37
- dtp.ignore_dir?(".git").should be_true
50
+ walker.ignore("sub")
51
+ walker.ignore_file?("[Dsube]").should be_false
52
+ walker.ignore_dir?("[Dsube]").should be_false
38
53
  end
39
54
 
40
55
  it "should accumulate file names" do
@@ -0,0 +1,70 @@
1
+ # -*- coding: utf-8 -*-
2
+ require File.join(File.dirname(__FILE__), "..", "spec_helper")
3
+
4
+ describe TreeNode do
5
+
6
+ context "paths" do
7
+
8
+ before do
9
+ @tree = TreeNode.new("a")
10
+ ln1 = LeafNode.new("1", @tree)
11
+ ln2 = LeafNode.new("2", @tree)
12
+ @sub_tree = TreeNode.new("b", @tree)
13
+ @ln3 = LeafNode.new("3", @sub_tree)
14
+ @ln4 = LeafNode.new("12", @sub_tree)
15
+ end
16
+
17
+ it "correct path" do
18
+ @tree.path.should == "a"
19
+ @sub_tree.path.should == "a/b"
20
+ @tree.path_with_prefix.should == "a"
21
+ @sub_tree.path_with_prefix.should == "a/b"
22
+ end
23
+
24
+ it "assign prefix path with a /" do
25
+ @tree.prefix_path= "<root>/"
26
+
27
+ @tree.prefix_path.should == "<root>/"
28
+ @tree.path.should == "a"
29
+ @sub_tree.path.should == "a/b"
30
+ @tree.path_with_prefix.should == "<root>/a"
31
+ @sub_tree.path_with_prefix.should == "<root>/a/b"
32
+ end
33
+
34
+ it "assign empty prefix path" do
35
+ @tree.prefix_path= ""
36
+
37
+ @tree.prefix_path.should == "/"
38
+ @tree.path.should == "a"
39
+ @sub_tree.path.should == "a/b"
40
+ @tree.path_with_prefix.should == "/a"
41
+ @sub_tree.path_with_prefix.should == "/a/b"
42
+ end
43
+
44
+ it "assign prefix path wo a /" do
45
+ @tree.prefix_path= "<root>"
46
+
47
+ @tree.prefix_path.should == "<root>/"
48
+ @tree.path_with_prefix.should == "<root>/a"
49
+ @sub_tree.path_with_prefix.should == "<root>/a/b"
50
+ end
51
+
52
+ it "invalidate" do
53
+ @tree.prefix_path="root/"
54
+ @sub_tree.path.should == "a/b"
55
+ @sub_tree.path_with_prefix.should == "root/a/b"
56
+ @sub_tree.depth.should == 2
57
+
58
+ r = TreeNode.new("r")
59
+ r.add_child(@tree)
60
+ @sub_tree.path.should == "r/a/b"
61
+ @sub_tree.path_with_prefix.should == "r/a/b"
62
+
63
+ r.prefix_path="new_root/"
64
+ @sub_tree.path.should == "r/a/b"
65
+ @sub_tree.path_with_prefix.should == "new_root/r/a/b"
66
+ @sub_tree.depth.should == 3
67
+ end
68
+
69
+ end
70
+ end
@@ -79,74 +79,56 @@ describe TreeNode do
79
79
  ln1 = LeafNode.new("1", @tree)
80
80
  ln2 = LeafNode.new("2", @tree)
81
81
  @sub_tree = TreeNode.new("b", @tree)
82
- @ln3 = LeafNode.new("3", @sub_tree)
82
+ @ln3 = LeafNode.new("3", @sub_tree)
83
+ @ln4 = LeafNode.new("12", @sub_tree)
83
84
  end
84
85
 
85
86
  it "nr_nodes and nr_leaves and nr_children" do
86
- @tree.nr_nodes.should == 4
87
- @tree.nr_leaves.should == 3
87
+ @tree.nr_nodes.should == 5
88
+ @tree.nr_leaves.should == 4
88
89
  @tree.nr_children.should == 1
89
90
 
90
- @sub_tree.nr_nodes.should == 1
91
- @sub_tree.nr_leaves.should == 1
91
+ @sub_tree.nr_nodes.should == 2
92
+ @sub_tree.nr_leaves.should == 2
92
93
  @sub_tree.nr_children.should == 0
93
94
  end
94
95
 
95
- it "prefix_path" do
96
- @tree.path.should == "a"
97
- @sub_tree.path.should == "a/b"
98
- @tree.path_with_prefix.should == "a"
99
- @sub_tree.path_with_prefix.should == "a/b"
100
96
 
101
- @tree.prefix_path= "<root>/"
97
+ context "find" do
102
98
 
103
- @tree.prefix_path.should == "<root>/"
104
- @tree.path.should == "a"
105
- @sub_tree.path.should == "a/b"
106
- @tree.path_with_prefix.should == "<root>/a"
107
- @sub_tree.path_with_prefix.should == "<root>/a/b"
108
- end
109
-
110
- it "invalidate" do
111
- @tree.prefix_path="root/"
112
- @sub_tree.path.should == "a/b"
113
- @sub_tree.path_with_prefix.should == "root/a/b"
114
- @sub_tree.depth.should == 2
115
-
116
- r = TreeNode.new("r")
117
- r.add_child(@tree)
118
- @sub_tree.path.should == "r/a/b"
119
- @sub_tree.path_with_prefix.should == "r/a/b"
120
-
121
- r.prefix_path="new_root/"
122
- @sub_tree.path.should == "r/a/b"
123
- @sub_tree.path_with_prefix.should == "new_root/r/a/b"
124
- @sub_tree.depth.should == 3
125
- end
99
+ it "find by string" do
100
+ @tree.find("a").should === @tree
101
+ @tree.find("b").should === @sub_tree
102
+ @tree.find("3").should === @ln3
103
+ @tree.find("not existent").should be_nil
104
+ end
126
105
 
127
- it "find without block" do
128
- @tree.find("a").should === @tree
129
- @tree.find("b").should === @sub_tree
130
- @tree.find("3").should === @ln3
131
- @tree.find("not existent").should be_nil
132
- end
106
+ it "find by regex" do
107
+ @tree.find(/[a,b]/).should === @tree
108
+ @tree.find(/[b,c]/).should === @sub_tree
109
+ @tree.find(/\d\d/).should === @ln4
110
+ @tree.find(/not existent/).should be_nil
111
+ end
133
112
 
134
- it "find with block" do
135
- @tree.find {|e| e == "a"}.should === @tree
136
- @tree.find {|e| e == "b"}.should === @sub_tree
137
- @tree.find {|e| e == "3"}.should === @ln3
138
- @tree.find {|e| e == "not existent"}.should be_nil
139
- end
113
+ it "find with block" do
114
+ @tree.find { |e| e.content == "a" }.should === @tree
115
+ @tree.find { |e| e.content == "b" }.should === @sub_tree
116
+ @tree.find { |e| e.content == "3" }.should === @ln3
117
+ @tree.find { |e| e.content == "not existent" }.should be_nil
118
+ end
140
119
 
141
- it "to_str" do
142
- out = <<EOS
120
+ it "to_str" do
121
+ out = <<EOS
143
122
  a
144
123
  |-- 1
145
124
  |-- 2
146
125
  `-- b
147
- `-- 3
126
+ |-- 3
127
+ `-- 12
148
128
  EOS
149
- @tree.to_str.should == out
129
+ @tree.to_str.should == out
130
+ end
131
+
150
132
  end
151
133
 
152
134
  end
@@ -6,27 +6,61 @@ describe TreeNodeVisitor do
6
6
  it "should initialize correctly" do
7
7
  visitor = TreeNodeVisitor.new do
8
8
 
9
- on_enter_tree_node do |tree_node|
9
+ on_enter_node do |tree_node|
10
10
  @entered_node = true
11
11
  end
12
12
 
13
- on_exit_tree_node do |tree_node|
13
+ on_exit_node do |tree_node|
14
14
  @exit_node = true
15
15
  end
16
16
 
17
- on_visit_leaf_node do |leaf_node|
17
+ on_leaf do |leaf_node|
18
18
  @visit_leaf = true
19
19
  end
20
20
  end
21
21
 
22
- visitor.enter_tree_node(nil)
22
+ visitor.enter_node(nil)
23
23
  visitor.instance_eval{ @entered_node }.should be_true
24
24
 
25
- visitor.exit_tree_node(nil)
25
+ visitor.exit_node(nil)
26
26
  visitor.instance_eval{ @exit_node }.should be_true
27
27
 
28
- visitor.visit_leaf_node(nil)
28
+ visitor.visit_leaf(nil)
29
29
  visitor.instance_eval{ @visit_leaf }.should be_true
30
30
  end
31
31
 
32
+ it "should initialize correctly" do
33
+ visitor = TreeNodeVisitor.new do
34
+
35
+ on_enter_node do |node, parent|
36
+ @node = node
37
+ @parent = parent
38
+ end
39
+
40
+ on_exit_node do |node, parent|
41
+ @node = node
42
+ @parent = parent
43
+ end
44
+
45
+ on_leaf do |leaf, parent|
46
+ @leaf = leaf
47
+ @parent = parent
48
+ end
49
+ end
50
+
51
+ visitor.instance_eval{ @stack = ["p"] }
52
+ visitor.enter_node("n")
53
+ visitor.instance_eval{ @node }.should == "n"
54
+ visitor.instance_eval{ @parent }.should == "p"
55
+ visitor.instance_eval{ @stack }.should have(2).node
56
+
57
+ visitor.exit_node("n")
58
+ visitor.instance_eval{ @node }.should == "n"
59
+ visitor.instance_eval{ @stack }.should have(1).node
60
+
61
+ visitor.instance_eval{ @stack = ["p"] }
62
+ visitor.visit_leaf("l")
63
+ visitor.instance_eval{ @leaf }.should == "l"
64
+ visitor.instance_eval{ @parent }.should == "p"
65
+ end
32
66
  end
@@ -1,8 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
3
3
 
4
- require 'treevisitor/visitors/block_tree_node_visitor'
5
-
6
4
  describe "Tree Node Visitors" do
7
5
 
8
6
  before do
@@ -1,8 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
3
3
 
4
- require 'treevisitor/visitors/callback_tree_node_visitor2'
5
-
6
4
  describe "Tree Node Visitors" do
7
5
 
8
6
  before do
@@ -18,10 +16,12 @@ describe "Tree Node Visitors" do
18
16
 
19
17
  it CallbackTreeNodeVisitor2 do
20
18
  visitor = CallbackTreeNodeVisitor2.new
21
- visitor.on_enter_tree_node{ |tree_node, new_parent_node|
19
+ visitor.on_enter_node{ |tree_node, new_parent_node|
20
+ # puts "**** #{tree_node}"
22
21
  TreeNode.new("n" + tree_node.content, new_parent_node)
23
22
  }
24
- visitor.on_visit_leaf_node{ |leaf_node, new_parent_node|
23
+ visitor.on_visit_leaf{ |leaf_node, new_parent_node|
24
+ # puts "**** #{leaf_node}"
25
25
  LeafNode.new( "n" + leaf_node.content, new_parent_node )
26
26
  }
27
27
  @tree.accept( visitor )
@@ -1,8 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
3
3
 
4
- require 'treevisitor/visitors/callback_tree_node_visitor'
5
-
6
4
  describe "Tree Node Visitors" do
7
5
 
8
6
  before do
@@ -19,8 +17,8 @@ describe "Tree Node Visitors" do
19
17
  it CallbackTreeNodeVisitor do
20
18
  accumulator = []
21
19
  visitor = CallbackTreeNodeVisitor.new
22
- visitor.on_enter_tree_node{ |tree_node| accumulator << tree_node.content }
23
- visitor.on_visit_leaf_node{ |leaf_node| accumulator << leaf_node.content }
20
+ visitor.on_enter_node{ |tree_node| accumulator << tree_node.content }
21
+ visitor.on_visit_leaf{ |leaf_node| accumulator << leaf_node.content }
24
22
  @tree.accept( visitor )
25
23
  accumulator.length.should == 5
26
24
  accumulator.should == %w{ a 1 2 b 3 }
@@ -1,8 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
3
3
 
4
- require 'treevisitor/visitors/depth_tree_node_visitor'
5
- require 'treevisitor/visitors/clone_tree_node_visitor'
6
4
 
7
5
  describe "Tree Node Visitors" do
8
6
 
data/tasks/jeweler.rake CHANGED
@@ -31,7 +31,6 @@ begin
31
31
  gem.files.concat Dir['tasks/**/*.rake']
32
32
  gem.files.concat Dir['examples/**/*']
33
33
 
34
-
35
34
  #
36
35
  # test files
37
36
  #
@@ -40,10 +39,6 @@ begin
40
39
  gem.test_files.concat Dir['spec/fixtures/**/.gitkeep']
41
40
  gem.test_files.concat Dir['spec/fixtures/**/.dir_with_dot/*']
42
41
 
43
- #
44
- # rubyforge
45
- #
46
- # gem.rubyforge_project = 'treevisitor'
47
42
  end
48
43
  Jeweler::GemcutterTasks.new
49
44
  rescue LoadError
data/treevisitor.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{treevisitor}
8
- s.version = "0.1.6"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Tokiro"]
12
- s.date = %q{2011-01-21}
12
+ s.date = %q{2011-02-01}
13
13
  s.default_executable = %q{tree.rb}
14
14
  s.description = %q{ Implementation of visitor design pattern. It contains a 'tree.rb'
15
15
  command line clone of the tree unix tool.
@@ -74,6 +74,7 @@ Gem::Specification.new do |s|
74
74
  "spec/treevisitor/tree_dsl_spec.rb",
75
75
  "spec/treevisitor/tree_dsl_with_derived_class1_spec.rb",
76
76
  "spec/treevisitor/tree_dsl_with_derived_class_spec.rb",
77
+ "spec/treevisitor/tree_node_paths_spec.rb",
77
78
  "spec/treevisitor/tree_node_spec.rb",
78
79
  "spec/treevisitor/util/dir_processor_spec.rb",
79
80
  "spec/treevisitor/visitor_dsl_spec.rb",
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
8
- - 6
9
- version: 0.1.6
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Tokiro
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-01-21 00:00:00 +01:00
17
+ date: 2011-02-01 00:00:00 +01:00
18
18
  default_executable: tree.rb
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -152,6 +152,7 @@ files:
152
152
  - spec/treevisitor/tree_dsl_spec.rb
153
153
  - spec/treevisitor/tree_dsl_with_derived_class1_spec.rb
154
154
  - spec/treevisitor/tree_dsl_with_derived_class_spec.rb
155
+ - spec/treevisitor/tree_node_paths_spec.rb
155
156
  - spec/treevisitor/tree_node_spec.rb
156
157
  - spec/treevisitor/util/dir_processor_spec.rb
157
158
  - spec/treevisitor/visitor_dsl_spec.rb
@@ -203,6 +204,7 @@ test_files:
203
204
  - spec/treevisitor/tree_dsl_spec.rb
204
205
  - spec/treevisitor/tree_dsl_with_derived_class1_spec.rb
205
206
  - spec/treevisitor/tree_dsl_with_derived_class_spec.rb
207
+ - spec/treevisitor/tree_node_paths_spec.rb
206
208
  - spec/treevisitor/tree_node_spec.rb
207
209
  - spec/treevisitor/util/dir_processor_spec.rb
208
210
  - spec/treevisitor/visitor_dsl_spec.rb