gf-treevisitor 0.0.6 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- 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"
|