gf-treevisitor 0.0.6 → 0.0.8
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/README.rdoc +28 -9
- data/VERSION +1 -0
- data/bin/{dirtree.rb → tree.rb} +3 -7
- data/lib/{gf_utility → gf_utilities}/file_utilities.rb +1 -1
- data/lib/{gf_utility → gf_utilities}/kwartzhelper.rb +8 -0
- data/lib/gf_utilities/md5.rb +24 -0
- data/lib/{gf_utility → gf_utilities}/numeric.rb +0 -0
- data/lib/treevisitor.rb +1 -1
- data/lib/treevisitor/cli/{cli_dir_tree.rb → cli_tree.rb} +36 -17
- data/lib/treevisitor/dir_tree_walker.rb +51 -34
- data/lib/treevisitor/tree_node_visitor.rb +0 -220
- data/lib/treevisitor/visitors/block_tree_node_visitor.rb +24 -0
- data/lib/treevisitor/{build_dir_tree_visitor.rb → visitors/build_dir_tree_visitor.rb} +7 -19
- data/lib/treevisitor/visitors/callback_tree_node_visitor.rb +43 -0
- data/lib/treevisitor/visitors/callback_tree_node_visitor2.rb +45 -0
- data/lib/treevisitor/visitors/clone_tree_node_visitor.rb +33 -0
- data/lib/treevisitor/visitors/depth_tree_node_visitor.rb +24 -0
- data/lib/treevisitor/visitors/flat_print_tree_node_visitors.rb +18 -0
- data/lib/treevisitor/visitors/print_dir_tree_visitor.rb +18 -0
- data/lib/treevisitor/{visitor → visitors}/print_node_visitor2.rb +0 -0
- data/lib/treevisitor/visitors/print_tree_node_visitor.rb +35 -0
- data/test/{gf_utility → gf_utilities}/tc_kwartz.rb +11 -3
- data/test/gf_utilities/tc_md5.rb +14 -0
- data/test/{gf_utility → gf_utilities}/tc_numeric.rb +1 -1
- data/test/{gf_utility → gf_utilities}/test_helper.rb +0 -0
- data/test/treevisitor/cli/tc_cli_tree.rb +61 -0
- data/test/treevisitor/tc_dir_processor.rb +6 -1
- data/test/treevisitor/tc_dir_tree_walker.rb +19 -9
- data/test/treevisitor/tc_tree_node_visitor.rb +5 -0
- data/test/treevisitor/test_helper.rb +13 -2
- data/test_data/gf_utility/kwartz_test_data/out.certified/dummy.txt +1 -0
- data/test_data/gf_utility/kwartz_test_data/out/dummy.txt +1 -0
- data/test_data/gf_utility/kwartz_test_data/source/test1.plogic +16 -0
- data/test_data/tree_visitor/test_data/.dir_with_dot/dummy.txt +0 -0
- metadata +30 -17
- data/lib/gf_utility/md5.rb +0 -17
- data/test/gf_utility/tc_md5.rb +0 -14
- data/test/ts_treevisitor.rb +0 -16
data/README.rdoc
CHANGED
@@ -1,21 +1,40 @@
|
|
1
|
-
=
|
1
|
+
= tree.rb / tree visitor library
|
2
2
|
|
3
|
-
|
4
|
-
It is based on lib tree visitor.
|
3
|
+
+dirtree.rb+ is a 'clone' of tree unix command. It is based on lib tree visitor.
|
5
4
|
|
6
5
|
Tree visitor is an implementation of visitor design pattern.
|
7
6
|
|
7
|
+
# $ tree.rb lib
|
8
|
+
# lib
|
9
|
+
# | | treevisitor.rb
|
10
|
+
# |-treevisitor
|
11
|
+
# | | abs_node.rb
|
12
|
+
# | | dir_processor.rb
|
13
|
+
# | | dir_tree_walker.rb
|
14
|
+
# | | leaf_node.rb
|
15
|
+
# | | tree_node.rb
|
16
|
+
# | | tree_node_visitor.rb
|
17
|
+
# |- |-cli
|
18
|
+
# |- | cli_tree.rb
|
19
|
+
# |- |-visitors
|
20
|
+
# |- | print_node_visitor2.rb
|
21
|
+
# |- | build_dir_tree_visitor.rb
|
22
|
+
# |- | print_dir_tree_visitor.rb
|
23
|
+
# |- | block_tree_node_visitor.rb
|
24
|
+
# |- | flat_print_tree_node_visitors.rb
|
25
|
+
# |- | print_tree_node_visitor.rb
|
26
|
+
# |- | depth_tree_node_visitor.rb
|
27
|
+
# |- | clone_tree_node_visitor.rb
|
28
|
+
# |- | callback_tree_node_visitor.rb
|
29
|
+
# |- | callback_tree_node_visitor2.rb
|
30
|
+
|
8
31
|
== REQUIREMENTS:
|
9
32
|
|
10
|
-
*
|
33
|
+
* require abstract gem
|
11
34
|
|
12
35
|
== INSTALL:
|
13
36
|
|
14
|
-
sudo gem install
|
15
|
-
|
16
|
-
or
|
17
|
-
|
18
|
-
sudo gem install gf-tree_visitor -s gems.github.com
|
37
|
+
To install +sudo gem install treevisitor+ or +sudo gem install gf-treevisitor -s http://gems.github.com+
|
19
38
|
|
20
39
|
== Copyright
|
21
40
|
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.8
|
data/bin/{dirtree.rb → tree.rb}
RENAMED
@@ -1,13 +1,9 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
#
|
3
|
-
#
|
4
|
-
# clidirtree
|
5
|
-
#
|
3
|
+
# Wrapper for the class CliTree
|
6
4
|
|
7
5
|
$TREEVISITOR_HOME = File.expand_path( File.join( File.dirname( __FILE__), ".." ) )
|
8
6
|
$:.unshift( File.join($TREEVISITOR_HOME, "lib" ) )
|
9
7
|
|
10
|
-
require "treevisitor/cli/
|
11
|
-
|
12
|
-
CliDirTree.run
|
13
|
-
exit
|
8
|
+
require "treevisitor/cli/cli_tree"
|
9
|
+
CliTree.run
|
@@ -9,6 +9,14 @@ rescue LoadError
|
|
9
9
|
abort 'kwartz gem required!!'
|
10
10
|
end
|
11
11
|
|
12
|
+
|
13
|
+
# ruby 1.9
|
14
|
+
# cambiare alla linea 73 kwartz/main.rb la linea seguente:
|
15
|
+
# return @_option_table.find { |row| row[1] == key }
|
16
|
+
# con
|
17
|
+
# return @_option_table.find { |row| row[1][0] == key[0] }
|
18
|
+
|
19
|
+
|
12
20
|
#
|
13
21
|
# kwartz utility
|
14
22
|
# template_dir: directory containing kwartz template
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#
|
2
|
+
# calculate md5 of big files, found on usenet
|
3
|
+
#
|
4
|
+
|
5
|
+
if RUBY_VERSION =~ /1\.8/
|
6
|
+
# stdlib
|
7
|
+
require 'md5'
|
8
|
+
else
|
9
|
+
# stdlib
|
10
|
+
require 'digest/md5'
|
11
|
+
include Digest
|
12
|
+
end
|
13
|
+
|
14
|
+
class MD5
|
15
|
+
def self.file(file)
|
16
|
+
File.open(file, "rb") do |f|
|
17
|
+
res = self.new
|
18
|
+
while (data = f.read(4096))
|
19
|
+
res << data
|
20
|
+
end
|
21
|
+
res
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
File without changes
|
data/lib/treevisitor.rb
CHANGED
@@ -1,14 +1,16 @@
|
|
1
1
|
# stdlib
|
2
2
|
require 'optparse'
|
3
3
|
|
4
|
-
#
|
4
|
+
# treevisitor
|
5
|
+
require 'treevisitor'
|
5
6
|
require 'treevisitor/dir_tree_walker'
|
6
|
-
require 'treevisitor/
|
7
|
+
require 'treevisitor/visitors/build_dir_tree_visitor'
|
8
|
+
require 'treevisitor/visitors/print_dir_tree_visitor'
|
7
9
|
|
8
10
|
#
|
9
11
|
#
|
10
12
|
#
|
11
|
-
class
|
13
|
+
class CliTree
|
12
14
|
|
13
15
|
def self.run
|
14
16
|
self.new.parse_args( ARGV )
|
@@ -19,15 +21,33 @@ class CliDirTree
|
|
19
21
|
options = { :verbose => true, :force => false, :algo => 'build' }
|
20
22
|
|
21
23
|
opts = OptionParser.new
|
22
|
-
opts.banner = "Usage:
|
24
|
+
opts.banner = "Usage: tree.rb [options] [directory]"
|
23
25
|
|
24
26
|
opts.separator ""
|
25
|
-
opts.separator "
|
26
|
-
opts.separator "
|
27
|
+
opts.separator "list contents of directories in a tree-like format"
|
28
|
+
opts.separator "this is a clone of tree unix command written in ruby"
|
27
29
|
|
28
30
|
opts.separator ""
|
29
|
-
opts.separator "
|
31
|
+
opts.separator "options: "
|
30
32
|
|
33
|
+
opts.on("-h", "--help", "Show this message") do
|
34
|
+
puts opts
|
35
|
+
return 0
|
36
|
+
end
|
37
|
+
|
38
|
+
opts.on("--version", "Show the version") do
|
39
|
+
puts "tree.rb version #{TreeVisitor::VERSION}"
|
40
|
+
return 0
|
41
|
+
end
|
42
|
+
|
43
|
+
opts.on("-a", "All file are listed") do |v|
|
44
|
+
options[:all_files] = true
|
45
|
+
end
|
46
|
+
|
47
|
+
opts.on("-d", "List directories only") do |v|
|
48
|
+
options[:only_directories] = true
|
49
|
+
end
|
50
|
+
|
31
51
|
opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
|
32
52
|
options[:verbose] = v
|
33
53
|
end
|
@@ -36,17 +56,11 @@ class CliDirTree
|
|
36
56
|
options[:verbose] = false
|
37
57
|
end
|
38
58
|
|
39
|
-
opts.on("-h", "--help", "Show this message") do
|
40
|
-
puts opts
|
41
|
-
exit
|
42
|
-
end
|
43
|
-
|
44
|
-
|
45
59
|
algos = %w[build visit]
|
46
60
|
algo_aliases = { "b" => "build", "v" => "visit" }
|
47
61
|
|
48
62
|
algo_list = (algo_aliases.keys + algos).join(',')
|
49
|
-
opts.on("
|
63
|
+
opts.on("--algo ALGO", algos, algo_aliases, "Select algo"," (#{algo_list})") do |algo|
|
50
64
|
options[:algo] = algo
|
51
65
|
end
|
52
66
|
|
@@ -63,17 +77,22 @@ class CliDirTree
|
|
63
77
|
dirname = rest[0]
|
64
78
|
dirname = File.expand_path( dirname )
|
65
79
|
|
66
|
-
puts "reading : #{dirname}"
|
80
|
+
# puts "reading : #{dirname}"
|
67
81
|
|
68
82
|
dtw = DirTreeWalker.new( dirname )
|
69
|
-
|
70
|
-
|
83
|
+
unless options[:all_files]
|
84
|
+
dtw.add_ignore_pattern(/^\.[^.]+/) # ignore all file starting with "."
|
85
|
+
end
|
86
|
+
|
87
|
+
dtw.visit_leaf = !options[:only_directories]
|
71
88
|
|
72
89
|
case options[:algo]
|
73
90
|
when 'build'
|
74
91
|
visitor = BuildDirTreeVisitor.new
|
75
92
|
dtw.run( visitor )
|
76
93
|
puts visitor.root.to_str
|
94
|
+
puts
|
95
|
+
puts "#{visitor.nr_directories} directories, #{visitor.nr_files} files"
|
77
96
|
when 'visit'
|
78
97
|
visitor = PrintDirTreeVisitor.new
|
79
98
|
dtw.run( visitor )
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'treevisitor/visitors/block_tree_node_visitor'
|
2
|
+
|
1
3
|
class DirTreeWalker
|
2
4
|
|
3
5
|
def initialize( dirname )
|
@@ -7,9 +9,28 @@ class DirTreeWalker
|
|
7
9
|
end
|
8
10
|
|
9
11
|
@visitor = nil
|
12
|
+
|
13
|
+
#
|
14
|
+
# pattern
|
15
|
+
#
|
10
16
|
@ignore_dir_patterns = []
|
11
|
-
@inspect_file_patterns = []
|
12
17
|
@ignore_file_patterns = []
|
18
|
+
|
19
|
+
@inspect_file_patterns = []
|
20
|
+
|
21
|
+
#
|
22
|
+
# options
|
23
|
+
#
|
24
|
+
|
25
|
+
@visit_leaf = true
|
26
|
+
end
|
27
|
+
|
28
|
+
##########################################################################
|
29
|
+
# Pattern
|
30
|
+
#
|
31
|
+
def add_ignore_pattern(pattern)
|
32
|
+
@ignore_dir_patterns << pattern
|
33
|
+
@ignore_file_patterns << pattern
|
13
34
|
end
|
14
35
|
|
15
36
|
def add_ignore_dir( pattern )
|
@@ -28,34 +49,25 @@ class DirTreeWalker
|
|
28
49
|
@inspect_file_patterns << pattern
|
29
50
|
end
|
30
51
|
|
52
|
+
##########################################################################
|
53
|
+
# Options
|
54
|
+
|
55
|
+
attr_accessor :visit_leaf
|
56
|
+
|
57
|
+
##########################################################################
|
58
|
+
|
59
|
+
|
31
60
|
def ignore_dir?( dirname )
|
32
|
-
|
33
|
-
@ignore_dir_patterns.find{ |pattern|
|
34
|
-
basename == pattern
|
35
|
-
}
|
61
|
+
include?( @ignore_dir_patterns, File.basename( dirname ) )
|
36
62
|
end
|
37
63
|
|
38
64
|
def ignore_file?( filename )
|
39
|
-
|
40
|
-
@ignore_file_patterns.find{ |pattern|
|
41
|
-
if pattern.kind_of? Regexp
|
42
|
-
pattern =~ basename
|
43
|
-
else
|
44
|
-
pattern == basename
|
45
|
-
end
|
46
|
-
}
|
65
|
+
include?( @ignore_file_patterns, File.basename( filename ) )
|
47
66
|
end
|
48
67
|
|
49
68
|
def inspect_file?( filename )
|
50
69
|
return true if @inspect_file_patterns.empty?
|
51
|
-
|
52
|
-
@inspect_file_patterns.find{ |pattern|
|
53
|
-
if pattern.kind_of? Regexp
|
54
|
-
pattern =~ basename
|
55
|
-
else
|
56
|
-
pattern == basename
|
57
|
-
end
|
58
|
-
}
|
70
|
+
include?( @inspect_file_patterns, File.basename( filename ) )
|
59
71
|
end
|
60
72
|
|
61
73
|
def run( treeNodeVisitor )
|
@@ -65,33 +77,38 @@ class DirTreeWalker
|
|
65
77
|
|
66
78
|
private
|
67
79
|
|
80
|
+
def include?(patterns, basename)
|
81
|
+
# return false if the patters.empty?
|
82
|
+
patterns.find{ |pattern|
|
83
|
+
if pattern.respond_to?(:match) # or if pattern.kind_of? Regexp
|
84
|
+
pattern.match( basename )
|
85
|
+
else
|
86
|
+
basename == pattern
|
87
|
+
end
|
88
|
+
}
|
89
|
+
end
|
90
|
+
|
68
91
|
#
|
69
92
|
# recurse on other directories
|
70
93
|
#
|
71
94
|
# def process_directory( parentNode, dirname )
|
72
95
|
def process_directory( dirname )
|
73
|
-
return if ignore_dir?( dirname )
|
74
|
-
|
75
96
|
@visitor.enter_treeNode( dirname )
|
97
|
+
# return if ignore_dir?( dirname )
|
76
98
|
|
77
99
|
Dir.entries( dirname ).each { |basename|
|
78
|
-
next if basename == "." or basename == ".."
|
100
|
+
next if basename == "." or basename == ".." # ignore always "." and ".."
|
79
101
|
pathname = File.join( dirname, basename )
|
80
102
|
|
81
103
|
if File.directory?( pathname )
|
82
|
-
|
83
104
|
# directory
|
84
|
-
|
85
|
-
process_directory( pathname )
|
86
|
-
end
|
87
|
-
|
105
|
+
process_directory( pathname ) unless ignore_dir?( basename )
|
88
106
|
else
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
107
|
+
if @visit_leaf
|
108
|
+
if inspect_file?( basename ) && ! ignore_file?( basename )
|
109
|
+
@visitor.visit_leafNode( pathname )
|
110
|
+
end
|
93
111
|
end
|
94
|
-
|
95
112
|
end
|
96
113
|
}
|
97
114
|
@visitor.exit_treeNode( dirname )
|
@@ -21,231 +21,11 @@ class TreeNodeVisitor
|
|
21
21
|
|
22
22
|
end
|
23
23
|
|
24
|
-
#
|
25
|
-
# Utilizzo della classa astratta DirTreeProcessor
|
26
|
-
# per chimare un blocco su tutti i TreeNode
|
27
|
-
#
|
28
|
-
class BlockTreeNodeVisitor
|
29
|
-
|
30
|
-
def initialize( &action )
|
31
|
-
@block = action
|
32
|
-
end
|
33
|
-
|
34
|
-
def enter_treeNode( treeNode )
|
35
|
-
@block.call( treeNode )
|
36
|
-
end
|
37
|
-
|
38
|
-
def exit_treeNode( treeNode )
|
39
|
-
end
|
40
|
-
|
41
|
-
def visit_leafNode( leafNode )
|
42
|
-
@block.call( leafNode )
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
#
|
48
|
-
# Utilizzo della classa astratta DirTreeProcessor
|
49
|
-
# per stampare i nodi di un TreeNode
|
50
|
-
#
|
51
|
-
class FlatPrintTreeNodeVisitor < TreeNodeVisitor
|
52
|
-
|
53
|
-
def enter_treeNode( treeNode )
|
54
|
-
puts treeNode.name
|
55
|
-
end
|
56
|
-
|
57
|
-
def exit_treeNode( treeNode )
|
58
|
-
end
|
59
|
-
|
60
|
-
def visit_leafNode( leafNode )
|
61
|
-
puts leafNode.name
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
65
|
-
|
66
|
-
|
67
|
-
class PrintTreeNodeVisitor < TreeNodeVisitor
|
68
|
-
|
69
|
-
def initialize( *args )
|
70
|
-
super( *args )
|
71
|
-
@depth = 0
|
72
|
-
end
|
73
|
-
|
74
|
-
def visit_leafNode( leafNode )
|
75
|
-
str = ""
|
76
|
-
(0...@depth-1).step {
|
77
|
-
str << " |-"
|
78
|
-
}
|
79
|
-
str << " | "
|
80
|
-
puts str + leafNode.name.to_s
|
81
|
-
end
|
82
|
-
|
83
|
-
def enter_treeNode( treeNode )
|
84
|
-
|
85
|
-
str = ""
|
86
|
-
(0...@depth).step {
|
87
|
-
str << " |-"
|
88
|
-
}
|
89
|
-
|
90
|
-
if @depth == 0
|
91
|
-
puts str + treeNode.name.to_s
|
92
|
-
else
|
93
|
-
puts str + treeNode.name.to_s
|
94
|
-
end
|
95
|
-
@depth += 1
|
96
|
-
end
|
97
|
-
|
98
|
-
def exit_treeNode( treeNode )
|
99
|
-
@depth -= 1
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
|
104
|
-
#
|
105
|
-
#
|
106
|
-
#
|
107
|
-
class DepthTreeNodeVisitor < TreeNodeVisitor
|
108
|
-
|
109
|
-
attr_reader :depth
|
110
|
-
|
111
|
-
def initialize
|
112
|
-
super
|
113
|
-
@depth = 0
|
114
|
-
end
|
115
|
-
|
116
|
-
def enter_treeNode( treeNode )
|
117
|
-
@depth += 1
|
118
|
-
end
|
119
|
-
|
120
|
-
def exit_treeNode( treeNode )
|
121
|
-
@depth -= 1
|
122
|
-
end
|
123
24
|
|
124
|
-
def visit_leafNode( leafNode )
|
125
|
-
end
|
126
25
|
|
127
|
-
end
|
128
|
-
|
129
|
-
#
|
130
|
-
# Esempio
|
131
|
-
# Clona un TreeNode
|
132
|
-
#
|
133
|
-
class CloneTreeNodeVisitor < TreeNodeVisitor
|
134
|
-
|
135
|
-
attr_reader :clonedRoot
|
136
|
-
|
137
|
-
def initialize
|
138
|
-
super
|
139
|
-
@clonedRoot = nil
|
140
|
-
@stack = []
|
141
|
-
end
|
142
|
-
|
143
|
-
def enter_treeNode( treeNode )
|
144
|
-
if @stack.empty?
|
145
|
-
clonedTreeNode = TreeNode.new( treeNode.name )
|
146
|
-
@clonedRoot = clonedTreeNode
|
147
|
-
else
|
148
|
-
clonedTreeNode = TreeNode.new( treeNode.name, @stack.last )
|
149
|
-
end
|
150
|
-
@stack.push( clonedTreeNode )
|
151
|
-
end
|
152
26
|
|
153
|
-
def exit_treeNode( treeNode )
|
154
|
-
@stack.pop
|
155
|
-
end
|
156
27
|
|
157
|
-
def visit_leafNode( leafNode )
|
158
|
-
clonedLeafNode = LeafNode.new( leafNode.name, @stack.last )
|
159
|
-
end
|
160
28
|
|
161
|
-
end
|
162
29
|
|
163
|
-
#
|
164
|
-
# CallbackTreeNodeVisitor
|
165
|
-
#
|
166
|
-
class CallbackTreeNodeVisitor < TreeNodeVisitor
|
167
|
-
|
168
|
-
def initialize( root = nil )
|
169
|
-
super()
|
170
|
-
@stack = []
|
171
|
-
@root = root
|
172
|
-
@stack.push( root ) if root
|
173
|
-
@action_enterTreeNode = nil
|
174
|
-
@action_visitLeafNode = nil
|
175
|
-
end
|
176
|
-
|
177
|
-
def onEnterTreeNode( &action )
|
178
|
-
@action_enterTreeNode = action
|
179
|
-
end
|
180
|
-
|
181
|
-
def onVisitLeafNode( &action )
|
182
|
-
@action_visitLeafNode = action
|
183
|
-
end
|
184
30
|
|
185
|
-
def enter_treeNode( treeNode )
|
186
|
-
parentNode = if @stack.empty?
|
187
|
-
nil
|
188
|
-
else
|
189
|
-
@stack.last
|
190
|
-
end
|
191
|
-
@root = treeNode if @stack.empty?
|
192
|
-
@stack.push( treeNode )
|
193
|
-
@action_enterTreeNode.call( treeNode ) if @action_enterTreeNode
|
194
|
-
end
|
195
|
-
|
196
|
-
def exit_treeNode( treeNode )
|
197
|
-
@stack.pop
|
198
|
-
end
|
199
|
-
|
200
|
-
def visit_leafNode( leafNode )
|
201
|
-
parentNode = @stack.last
|
202
|
-
@action_visitLeafNode.call( leafNode ) if @action_visitLeafNode
|
203
|
-
end
|
204
|
-
|
205
|
-
end
|
206
|
-
|
207
|
-
|
208
|
-
#
|
209
|
-
# CallbackTreeNodeVisitor
|
210
|
-
#
|
211
|
-
class CallbackTreeNodeVisitor2 < TreeNodeVisitor
|
212
|
-
|
213
|
-
attr_reader :root
|
214
|
-
|
215
|
-
def initialize( root = nil )
|
216
|
-
super()
|
217
|
-
@stack = []
|
218
|
-
@root = root
|
219
|
-
@stack.push( root ) if root
|
220
|
-
end
|
221
|
-
|
222
|
-
def onEnterTreeNode( &action )
|
223
|
-
@action_enterTreeNode = action
|
224
|
-
end
|
225
|
-
|
226
|
-
def onVisitLeafNode( &action )
|
227
|
-
@action_visitLeafNode = action
|
228
|
-
end
|
229
|
-
|
230
|
-
def enter_treeNode( treeNode )
|
231
|
-
newParentNode = if @stack.empty?
|
232
|
-
nil
|
233
|
-
else
|
234
|
-
@stack.last
|
235
|
-
end
|
236
|
-
newTreeNode = @action_enterTreeNode.call( treeNode, newParentNode )
|
237
|
-
@root = newTreeNode if @stack.empty?
|
238
|
-
@stack.push( newTreeNode )
|
239
|
-
end
|
240
|
-
|
241
|
-
def exit_treeNode( treeNode )
|
242
|
-
@stack.pop
|
243
|
-
end
|
244
|
-
|
245
|
-
def visit_leafNode( leafNode )
|
246
|
-
newParentNode = @stack.last
|
247
|
-
@action_visitLeafNode.call( leafNode, newParentNode )
|
248
|
-
end
|
249
|
-
|
250
|
-
end
|
251
31
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'treevisitor/tree_node_visitor.rb'
|
2
|
+
|
3
|
+
#
|
4
|
+
# Utilizzo della classa astratta DirTreeProcessor
|
5
|
+
# per chimare un blocco su tutti i TreeNode
|
6
|
+
#
|
7
|
+
class BlockTreeNodeVisitor < TreeNodeVisitor
|
8
|
+
|
9
|
+
def initialize( &action )
|
10
|
+
@block = action
|
11
|
+
end
|
12
|
+
|
13
|
+
def enter_treeNode( treeNode )
|
14
|
+
@block.call( treeNode )
|
15
|
+
end
|
16
|
+
|
17
|
+
def exit_treeNode( treeNode )
|
18
|
+
end
|
19
|
+
|
20
|
+
def visit_leafNode( leafNode )
|
21
|
+
@block.call( leafNode )
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -11,11 +11,16 @@ require 'treevisitor/tree_node_visitor'
|
|
11
11
|
class BuildDirTreeVisitor < TreeNodeVisitor
|
12
12
|
|
13
13
|
attr_reader :root
|
14
|
+
|
15
|
+
attr_reader :nr_directories
|
16
|
+
attr_reader :nr_files
|
14
17
|
|
15
18
|
def initialize
|
16
19
|
super
|
17
20
|
@root = nil
|
18
21
|
@stack = []
|
22
|
+
@nr_directories = 0
|
23
|
+
@nr_files = 0
|
19
24
|
end
|
20
25
|
|
21
26
|
def enter_treeNode( pathname )
|
@@ -25,6 +30,7 @@ class BuildDirTreeVisitor < TreeNodeVisitor
|
|
25
30
|
else
|
26
31
|
treeNode = TreeNode.new( File.basename( pathname ), @stack.last )
|
27
32
|
end
|
33
|
+
@nr_directories += 1
|
28
34
|
@stack.push( treeNode )
|
29
35
|
end
|
30
36
|
|
@@ -33,26 +39,8 @@ class BuildDirTreeVisitor < TreeNodeVisitor
|
|
33
39
|
end
|
34
40
|
|
35
41
|
def visit_leafNode( pathname )
|
42
|
+
@nr_files += 1
|
36
43
|
leafNode = LeafNode.new( File.basename(pathname), @stack.last )
|
37
44
|
end
|
38
45
|
|
39
46
|
end
|
40
|
-
|
41
|
-
#
|
42
|
-
# Utilizzo della classa astratta DirTreeProcessor
|
43
|
-
# per stampare i nodi di un TreeNode
|
44
|
-
#
|
45
|
-
class PrintDirTreeVisitor < TreeNodeVisitor
|
46
|
-
|
47
|
-
def enter_treeNode( pathname )
|
48
|
-
puts pathname
|
49
|
-
end
|
50
|
-
|
51
|
-
def exit_treeNode( treeNode )
|
52
|
-
end
|
53
|
-
|
54
|
-
def visit_leafNode( pathname )
|
55
|
-
puts pathname
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
#
|
2
|
+
# CallbackTreeNodeVisitor
|
3
|
+
#
|
4
|
+
class CallbackTreeNodeVisitor < TreeNodeVisitor
|
5
|
+
|
6
|
+
def initialize( root = nil )
|
7
|
+
super()
|
8
|
+
@stack = []
|
9
|
+
@root = root
|
10
|
+
@stack.push( root ) if root
|
11
|
+
@action_enterTreeNode = nil
|
12
|
+
@action_visitLeafNode = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
def onEnterTreeNode( &action )
|
16
|
+
@action_enterTreeNode = action
|
17
|
+
end
|
18
|
+
|
19
|
+
def onVisitLeafNode( &action )
|
20
|
+
@action_visitLeafNode = action
|
21
|
+
end
|
22
|
+
|
23
|
+
def enter_treeNode( treeNode )
|
24
|
+
parentNode = if @stack.empty?
|
25
|
+
nil
|
26
|
+
else
|
27
|
+
@stack.last
|
28
|
+
end
|
29
|
+
@root = treeNode if @stack.empty?
|
30
|
+
@stack.push( treeNode )
|
31
|
+
@action_enterTreeNode.call( treeNode ) if @action_enterTreeNode
|
32
|
+
end
|
33
|
+
|
34
|
+
def exit_treeNode( treeNode )
|
35
|
+
@stack.pop
|
36
|
+
end
|
37
|
+
|
38
|
+
def visit_leafNode( leafNode )
|
39
|
+
parentNode = @stack.last
|
40
|
+
@action_visitLeafNode.call( leafNode ) if @action_visitLeafNode
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
|
2
|
+
#
|
3
|
+
# CallbackTreeNodeVisitor
|
4
|
+
#
|
5
|
+
class CallbackTreeNodeVisitor2 < TreeNodeVisitor
|
6
|
+
|
7
|
+
attr_reader :root
|
8
|
+
|
9
|
+
def initialize( root = nil )
|
10
|
+
super()
|
11
|
+
@stack = []
|
12
|
+
@root = root
|
13
|
+
@stack.push( root ) if root
|
14
|
+
end
|
15
|
+
|
16
|
+
def onEnterTreeNode( &action )
|
17
|
+
@action_enterTreeNode = action
|
18
|
+
end
|
19
|
+
|
20
|
+
def onVisitLeafNode( &action )
|
21
|
+
@action_visitLeafNode = action
|
22
|
+
end
|
23
|
+
|
24
|
+
def enter_treeNode( treeNode )
|
25
|
+
newParentNode = if @stack.empty?
|
26
|
+
nil
|
27
|
+
else
|
28
|
+
@stack.last
|
29
|
+
end
|
30
|
+
newTreeNode = @action_enterTreeNode.call( treeNode, newParentNode )
|
31
|
+
@root = newTreeNode if @stack.empty?
|
32
|
+
@stack.push( newTreeNode )
|
33
|
+
end
|
34
|
+
|
35
|
+
def exit_treeNode( treeNode )
|
36
|
+
@stack.pop
|
37
|
+
end
|
38
|
+
|
39
|
+
def visit_leafNode( leafNode )
|
40
|
+
newParentNode = @stack.last
|
41
|
+
@action_visitLeafNode.call( leafNode, newParentNode )
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#
|
2
|
+
# Esempio
|
3
|
+
# Clona un TreeNode
|
4
|
+
#
|
5
|
+
class CloneTreeNodeVisitor < TreeNodeVisitor
|
6
|
+
|
7
|
+
attr_reader :clonedRoot
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
super
|
11
|
+
@clonedRoot = nil
|
12
|
+
@stack = []
|
13
|
+
end
|
14
|
+
|
15
|
+
def enter_treeNode( treeNode )
|
16
|
+
if @stack.empty?
|
17
|
+
clonedTreeNode = TreeNode.new( treeNode.name )
|
18
|
+
@clonedRoot = clonedTreeNode
|
19
|
+
else
|
20
|
+
clonedTreeNode = TreeNode.new( treeNode.name, @stack.last )
|
21
|
+
end
|
22
|
+
@stack.push( clonedTreeNode )
|
23
|
+
end
|
24
|
+
|
25
|
+
def exit_treeNode( treeNode )
|
26
|
+
@stack.pop
|
27
|
+
end
|
28
|
+
|
29
|
+
def visit_leafNode( leafNode )
|
30
|
+
clonedLeafNode = LeafNode.new( leafNode.name, @stack.last )
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#
|
2
|
+
#
|
3
|
+
#
|
4
|
+
class DepthTreeNodeVisitor < TreeNodeVisitor
|
5
|
+
|
6
|
+
attr_reader :depth
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
super
|
10
|
+
@depth = 0
|
11
|
+
end
|
12
|
+
|
13
|
+
def enter_treeNode( treeNode )
|
14
|
+
@depth += 1
|
15
|
+
end
|
16
|
+
|
17
|
+
def exit_treeNode( treeNode )
|
18
|
+
@depth -= 1
|
19
|
+
end
|
20
|
+
|
21
|
+
def visit_leafNode( leafNode )
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#
|
2
|
+
# Utilizzo della classa astratta DirTreeProcessor
|
3
|
+
# per stampare i nodi di un TreeNode
|
4
|
+
#
|
5
|
+
class FlatPrintTreeNodeVisitor < TreeNodeVisitor
|
6
|
+
|
7
|
+
def enter_treeNode( treeNode )
|
8
|
+
puts treeNode.name
|
9
|
+
end
|
10
|
+
|
11
|
+
def exit_treeNode( treeNode )
|
12
|
+
end
|
13
|
+
|
14
|
+
def visit_leafNode( leafNode )
|
15
|
+
puts leafNode.name
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#
|
2
|
+
# Utilizzo della classa astratta DirTreeProcessor
|
3
|
+
# per stampare i nodi di un TreeNode
|
4
|
+
#
|
5
|
+
class PrintDirTreeVisitor < TreeNodeVisitor
|
6
|
+
|
7
|
+
def enter_treeNode( pathname )
|
8
|
+
puts pathname
|
9
|
+
end
|
10
|
+
|
11
|
+
def exit_treeNode( treeNode )
|
12
|
+
end
|
13
|
+
|
14
|
+
def visit_leafNode( pathname )
|
15
|
+
puts pathname
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
File without changes
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class PrintTreeNodeVisitor < TreeNodeVisitor
|
2
|
+
|
3
|
+
def initialize( *args )
|
4
|
+
super( *args )
|
5
|
+
@depth = 0
|
6
|
+
end
|
7
|
+
|
8
|
+
def visit_leafNode( leafNode )
|
9
|
+
str = ""
|
10
|
+
(0...@depth-1).step {
|
11
|
+
str << " |-"
|
12
|
+
}
|
13
|
+
str << " | "
|
14
|
+
puts str + leafNode.name.to_s
|
15
|
+
end
|
16
|
+
|
17
|
+
def enter_treeNode( treeNode )
|
18
|
+
|
19
|
+
str = ""
|
20
|
+
(0...@depth).step {
|
21
|
+
str << " |-"
|
22
|
+
}
|
23
|
+
|
24
|
+
if @depth == 0
|
25
|
+
puts str + treeNode.name.to_s
|
26
|
+
else
|
27
|
+
puts str + treeNode.name.to_s
|
28
|
+
end
|
29
|
+
@depth += 1
|
30
|
+
end
|
31
|
+
|
32
|
+
def exit_treeNode( treeNode )
|
33
|
+
@depth -= 1
|
34
|
+
end
|
35
|
+
end
|
@@ -1,17 +1,25 @@
|
|
1
1
|
require File.join( File.dirname(__FILE__), "test_helper")
|
2
2
|
|
3
3
|
require 'fileutils'
|
4
|
-
require 'gf_utility/kwartzhelper'
|
5
4
|
|
6
|
-
class
|
5
|
+
class TCKwartz < Test::Unit::TestCase
|
7
6
|
|
8
7
|
KWARTZ_TEST_DATA = File.join( $TREEVISITOR_HOME, "test_data", "gf_utility", "kwartz_test_data" )
|
9
8
|
|
10
9
|
def test_simple
|
10
|
+
|
11
|
+
begin
|
12
|
+
require 'kwartz'
|
13
|
+
rescue LoadError
|
14
|
+
puts "WARNING kwartz_helper test not runned because kwartz is not present"
|
15
|
+
return
|
16
|
+
end
|
17
|
+
|
18
|
+
require 'gf_utilities/kwartzhelper'
|
11
19
|
template_dir = File.join( KWARTZ_TEST_DATA, "source" )
|
12
20
|
template_out = File.join( KWARTZ_TEST_DATA, "out" )
|
13
21
|
kwartz_compile( template_dir, nil, template_out )
|
14
|
-
|
22
|
+
|
15
23
|
out_filename = File.join( KWARTZ_TEST_DATA, "out", "test1.rb" )
|
16
24
|
assert File.exists?(out_filename)
|
17
25
|
FileUtils.rm out_filename
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.join( File.dirname(__FILE__), "test_helper")
|
2
|
+
|
3
|
+
require 'gf_utilities/md5.rb'
|
4
|
+
|
5
|
+
class TCMD5 < Test::Unit::TestCase
|
6
|
+
|
7
|
+
TEST_FILE = File.join( $TREEVISITOR_HOME, "lib", "gf_utilities", "md5.rb" )
|
8
|
+
|
9
|
+
def test_simple_md5
|
10
|
+
file_name = File.join( TEST_FILE )
|
11
|
+
assert_equal "0cac752fb36269471d8265435ed99443", MD5.file( file_name ).to_s
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
File without changes
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "..", "test_helper")
|
2
|
+
|
3
|
+
require 'treevisitor/cli/cli_tree'
|
4
|
+
|
5
|
+
class TCCliTree < Test::Unit::TestCase
|
6
|
+
|
7
|
+
TEST_DIRECTORY = File.join( $TREEVISITOR_HOME, "test_data", "tree_visitor", "test_data" )
|
8
|
+
|
9
|
+
def test_help_message
|
10
|
+
out = with_stdout_captured do
|
11
|
+
args = %w{-h}
|
12
|
+
CliTree.new.parse_args(args)
|
13
|
+
end
|
14
|
+
assert out.start_with?("Usage:")
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_version
|
18
|
+
out = with_stdout_captured do
|
19
|
+
args = %w{--version}
|
20
|
+
CliTree.new.parse_args(args)
|
21
|
+
end
|
22
|
+
version = File.open( File.join($TREEVISITOR_HOME, "VERSION") ).read
|
23
|
+
assert_match version, out
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_directories_only
|
27
|
+
out = with_stdout_captured do
|
28
|
+
args = %w{-d}
|
29
|
+
args << TEST_DIRECTORY
|
30
|
+
CliTree.new.parse_args(args)
|
31
|
+
end
|
32
|
+
# puts out
|
33
|
+
assert_equal 6, out.split("\n").length
|
34
|
+
|
35
|
+
out = with_stdout_captured do
|
36
|
+
args = %w{-da}
|
37
|
+
args << TEST_DIRECTORY
|
38
|
+
CliTree.new.parse_args(args)
|
39
|
+
end
|
40
|
+
#puts out
|
41
|
+
assert_equal 7, out.split("\n").length
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_all_files
|
45
|
+
out = with_stdout_captured do
|
46
|
+
args = %w{-a}
|
47
|
+
args << TEST_DIRECTORY
|
48
|
+
CliTree.new.parse_args(args)
|
49
|
+
end
|
50
|
+
# puts out
|
51
|
+
assert_equal 11, out.split("\n").length
|
52
|
+
|
53
|
+
out = with_stdout_captured do
|
54
|
+
args = []
|
55
|
+
args << TEST_DIRECTORY
|
56
|
+
CliTree.new.parse_args(args)
|
57
|
+
end
|
58
|
+
# puts out
|
59
|
+
assert_equal 9, out.split("\n").length
|
60
|
+
end
|
61
|
+
end
|
@@ -3,8 +3,13 @@ require File.join(File.dirname(__FILE__), "test_helper")
|
|
3
3
|
require 'treevisitor/dir_processor'
|
4
4
|
|
5
5
|
class TCDirProcessor < Test::Unit::TestCase
|
6
|
+
|
7
|
+
TEST_DATA = File.join( $TREEVISITOR_HOME, "test_data", "tree_visitor", "test_data" )
|
8
|
+
|
6
9
|
def test_simple
|
7
|
-
|
10
|
+
files = []
|
11
|
+
dp = DirProcessor.new(TEST_DATA) { |f| files << f }
|
8
12
|
dp.run
|
13
|
+
assert_equal 3, files.length
|
9
14
|
end
|
10
15
|
end
|
@@ -5,26 +5,36 @@ require 'treevisitor/tree_node_visitor.rb'
|
|
5
5
|
|
6
6
|
class TCDirTreeWalker < Test::Unit::TestCase
|
7
7
|
|
8
|
+
TEST_DIRECTORY = File.join( $TREEVISITOR_HOME, "test_data", "tree_visitor", "test_data" )
|
9
|
+
|
8
10
|
def test_simple
|
9
|
-
dir_tree_walker = DirTreeWalker.new(
|
11
|
+
dir_tree_walker = DirTreeWalker.new( TEST_DIRECTORY )
|
10
12
|
dir_tree_walker.add_ignore_dir( ".svn" )
|
11
13
|
|
12
14
|
accumulator = []
|
13
15
|
visitor = BlockTreeNodeVisitor.new { |pathname| accumulator << File.basename( pathname ) }
|
14
16
|
dir_tree_walker.run( visitor )
|
15
|
-
assert_equal(
|
16
|
-
assert_equal( %w{ test_data dir.1 dir.1.2 file.1.2.1 file.1.1 dir.2 file.2.1 }, accumulator )
|
17
|
+
assert_equal( 9, accumulator.length )
|
18
|
+
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 )
|
17
19
|
end
|
18
20
|
|
19
|
-
def
|
21
|
+
def test_ignore_function
|
20
22
|
dtp = DirTreeWalker.new( "." )
|
21
23
|
|
22
|
-
dtp.
|
23
|
-
dtp.
|
24
|
-
dtp.
|
24
|
+
dtp.add_ignore_pattern(/^\./)
|
25
|
+
assert dtp.ignore_file?( ".thumbnails" )
|
26
|
+
assert dtp.ignore_dir?( ".thumbnails" )
|
27
|
+
|
28
|
+
dtp.add_ignore_dir("thumbnails")
|
29
|
+
|
30
|
+
assert dtp.ignore_dir?( ".thumbnails" )
|
31
|
+
assert dtp.ignore_dir?( "thumbnails" )
|
32
|
+
assert ! dtp.ignore_dir?( "pippo" )
|
33
|
+
|
34
|
+
|
35
|
+
dtp.add_ignore_file("xvpics")
|
25
36
|
|
26
|
-
assert( dtp.
|
27
|
-
assert( ! dtp.ignore_dir?( "pippo" ) )
|
37
|
+
assert( dtp.ignore_file?( "xvpics" ) )
|
28
38
|
end
|
29
39
|
|
30
40
|
end
|
@@ -2,6 +2,11 @@ require File.join(File.dirname(__FILE__), "test_helper")
|
|
2
2
|
|
3
3
|
require 'treevisitor/tree_node.rb'
|
4
4
|
require 'treevisitor/tree_node_visitor.rb'
|
5
|
+
require 'treevisitor/visitors/block_tree_node_visitor'
|
6
|
+
require 'treevisitor/visitors/callback_tree_node_visitor'
|
7
|
+
require 'treevisitor/visitors/callback_tree_node_visitor2'
|
8
|
+
require 'treevisitor/visitors/clone_tree_node_visitor'
|
9
|
+
require 'treevisitor/visitors/depth_tree_node_visitor'
|
5
10
|
|
6
11
|
class TCTreeNodeVisitor < Test::Unit::TestCase
|
7
12
|
|
@@ -5,6 +5,17 @@ test_dir = File.join($TREEVISITOR_HOME, "test" )
|
|
5
5
|
$:.unshift lib_dir unless $:.include?(lib_dir)
|
6
6
|
$:.unshift test_dir unless $:.include?(test_dir)
|
7
7
|
|
8
|
-
$TEST_DATA = File.join( $TREEVISITOR_HOME, "test_data", "tree_visitor", "test_data" )
|
9
|
-
|
10
8
|
require 'test/unit'
|
9
|
+
|
10
|
+
require "stringio"
|
11
|
+
def with_stdout_captured
|
12
|
+
old_stdout = $stdout
|
13
|
+
out = StringIO.new
|
14
|
+
$stdout = out
|
15
|
+
begin
|
16
|
+
yield
|
17
|
+
ensure
|
18
|
+
$stdout = old_stdout
|
19
|
+
end
|
20
|
+
out.string
|
21
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
So git create directory
|
@@ -0,0 +1 @@
|
|
1
|
+
So git create directory
|
@@ -0,0 +1,16 @@
|
|
1
|
+
/* The element which is marked by 'id="list1"' */
|
2
|
+
#list1 {
|
3
|
+
logic: {
|
4
|
+
for member in @members
|
5
|
+
_stag # start tag
|
6
|
+
_cont # content
|
7
|
+
_etag # end tag
|
8
|
+
end
|
9
|
+
}
|
10
|
+
}
|
11
|
+
|
12
|
+
/* The element which is marked by 'id="mark:item1"' */
|
13
|
+
#item1 {
|
14
|
+
/* replace the content with value of a variable 'member' */
|
15
|
+
value: member;
|
16
|
+
}
|
File without changes
|
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.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- gf
|
@@ -9,8 +9,8 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-05-
|
13
|
-
default_executable:
|
12
|
+
date: 2009-05-30 00:00:00 -07:00
|
13
|
+
default_executable: tree.rb
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: abstract
|
@@ -25,28 +25,41 @@ dependencies:
|
|
25
25
|
description:
|
26
26
|
email: giovanni.ferro@gmail.com
|
27
27
|
executables:
|
28
|
-
-
|
28
|
+
- tree.rb
|
29
29
|
extensions: []
|
30
30
|
|
31
31
|
extra_rdoc_files:
|
32
32
|
- LICENSE
|
33
33
|
- README.rdoc
|
34
34
|
files:
|
35
|
-
-
|
36
|
-
- lib/
|
37
|
-
- lib/
|
38
|
-
- lib/
|
35
|
+
- VERSION
|
36
|
+
- lib/gf_utilities/file_utilities.rb
|
37
|
+
- lib/gf_utilities/kwartzhelper.rb
|
38
|
+
- lib/gf_utilities/md5.rb
|
39
|
+
- lib/gf_utilities/numeric.rb
|
39
40
|
- lib/treevisitor.rb
|
40
41
|
- lib/treevisitor/abs_node.rb
|
41
|
-
- lib/treevisitor/
|
42
|
-
- lib/treevisitor/cli/cli_dir_tree.rb
|
42
|
+
- lib/treevisitor/cli/cli_tree.rb
|
43
43
|
- lib/treevisitor/dir_processor.rb
|
44
44
|
- lib/treevisitor/dir_tree_walker.rb
|
45
45
|
- lib/treevisitor/leaf_node.rb
|
46
46
|
- lib/treevisitor/tree_node.rb
|
47
47
|
- lib/treevisitor/tree_node_visitor.rb
|
48
|
-
- lib/treevisitor/
|
48
|
+
- lib/treevisitor/visitors/block_tree_node_visitor.rb
|
49
|
+
- lib/treevisitor/visitors/build_dir_tree_visitor.rb
|
50
|
+
- lib/treevisitor/visitors/callback_tree_node_visitor.rb
|
51
|
+
- lib/treevisitor/visitors/callback_tree_node_visitor2.rb
|
52
|
+
- lib/treevisitor/visitors/clone_tree_node_visitor.rb
|
53
|
+
- lib/treevisitor/visitors/depth_tree_node_visitor.rb
|
54
|
+
- lib/treevisitor/visitors/flat_print_tree_node_visitors.rb
|
55
|
+
- lib/treevisitor/visitors/print_dir_tree_visitor.rb
|
56
|
+
- lib/treevisitor/visitors/print_node_visitor2.rb
|
57
|
+
- lib/treevisitor/visitors/print_tree_node_visitor.rb
|
58
|
+
- test_data/gf_utility/kwartz_test_data/out.certified/dummy.txt
|
59
|
+
- test_data/gf_utility/kwartz_test_data/out/dummy.txt
|
49
60
|
- test_data/gf_utility/kwartz_test_data/source/test1.html
|
61
|
+
- test_data/gf_utility/kwartz_test_data/source/test1.plogic
|
62
|
+
- test_data/tree_visitor/test_data/.dir_with_dot/dummy.txt
|
50
63
|
- test_data/tree_visitor/test_data/dir.1/dir.1.2/file.1.2.1
|
51
64
|
- test_data/tree_visitor/test_data/dir.1/file.1.1
|
52
65
|
- test_data/tree_visitor/test_data/dir.2/file.2.1
|
@@ -76,16 +89,16 @@ requirements: []
|
|
76
89
|
rubyforge_project: treevisitor
|
77
90
|
rubygems_version: 1.2.0
|
78
91
|
signing_key:
|
79
|
-
specification_version:
|
92
|
+
specification_version: 3
|
80
93
|
summary: implementation of visitor design pattern
|
81
94
|
test_files:
|
82
95
|
- test/treevisitor/tc_dir_processor.rb
|
96
|
+
- test/treevisitor/cli/tc_cli_tree.rb
|
83
97
|
- test/treevisitor/tc_dir_tree_walker.rb
|
84
98
|
- test/treevisitor/tc_tree_node.rb
|
85
99
|
- test/treevisitor/tc_tree_node_visitor.rb
|
86
100
|
- test/treevisitor/test_helper.rb
|
87
|
-
- test/
|
88
|
-
- test/
|
89
|
-
- test/
|
90
|
-
- test/
|
91
|
-
- test/ts_treevisitor.rb
|
101
|
+
- test/gf_utilities/tc_md5.rb
|
102
|
+
- test/gf_utilities/tc_kwartz.rb
|
103
|
+
- test/gf_utilities/tc_numeric.rb
|
104
|
+
- test/gf_utilities/test_helper.rb
|
data/lib/gf_utility/md5.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
# stdlib
|
2
|
-
require 'md5'
|
3
|
-
|
4
|
-
#
|
5
|
-
# calcola md5 di file grandi, copiata da usenet
|
6
|
-
#
|
7
|
-
class MD5
|
8
|
-
def self.file(file)
|
9
|
-
File.open(file, "rb") do |f|
|
10
|
-
res = self.new
|
11
|
-
while (data = f.read(4096))
|
12
|
-
res << data
|
13
|
-
end
|
14
|
-
res
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
data/test/gf_utility/tc_md5.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
require File.join( File.dirname(__FILE__), "test_helper")
|
2
|
-
|
3
|
-
require 'gf_utility/md5.rb'
|
4
|
-
|
5
|
-
class TCMD5 < Test::Unit::TestCase
|
6
|
-
|
7
|
-
TEST_FILE = File.join( $TREEVISITOR_HOME, "lib", "treevisitor.rb" )
|
8
|
-
|
9
|
-
def test_simple_build
|
10
|
-
file_name = File.join( TEST_FILE )
|
11
|
-
MD5.file( file_name )
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
data/test/ts_treevisitor.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
# stdlib
|
2
|
-
require "test/unit"
|
3
|
-
|
4
|
-
# common
|
5
|
-
$TREEVISITOR_HOME = File.expand_path( File.join( File.dirname( __FILE__), "..") )
|
6
|
-
$:.unshift( File.join($TREEVISITOR_HOME, "lib" ) )
|
7
|
-
$:.unshift( File.join($TREEVISITOR_HOME, "test" ) )
|
8
|
-
|
9
|
-
require "tree_visitor"
|
10
|
-
|
11
|
-
require "gf_utility/tc_md5"
|
12
|
-
|
13
|
-
require "treevisitor/tc_dir_processor"
|
14
|
-
require "treevisitor/tc_dir_tree_walker"
|
15
|
-
require "treevisitor/tc_tree_node"
|
16
|
-
require "treevisitor/tc_tree_node_visitor"
|