treevisitor 0.1.5 → 0.1.6

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 (51) hide show
  1. data/README.md +104 -0
  2. data/VERSION.yml +1 -1
  3. data/examples/{directory_without_subdirectory.rb → directory_walker/directory_without_subdirectory.rb} +6 -4
  4. data/examples/{find_files.rb → directory_walker/find_files.rb} +4 -3
  5. data/examples/{print_files.rb → directory_walker/print_files.rb} +5 -8
  6. data/examples/protovis/directory_to_json_visitor.rb +13 -0
  7. data/examples/protovis/index.html +87 -0
  8. data/examples/protovis/protovis-d3.2.js +15269 -0
  9. data/examples/protovis/treevisitor.js +33 -0
  10. data/examples/protovis/treevisitor.png +0 -0
  11. data/lib/treevisitor/basic_tree_node_visitor.rb +29 -0
  12. data/lib/treevisitor/cli/cli_tree.rb +43 -35
  13. data/lib/treevisitor/directory_walker.rb +260 -0
  14. data/lib/treevisitor/tree_node_visitor.rb +33 -5
  15. data/lib/treevisitor/{dir_processor.rb → util/dir_processor.rb} +0 -0
  16. data/lib/treevisitor/visitors/block_tree_node_visitor.rb +1 -1
  17. data/lib/treevisitor/visitors/build_dir_tree_visitor.rb +1 -1
  18. data/lib/treevisitor/visitors/callback_tree_node_visitor.rb +1 -2
  19. data/lib/treevisitor/visitors/callback_tree_node_visitor2.rb +1 -1
  20. data/lib/treevisitor/visitors/clone_tree_node_visitor.rb +1 -1
  21. data/lib/treevisitor/visitors/depth_tree_node_visitor.rb +1 -1
  22. data/lib/treevisitor/visitors/directory_to_hash_visitor.rb +33 -0
  23. data/lib/treevisitor/visitors/flat_print_tree_node_visitors.rb +1 -1
  24. data/lib/treevisitor/visitors/print_dir_tree_visitor.rb +1 -1
  25. data/lib/treevisitor/visitors/print_tree_node_visitor.rb +1 -1
  26. data/lib/treevisitor.rb +24 -8
  27. data/spec/fixtures/{test_dir → test_dir_1}/.dir_with_dot/dummy.txt +0 -0
  28. data/spec/fixtures/{test_dir → test_dir_1}/dir.1/dir.1.2/file.1.2.1 +0 -0
  29. data/spec/fixtures/{test_dir → test_dir_1}/dir.1/file.1.1 +0 -0
  30. data/spec/fixtures/{test_dir → test_dir_1}/dir.2/file.2.1 +0 -0
  31. data/spec/spec_helper.rb +6 -9
  32. data/spec/treevisitor/cli/cli_tree_spec.rb +5 -5
  33. data/spec/treevisitor/directory_walker_spec.rb +61 -0
  34. data/spec/treevisitor/tree_dsl_spec.rb +57 -0
  35. data/spec/treevisitor/tree_dsl_with_derived_class1_spec.rb +53 -0
  36. data/spec/treevisitor/tree_dsl_with_derived_class_spec.rb +51 -0
  37. data/spec/treevisitor/{dir_processor_spec.rb → util/dir_processor_spec.rb} +2 -4
  38. data/spec/treevisitor/visitor_dsl_spec.rb +32 -0
  39. data/spec/treevisitor/visitors/block_tree_node_visitor_spec.rb +27 -0
  40. data/spec/treevisitor/visitors/callback_tree_node_visitor2_spec.rb +38 -0
  41. data/spec/treevisitor/visitors/callback_tree_node_visitors_spec.rb +29 -0
  42. data/spec/treevisitor/visitors/depth_tree_node_visitor_spec.rb +30 -0
  43. data/tasks/jeweler.rake +4 -8
  44. data/treevisitor.gemspec +114 -0
  45. metadata +48 -29
  46. data/README.rdoc +0 -42
  47. data/lib/treevisitor/dir_tree_walker.rb +0 -165
  48. data/spec/treevisitor/dir_tree_walker_spec.rb +0 -50
  49. data/spec/treevisitor/tree_node_dsl_spec.rb +0 -153
  50. data/spec/treevisitor/tree_node_visitor_spec.rb +0 -70
  51. data/tasks/rubyforge.rake +0 -28
@@ -0,0 +1,33 @@
1
+ var treevisitor = {
2
+ "lib": {
3
+ "tree_visitor.rb": 45,
4
+ "treevisitor": {
5
+ "abs_node.rb": 2858,
6
+ "basic_tree_node_visitor.rb": 578,
7
+ "cli": {
8
+ "cli_tree.rb": 2760
9
+ },
10
+ "directory_walker.rb": 5049,
11
+ "leaf_node.rb": 526,
12
+ "tree_node.rb": 5665,
13
+ "tree_node_visitor.rb": 1263,
14
+ "util": {
15
+ "dir_processor.rb": 928
16
+ },
17
+ "visitors": {
18
+ "block_tree_node_visitor.rb": 386,
19
+ "build_dir_tree_visitor.rb": 1167,
20
+ "callback_tree_node_visitor.rb": 1029,
21
+ "callback_tree_node_visitor2.rb": 1652,
22
+ "clone_tree_node_visitor.rb": 837,
23
+ "depth_tree_node_visitor.rb": 427,
24
+ "directory_to_hash_visitor.rb": 639,
25
+ "flat_print_tree_node_visitors.rb": 341,
26
+ "print_dir_tree_visitor.rb": 387,
27
+ "print_tree_node_visitor.rb": 707
28
+ }
29
+ },
30
+ "treevisitor.rb": 976,
31
+ "treevisitor_cli.rb": 87
32
+ }
33
+ };
Binary file
@@ -0,0 +1,29 @@
1
+ # -*- coding: utf-8 -*-
2
+ module TreeVisitor
3
+ #
4
+ # Callback methods used to visit a tree
5
+ # Are empty so it is possible to define only a subset when deriving subclass
6
+ #
7
+ class BasicTreeNodeVisitor
8
+
9
+ #
10
+ # called on tree node at start of the visit i.e. we start to visit the subtree
11
+ #
12
+ def enter_tree_node( tree_node )
13
+ end
14
+
15
+ #
16
+ # called on tree node at end of the visit i.e. oll subtree are visited
17
+ #
18
+ def exit_tree_node( tree_node )
19
+ end
20
+
21
+ #
22
+ # called when visit leaf node
23
+ #
24
+ def visit_leaf_node( leaf_node )
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -6,23 +6,22 @@ module TreeVisitor
6
6
  class CliTree
7
7
 
8
8
  def self.run
9
- self.new.parse_args( ARGV )
9
+ self.new.parse_args(ARGV)
10
10
  end
11
11
 
12
- def parse_args( argv )
12
+ def parse_args(argv)
13
13
 
14
- options = { :verbose => true, :force => false, :algo => 'build' }
14
+ options = {:verbose => true, :force => false, :algo => 'build-dir'}
15
15
 
16
- opts = OptionParser.new
16
+ opts = OptionParser.new
17
17
  opts.banner = "Usage: tree.rb [options] [directory]"
18
-
19
- opts.separator ""
20
18
  opts.separator "list contents of directories in a tree-like format"
21
- opts.separator "this is a clone of tree unix command written in ruby"
22
-
19
+ opts.separator "this is a almost :-) a clone of tree unix command written in ruby"
20
+ opts.separator "Code https://github.com/tokiro/treevisitor. Feedback to tokiro.oyama@gmail.com"
21
+
23
22
  opts.separator ""
24
23
  opts.separator "options: "
25
-
24
+
26
25
  opts.on("-h", "--help", "Show this message") do
27
26
  puts opts
28
27
  return 0
@@ -48,49 +47,58 @@ module TreeVisitor
48
47
  opts.on("-q", "--quiet", "quiet mode as --no-verbose") do |v|
49
48
  options[:verbose] = false
50
49
  end
51
-
52
- algos = %w[build visit]
53
- algo_aliases = { "b" => "build", "v" => "visit" }
54
50
 
55
- algo_list = (algo_aliases.keys + algos).join(',')
56
- opts.on("--algo ALGO", algos, algo_aliases, "Select algo"," (#{algo_list})") do |algo|
51
+ algos = %w[build-dir print-dir json yaml]
52
+ algo_aliases = {"b" => "build-dir", "v" => "print-dir", "j" => "json", "y" => "yaml"}
53
+
54
+ algo_list = (algo_aliases.keys + algos).join(',')
55
+ opts.on("-f", "--format ALGO", algos, algo_aliases, "select an algo", " (#{algo_list})") do |algo|
57
56
  options[:algo] = algo
58
57
  end
59
58
 
60
- rest = opts.parse(argv)
61
-
62
- # p options
63
- # p ARGV
59
+ begin
60
+ rest = opts.parse(argv)
61
+ rescue OptionParser::InvalidOption => e
62
+ $stderr.puts e.to_s
63
+ $stderr.puts "try -h for help"
64
+ return false
65
+ end
64
66
 
65
67
  if rest.length < 1
66
- puts opts
67
- return 1
68
+ dirname = Dir.pwd
69
+ else
70
+ dirname = rest[0]
68
71
  end
69
72
 
70
- dirname = rest[0]
71
- dirname = File.expand_path( dirname )
73
+ dirname = File.expand_path(dirname)
72
74
 
73
- # puts "reading : #{dirname}"
74
-
75
- dtw = DirTreeWalker.new( dirname )
75
+ dtw = DirTreeWalker.new(dirname)
76
76
  unless options[:all_files]
77
- # TODO: la regex e' corretta ed un file che inizia con ".."??
78
77
  dtw.ignore(/^\.[^.]+/) # ignore all file starting with "."
79
78
  end
80
79
 
81
80
  dtw.visit_file = !options[:only_directories]
82
81
 
83
82
  case options[:algo]
84
- when 'build'
85
- visitor = BuildDirTreeVisitor.new
86
- dtw.run( visitor )
87
- puts visitor.root.to_str
88
- puts
89
- puts "#{visitor.nr_directories} directories, #{visitor.nr_files} files"
90
- when 'visit'
91
- visitor = PrintDirTreeVisitor.new
92
- dtw.run( visitor )
83
+ when 'build-dir'
84
+ visitor = BuildDirTreeVisitor.new
85
+ dtw.run(visitor)
86
+ puts visitor.root.to_str
87
+ puts
88
+ puts "#{visitor.nr_directories} directories, #{visitor.nr_files} files"
89
+ when 'print-dir'
90
+ visitor = PrintDirTreeVisitor.new
91
+ dtw.run(visitor)
92
+ when 'json'
93
+ root = dtw.run(DirectoryToHashVisitor.new(dirname)).root
94
+ puts JSON.pretty_generate(root)
95
+ when 'yaml'
96
+ root = dtw.run(DirectoryToHashVisitor.new(dirname)).root
97
+ puts root.to_yaml
98
+ else
99
+ puts "unknown algo #{options[:algo]} specified"
93
100
  end
101
+
94
102
  0
95
103
  end
96
104
 
@@ -0,0 +1,260 @@
1
+ # -*- coding: utf-8 -*-
2
+ module TreeVisitor
3
+
4
+ #
5
+ # Visit a file system directory
6
+ #
7
+ class DirTreeWalker
8
+
9
+ # Build a tree walker.
10
+ # Visit a director starting from dirname
11
+ # if dirname is missing, must be supplied when invoking run
12
+ #
13
+ # @yield [a, b, c] TreeNodeVisitor
14
+ # @yieldparam [optional, types, ...] argname description
15
+ # @yieldreturn [optional, types, ...] description
16
+ #
17
+ # @overload initialize(dirname)
18
+ # @param [String] dirname the root of the tree (top level directory)
19
+ #
20
+ # @overload initialize(dirname,options)
21
+ # @param [Hash] options
22
+ # @option options [String,Regex, Array<String,Regexp>] :ignore list of ignore pattern
23
+ #
24
+ #
25
+ # @example Print the contents of tmp directory
26
+ # DirTreeWalker.new("/tmp") do
27
+ # on_visit_leaf_node { |pathname| puts pathname }
28
+ # end.run
29
+ #
30
+ def initialize(dirname = nil, options = nil)
31
+ #
32
+ # arg detection
33
+ #
34
+ if dirname and dirname.respond_to?(:key?)
35
+ options = dirname
36
+ dirname = nil
37
+ end
38
+
39
+ if dirname
40
+ @dirname = dirname
41
+ unless File.directory?(dirname)
42
+ raise "#{dirname} is not a directory!"
43
+ end
44
+ end
45
+
46
+ @visitor = nil
47
+
48
+ #
49
+ # pattern
50
+ #
51
+ @ignore_dir_patterns = []
52
+ @ignore_file_patterns = []
53
+ @match_file_patterns = []
54
+
55
+ if options and options[:ignore]
56
+ unless options[:ignore].respond_to?(:at)
57
+ options[:ignore] = [options[:ignore]]
58
+ end
59
+ options[:ignore].each { |p| ignore(p) }
60
+ end
61
+
62
+ #
63
+ # options
64
+ #
65
+ @visit_file = true
66
+ end
67
+
68
+ ##########################################################################
69
+ # Pattern
70
+
71
+ #
72
+ # Ignore a node (leaf/Tree) matching pattern
73
+ # @param [RegEx] pattern
74
+ #
75
+ def ignore(pattern)
76
+ @ignore_dir_patterns << pattern
77
+ @ignore_file_patterns << pattern
78
+ self
79
+ end
80
+
81
+ #
82
+ # Ignore a directory (Tree) matching pattern
83
+ # @param [RegEx] pattern
84
+ #
85
+ def ignore_dir(pattern)
86
+ @ignore_dir_patterns << pattern
87
+ self
88
+ end
89
+
90
+ #
91
+ # Ignore a file (Leaf) matching pattern
92
+ # @param [RegEx] pattern
93
+ #
94
+ def ignore_file(pattern)
95
+ @ignore_file_patterns << pattern
96
+ self
97
+ end
98
+
99
+ #
100
+ # Just the opposite of ignore
101
+ # directory/file matching pattern will be visited
102
+ #
103
+ # @param [RegEx] pattern
104
+ #
105
+ def match(pattern)
106
+ @match_file_patterns << pattern
107
+ self
108
+ end
109
+
110
+ ##########################################################################
111
+ # Options
112
+
113
+ #
114
+ # it is true to visit file
115
+ #
116
+ attr_accessor :visit_file
117
+
118
+ ##########################################################################
119
+
120
+ #
121
+ # Test directory ignore pattern
122
+ #
123
+ # @param [String] directory name
124
+ # @return [boolean] if dirname match almost one pattern
125
+ #
126
+ def ignore_dir?(dirname)
127
+ _include?(@ignore_dir_patterns, File.basename(dirname))
128
+ end
129
+
130
+ #
131
+ # Test file ignore pattern
132
+ #
133
+ # @param [String] file name
134
+ # @return [boolean] if filename match almost one pattern
135
+ #
136
+ def ignore_file?(filename)
137
+ _include?(@ignore_file_patterns, File.basename(filename))
138
+ end
139
+
140
+ #
141
+ # Test common ignore pattern
142
+ #
143
+ # @param [String] file name
144
+ # @return [boolean] if filename match almost one pattern
145
+ #
146
+ def match?(filename)
147
+ return true if @match_file_patterns.empty?
148
+ _include?(@match_file_patterns, File.basename(filename))
149
+ end
150
+
151
+ #
152
+ # Run the visitor through the directory tree
153
+ #
154
+ # @overload run
155
+ #
156
+ # @overload run(dirname)
157
+ # @param [String] dirname
158
+ # @yield define TreeNodeVisitor
159
+ #
160
+ # @overload run(tree_node_visitor)
161
+ # @param [TreeNodeVisitor]
162
+ # @yield define TreeNodeVisitor
163
+ #
164
+ # @overload run(dirname, tree_node_visitor)
165
+ # @param [String] dirname
166
+ # @param [TreeNodeVisitor]
167
+ # @yield define TreeNodeVisitor
168
+ #
169
+ # @return [TreeNodeVisitor] the visitor
170
+ #
171
+ # @example Print the contents of tmp directory
172
+ # w = DirTreeWalker.new
173
+ # w.run("/tmp") do
174
+ # on_visit_leaf_node { |pathname| puts pathname }
175
+ # end.run
176
+ #
177
+ def run(dirname = nil, tree_node_visitor = nil, &block)
178
+
179
+ #
180
+ # args detection
181
+ #
182
+ if dirname and dirname.respond_to?(:enter_tree_node)
183
+ tree_node_visitor = dirname
184
+ dirname = nil
185
+ end
186
+
187
+ #
188
+ # check dirname
189
+ #
190
+ if @dirname.nil? and dirname.nil?
191
+ raise "missing starting directory"
192
+ end
193
+ @dirname = dirname if dirname
194
+
195
+ #
196
+ # check visitor
197
+ #
198
+ if tree_node_visitor and block
199
+ raise "cannot use block and parameter together"
200
+ end
201
+
202
+ if tree_node_visitor
203
+ @visitor = tree_node_visitor
204
+ end
205
+
206
+ if block
207
+ @visitor = TreeNodeVisitor.new(&block)
208
+ end
209
+
210
+ unless @visitor
211
+ raise "missing visitor"
212
+ end
213
+
214
+ #
215
+ # finally starts to process
216
+ #
217
+ process_directory(File.expand_path(@dirname))
218
+ @visitor
219
+ end
220
+
221
+ private
222
+
223
+ def _include?(patterns, basename)
224
+ # return false if the patters.empty?
225
+ patterns.find { |pattern|
226
+ if pattern.kind_of? Regexp
227
+ pattern.match(basename)
228
+ else
229
+ basename == pattern
230
+ end
231
+ }
232
+ end
233
+
234
+ #
235
+ # recurse on other directories
236
+ #
237
+ def process_directory(dirname)
238
+ @visitor.enter_tree_node(dirname)
239
+ # return if ignore_dir?( dirname )
240
+
241
+ begin
242
+ Dir.entries(dirname).sort.each { |basename|
243
+ next if basename == "." or basename == ".." # ignore always "." and ".."
244
+ pathname = File.join(dirname, basename)
245
+
246
+ if File.directory?(pathname)
247
+ process_directory(pathname) unless ignore_dir?(basename)
248
+ else
249
+ if !!@visit_file && match?(basename) && !ignore_file?(basename)
250
+ @visitor.visit_leaf_node(pathname)
251
+ end
252
+ end
253
+ }
254
+ rescue Errno::EACCES => e
255
+ $stderr.puts e
256
+ end
257
+ @visitor.exit_tree_node(dirname)
258
+ end
259
+ end
260
+ end
@@ -1,27 +1,55 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  module TreeVisitor
3
3
  #
4
- # Callback methods used to visit a tree
5
- # Are empty so it is possible to define only a subset
4
+ # More complex TreeNodeVisitor
6
5
  #
7
6
  class TreeNodeVisitor
8
7
 
8
+ def initialize(&block)
9
+ @on_enter_tree_node_blocks = []
10
+ @on_exit_tree_node_blocks = []
11
+ @on_visit_leaf_node_blocks = []
12
+ if block
13
+ instance_eval(&block)
14
+ end
15
+ end
16
+
9
17
  #
10
18
  # called on tree node at start of the visit i.e. we start to visit the subtree
11
19
  #
12
- def enter_tree_node( tree_node )
20
+ def enter_tree_node(tree_node)
21
+ @on_enter_tree_node_blocks.each{ |b| b.call(tree_node) }
13
22
  end
14
23
 
15
24
  #
16
25
  # called on tree node at end of the visit i.e. oll subtree are visited
17
26
  #
18
- def exit_tree_node( tree_node )
27
+ def exit_tree_node(tree_node)
28
+ @on_exit_tree_node_blocks.each{ |b| b.call(tree_node) }
19
29
  end
20
30
 
21
31
  #
22
32
  # called when visit leaf node
23
33
  #
24
- def visit_leaf_node( leaf_node )
34
+ def visit_leaf_node(leaf_node)
35
+ @on_visit_leaf_node_blocks.each{ |b| b.call(leaf_node) }
36
+ end
37
+
38
+ private
39
+
40
+ def on_enter_tree_node(&block)
41
+ raise "block missing" unless block
42
+ @on_enter_tree_node_blocks << block
43
+ end
44
+
45
+ def on_exit_tree_node(&block)
46
+ raise "block missing" unless block
47
+ @on_exit_tree_node_blocks << block
48
+ end
49
+
50
+ def on_visit_leaf_node(&block)
51
+ raise "block missing" unless block
52
+ @on_visit_leaf_node_blocks << block
25
53
  end
26
54
 
27
55
  end
@@ -3,7 +3,7 @@ module TreeVisitor
3
3
  #
4
4
  # It calls a block when visit a tree_node or leaf_node
5
5
  #
6
- class BlockTreeNodeVisitor < TreeNodeVisitor
6
+ class BlockTreeNodeVisitor < BasicTreeNodeVisitor
7
7
 
8
8
  def initialize( &action )
9
9
  @block = action
@@ -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 < TreeNodeVisitor
7
+ class BuildDirTreeVisitor < BasicTreeNodeVisitor
8
8
 
9
9
  attr_reader :root
10
10
 
@@ -5,10 +5,9 @@ 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 < TreeNodeVisitor
8
+ class CallbackTreeNodeVisitor < BasicTreeNodeVisitor
9
9
 
10
10
  def initialize
11
- super()
12
11
  @root = nil
13
12
  @stack = []
14
13
  @action_enter_tree_node = nil
@@ -5,7 +5,7 @@ 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 < TreeNodeVisitor
8
+ class CallbackTreeNodeVisitor2 < BasicTreeNodeVisitor
9
9
 
10
10
  attr_reader :root
11
11
 
@@ -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 < TreeNodeVisitor
7
+ class CloneTreeNodeVisitor < BasicTreeNodeVisitor
8
8
 
9
9
  #
10
10
  # Contains the cloned tree node after the visit
@@ -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 < TreeNodeVisitor
6
+ class DepthTreeNodeVisitor < BasicTreeNodeVisitor
7
7
 
8
8
  attr_reader :depth
9
9
 
@@ -0,0 +1,33 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module TreeVisitor
4
+ #
5
+ # Build hash with directory structure
6
+ #
7
+ class DirectoryToHashVisitor < TreeVisitor::BasicTreeNodeVisitor
8
+
9
+ attr_reader :root
10
+
11
+ def initialize(pathname)
12
+ @stack = []
13
+ @node = {}
14
+ @root = @node
15
+ end
16
+
17
+ def enter_tree_node(pathname)
18
+ subnode = {}
19
+ @node[File.basename(pathname)] = subnode
20
+ @stack.push(@node)
21
+ @node = subnode
22
+ end
23
+
24
+ def exit_tree_node(pathname)
25
+ @node = @stack.pop
26
+ end
27
+
28
+ def visit_leaf_node(pathname)
29
+ @node[File.basename(pathname)] = File.stat(pathname).size
30
+ end
31
+
32
+ end
33
+ end
@@ -3,7 +3,7 @@ module TreeVisitor
3
3
  #
4
4
  # Print for every node the name
5
5
  #
6
- class FlatPrintTreeNodeVisitor < TreeNodeVisitor
6
+ class FlatPrintTreeNodeVisitor < BasicTreeNodeVisitor
7
7
 
8
8
  def enter_tree_node( tree_node )
9
9
  puts tree_node.name
@@ -4,7 +4,7 @@ module TreeVisitor
4
4
  # Visitor for DirTreeWalker
5
5
  # Prints the node at enter
6
6
  # TODO: join this con PrintTreeNodeVisitor
7
- class PrintDirTreeVisitor < TreeNodeVisitor
7
+ class PrintDirTreeVisitor < BasicTreeNodeVisitor
8
8
 
9
9
  def enter_tree_node( pathname )
10
10
  puts pathname
@@ -3,7 +3,7 @@ module TreeVisitor
3
3
  #
4
4
  # Prints TreeNode names indenting according to depth
5
5
  #
6
- class PrintTreeNodeVisitor < TreeNodeVisitor
6
+ class PrintTreeNodeVisitor < BasicTreeNodeVisitor
7
7
 
8
8
  def initialize
9
9
  @depth = 0
data/lib/treevisitor.rb CHANGED
@@ -1,10 +1,21 @@
1
1
  # -*- coding: utf-8 -*-
2
- # rubygems
3
- require "rubygems"
4
- require "abstract"
2
+
3
+ #
4
+ # std lib
5
+ #
5
6
  require 'pathname'
6
7
  require 'yaml'
7
8
 
9
+ #
10
+ # rubygems
11
+ #
12
+ require 'rubygems'
13
+ require 'json'
14
+
15
+ #
16
+ # treevisitor
17
+ #
18
+
8
19
  module TreeVisitor
9
20
  def self.version
10
21
  cwd = Pathname(__FILE__).dirname.expand_path.to_s
@@ -18,13 +29,18 @@ end
18
29
 
19
30
  require "treevisitor/abs_node"
20
31
  require 'treevisitor/leaf_node'
21
- require 'treevisitor/tree_node_visitor.rb'
22
-
23
32
  require 'treevisitor/tree_node'
24
- require 'treevisitor/dir_tree_walker'
33
+ require 'treevisitor/basic_tree_node_visitor'
25
34
  require 'treevisitor/tree_node_visitor'
26
- require 'treevisitor/dir_processor'
27
35
 
28
- require 'treevisitor/visitors/block_tree_node_visitor.rb'
36
+ require 'treevisitor/directory_walker'
37
+
38
+ #
39
+ # visitors
40
+ #
41
+ require 'treevisitor/visitors/block_tree_node_visitor'
29
42
  require 'treevisitor/visitors/build_dir_tree_visitor'
30
43
  require 'treevisitor/visitors/print_dir_tree_visitor'
44
+ require 'treevisitor/visitors/directory_to_hash_visitor'
45
+
46
+ require 'treevisitor/util/dir_processor'