gf-treevisitor 0.0.8 → 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/bin/tree.rb +9 -9
- data/lib/gf_utilities/kwartzhelper.rb +90 -90
- data/lib/gf_utilities/md5.rb +24 -24
- data/lib/gf_utilities/numeric.rb +17 -17
- data/lib/treevisitor/abs_node.rb +116 -116
- data/lib/treevisitor/cli/cli_tree.rb +2 -1
- data/lib/treevisitor/dir_processor.rb +40 -40
- data/lib/treevisitor/dir_tree_walker.rb +116 -116
- data/lib/treevisitor/leaf_node.rb +31 -27
- data/lib/treevisitor/tree_node.rb +134 -134
- data/lib/treevisitor/tree_node_visitor.rb +31 -31
- data/lib/treevisitor/visitors/block_tree_node_visitor.rb +4 -5
- data/lib/treevisitor/visitors/build_dir_tree_visitor.rb +44 -46
- data/lib/treevisitor/visitors/callback_tree_node_visitor.rb +6 -4
- data/lib/treevisitor/visitors/callback_tree_node_visitor2.rb +6 -4
- data/lib/treevisitor/visitors/clone_tree_node_visitor.rb +4 -5
- data/lib/treevisitor/visitors/depth_tree_node_visitor.rb +4 -4
- data/lib/treevisitor/visitors/flat_print_tree_node_visitors.rb +4 -5
- data/lib/treevisitor/visitors/print_dir_tree_visitor.rb +6 -6
- data/lib/treevisitor/visitors/print_tree_node_visitor.rb +6 -3
- data/lib/treevisitor/visitors/{print_node_visitor2.rb → print_tree_node_visitor2.rb} +9 -6
- data/lib/treevisitor.rb +3 -3
- data/test/gf_utilities/tc_md5.rb +14 -14
- data/test/treevisitor/cli/tc_cli_tree.rb +1 -1
- data/test/treevisitor/tc_dir_processor.rb +2 -2
- data/test/treevisitor/tc_tree_node.rb +3 -0
- metadata +5 -5
@@ -1,46 +1,44 @@
|
|
1
|
-
|
2
|
-
require 'treevisitor/
|
3
|
-
require 'treevisitor/
|
4
|
-
|
5
|
-
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
attr_reader :
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
@
|
21
|
-
@
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
end
|
1
|
+
require 'treevisitor/tree_node'
|
2
|
+
require 'treevisitor/dir_tree_walker'
|
3
|
+
require 'treevisitor/tree_node_visitor'
|
4
|
+
|
5
|
+
#
|
6
|
+
# Buils a TreeNode from a filesystem directory
|
7
|
+
# It similar to CloneTreeNodeVisitor
|
8
|
+
#
|
9
|
+
class BuildDirTreeVisitor < TreeNodeVisitor
|
10
|
+
|
11
|
+
attr_reader :root
|
12
|
+
|
13
|
+
attr_reader :nr_directories
|
14
|
+
attr_reader :nr_files
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
super
|
18
|
+
@root = nil
|
19
|
+
@stack = []
|
20
|
+
@nr_directories = 0
|
21
|
+
@nr_files = 0
|
22
|
+
end
|
23
|
+
|
24
|
+
def enter_tree_node( pathname )
|
25
|
+
if @stack.empty?
|
26
|
+
treeNode = TreeNode.new( File.basename( pathname ) )
|
27
|
+
@root = treeNode
|
28
|
+
else
|
29
|
+
treeNode = TreeNode.new( File.basename( pathname ), @stack.last )
|
30
|
+
end
|
31
|
+
@nr_directories += 1
|
32
|
+
@stack.push( treeNode )
|
33
|
+
end
|
34
|
+
|
35
|
+
def exit_tree_node( pathname )
|
36
|
+
@stack.pop
|
37
|
+
end
|
38
|
+
|
39
|
+
def visit_leaf_node( pathname )
|
40
|
+
@nr_files += 1
|
41
|
+
leafNode = LeafNode.new( File.basename(pathname), @stack.last )
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
#
|
2
|
-
#
|
2
|
+
# Executes a block when enter in a node
|
3
|
+
# The block are defined from on_enter_X methods
|
4
|
+
# The blocks take as argument only the node
|
3
5
|
#
|
4
6
|
class CallbackTreeNodeVisitor < TreeNodeVisitor
|
5
7
|
|
@@ -20,7 +22,7 @@ class CallbackTreeNodeVisitor < TreeNodeVisitor
|
|
20
22
|
@action_visitLeafNode = action
|
21
23
|
end
|
22
24
|
|
23
|
-
def
|
25
|
+
def enter_tree_node( treeNode )
|
24
26
|
parentNode = if @stack.empty?
|
25
27
|
nil
|
26
28
|
else
|
@@ -31,11 +33,11 @@ class CallbackTreeNodeVisitor < TreeNodeVisitor
|
|
31
33
|
@action_enterTreeNode.call( treeNode ) if @action_enterTreeNode
|
32
34
|
end
|
33
35
|
|
34
|
-
def
|
36
|
+
def exit_tree_node( treeNode )
|
35
37
|
@stack.pop
|
36
38
|
end
|
37
39
|
|
38
|
-
def
|
40
|
+
def visit_leaf_node( leafNode )
|
39
41
|
parentNode = @stack.last
|
40
42
|
@action_visitLeafNode.call( leafNode ) if @action_visitLeafNode
|
41
43
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
|
2
2
|
#
|
3
|
-
#
|
3
|
+
# Executes a block when enter in a node
|
4
|
+
# The block are defined from on_enter_X methods
|
5
|
+
# The blocks take as argument the node and the parent_node
|
4
6
|
#
|
5
7
|
class CallbackTreeNodeVisitor2 < TreeNodeVisitor
|
6
8
|
|
@@ -21,7 +23,7 @@ class CallbackTreeNodeVisitor2 < TreeNodeVisitor
|
|
21
23
|
@action_visitLeafNode = action
|
22
24
|
end
|
23
25
|
|
24
|
-
def
|
26
|
+
def enter_tree_node( treeNode )
|
25
27
|
newParentNode = if @stack.empty?
|
26
28
|
nil
|
27
29
|
else
|
@@ -32,11 +34,11 @@ class CallbackTreeNodeVisitor2 < TreeNodeVisitor
|
|
32
34
|
@stack.push( newTreeNode )
|
33
35
|
end
|
34
36
|
|
35
|
-
def
|
37
|
+
def exit_tree_node( treeNode )
|
36
38
|
@stack.pop
|
37
39
|
end
|
38
40
|
|
39
|
-
def
|
41
|
+
def visit_leaf_node( leafNode )
|
40
42
|
newParentNode = @stack.last
|
41
43
|
@action_visitLeafNode.call( leafNode, newParentNode )
|
42
44
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
#
|
2
|
-
#
|
3
|
-
# Clona un TreeNode
|
2
|
+
# Clone a tree_node
|
4
3
|
#
|
5
4
|
class CloneTreeNodeVisitor < TreeNodeVisitor
|
6
5
|
|
@@ -12,7 +11,7 @@ class CloneTreeNodeVisitor < TreeNodeVisitor
|
|
12
11
|
@stack = []
|
13
12
|
end
|
14
13
|
|
15
|
-
def
|
14
|
+
def enter_tree_node( treeNode )
|
16
15
|
if @stack.empty?
|
17
16
|
clonedTreeNode = TreeNode.new( treeNode.name )
|
18
17
|
@clonedRoot = clonedTreeNode
|
@@ -22,11 +21,11 @@ class CloneTreeNodeVisitor < TreeNodeVisitor
|
|
22
21
|
@stack.push( clonedTreeNode )
|
23
22
|
end
|
24
23
|
|
25
|
-
def
|
24
|
+
def exit_tree_node( treeNode )
|
26
25
|
@stack.pop
|
27
26
|
end
|
28
27
|
|
29
|
-
def
|
28
|
+
def visit_leaf_node( leafNode )
|
30
29
|
clonedLeafNode = LeafNode.new( leafNode.name, @stack.last )
|
31
30
|
end
|
32
31
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
#
|
2
|
-
#
|
2
|
+
# Simple visitor: show how calculate the depth of a tree
|
3
3
|
#
|
4
4
|
class DepthTreeNodeVisitor < TreeNodeVisitor
|
5
5
|
|
@@ -10,15 +10,15 @@ class DepthTreeNodeVisitor < TreeNodeVisitor
|
|
10
10
|
@depth = 0
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
13
|
+
def enter_tree_node( treeNode )
|
14
14
|
@depth += 1
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
17
|
+
def exit_tree_node( treeNode )
|
18
18
|
@depth -= 1
|
19
19
|
end
|
20
20
|
|
21
|
-
def
|
21
|
+
def visit_leaf_node( leafNode )
|
22
22
|
end
|
23
23
|
|
24
24
|
end
|
@@ -1,17 +1,16 @@
|
|
1
1
|
#
|
2
|
-
#
|
3
|
-
# per stampare i nodi di un TreeNode
|
2
|
+
# Print for every node the name
|
4
3
|
#
|
5
4
|
class FlatPrintTreeNodeVisitor < TreeNodeVisitor
|
6
5
|
|
7
|
-
def
|
6
|
+
def enter_tree_node( treeNode )
|
8
7
|
puts treeNode.name
|
9
8
|
end
|
10
9
|
|
11
|
-
def
|
10
|
+
def exit_tree_node( treeNode )
|
12
11
|
end
|
13
12
|
|
14
|
-
def
|
13
|
+
def visit_leaf_node( leafNode )
|
15
14
|
puts leafNode.name
|
16
15
|
end
|
17
16
|
|
@@ -1,17 +1,17 @@
|
|
1
1
|
#
|
2
|
-
#
|
3
|
-
#
|
4
|
-
#
|
2
|
+
# Visitor for DirTreeWalker
|
3
|
+
# Prints the node at enter
|
4
|
+
# TODO: join this con PrintTreeNodeVisitor
|
5
5
|
class PrintDirTreeVisitor < TreeNodeVisitor
|
6
6
|
|
7
|
-
def
|
7
|
+
def enter_tree_node( pathname )
|
8
8
|
puts pathname
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
11
|
+
def exit_tree_node( treeNode )
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
14
|
+
def visit_leaf_node( pathname )
|
15
15
|
puts pathname
|
16
16
|
end
|
17
17
|
|
@@ -1,3 +1,6 @@
|
|
1
|
+
#
|
2
|
+
# Prints TreeNode names indenting according to depth
|
3
|
+
#
|
1
4
|
class PrintTreeNodeVisitor < TreeNodeVisitor
|
2
5
|
|
3
6
|
def initialize( *args )
|
@@ -5,7 +8,7 @@ class PrintTreeNodeVisitor < TreeNodeVisitor
|
|
5
8
|
@depth = 0
|
6
9
|
end
|
7
10
|
|
8
|
-
def
|
11
|
+
def visit_leaf_node( leafNode )
|
9
12
|
str = ""
|
10
13
|
(0...@depth-1).step {
|
11
14
|
str << " |-"
|
@@ -14,7 +17,7 @@ class PrintTreeNodeVisitor < TreeNodeVisitor
|
|
14
17
|
puts str + leafNode.name.to_s
|
15
18
|
end
|
16
19
|
|
17
|
-
def
|
20
|
+
def enter_tree_node( treeNode )
|
18
21
|
|
19
22
|
str = ""
|
20
23
|
(0...@depth).step {
|
@@ -29,7 +32,7 @@ class PrintTreeNodeVisitor < TreeNodeVisitor
|
|
29
32
|
@depth += 1
|
30
33
|
end
|
31
34
|
|
32
|
-
def
|
35
|
+
def exit_tree_node( treeNode )
|
33
36
|
@depth -= 1
|
34
37
|
end
|
35
38
|
end
|
@@ -1,3 +1,6 @@
|
|
1
|
+
#
|
2
|
+
# Prints node using "to_s" instead of name
|
3
|
+
# TODO: join this with PrintTreeNodeVisitor
|
1
4
|
class PrintTreeNodeVisitor2 < TreeNodeVisitor
|
2
5
|
|
3
6
|
def initialize( *args )
|
@@ -5,16 +8,16 @@ class PrintTreeNodeVisitor2 < TreeNodeVisitor
|
|
5
8
|
@depth = 0
|
6
9
|
end
|
7
10
|
|
8
|
-
def
|
11
|
+
def visit_leaf_node( leaf_node )
|
9
12
|
str = ""
|
10
13
|
(0...@depth-1).step {
|
11
14
|
str << " |-"
|
12
15
|
}
|
13
16
|
str << " | "
|
14
|
-
puts str +
|
17
|
+
puts str + leaf_node.to_s
|
15
18
|
end
|
16
19
|
|
17
|
-
def
|
20
|
+
def enter_tree_node( tree_node )
|
18
21
|
|
19
22
|
str = ""
|
20
23
|
(0...@depth).step {
|
@@ -22,14 +25,14 @@ class PrintTreeNodeVisitor2 < TreeNodeVisitor
|
|
22
25
|
}
|
23
26
|
|
24
27
|
if @depth == 0
|
25
|
-
puts str +
|
28
|
+
puts str + tree_node.to_s
|
26
29
|
else
|
27
|
-
puts str +
|
30
|
+
puts str + tree_node.to_s
|
28
31
|
end
|
29
32
|
@depth += 1
|
30
33
|
end
|
31
34
|
|
32
|
-
def
|
35
|
+
def exit_tree_node( tree_node )
|
33
36
|
@depth -= 1
|
34
37
|
end
|
35
38
|
end
|
data/lib/treevisitor.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
class TreeVisitor
|
2
|
-
VERSION = '0.0.
|
3
|
-
end
|
1
|
+
class TreeVisitor
|
2
|
+
VERSION = '0.0.10'
|
3
|
+
end
|
data/test/gf_utilities/tc_md5.rb
CHANGED
@@ -1,14 +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 "
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
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 "8777d9d35da17496e21dcc8a4f9f8191", MD5.file( file_name ).to_s
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -7,8 +7,11 @@ class TCTreeNode < Test::Unit::TestCase
|
|
7
7
|
def test_simple_build
|
8
8
|
ta = TreeNode.new( "a" )
|
9
9
|
assert( ta.root? )
|
10
|
+
|
10
11
|
ln1 = LeafNode.new("1", ta)
|
11
12
|
assert_equal( ta, ln1.parent )
|
13
|
+
assert !ln1.root?
|
14
|
+
|
12
15
|
ln2 = LeafNode.new("2", ta)
|
13
16
|
tb = TreeNode.new( "b", ta )
|
14
17
|
ln3 = LeafNode.new( "3", tb )
|
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.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- gf
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-06-02 00:00:00 -07:00
|
13
13
|
default_executable: tree.rb
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -22,7 +22,7 @@ dependencies:
|
|
22
22
|
- !ruby/object:Gem::Version
|
23
23
|
version: "0"
|
24
24
|
version:
|
25
|
-
description:
|
25
|
+
description: Implementation of visitor design pattern. It contains a 'tree.rb' command line clone of the tree unix tool.
|
26
26
|
email: giovanni.ferro@gmail.com
|
27
27
|
executables:
|
28
28
|
- tree.rb
|
@@ -53,8 +53,8 @@ files:
|
|
53
53
|
- lib/treevisitor/visitors/depth_tree_node_visitor.rb
|
54
54
|
- lib/treevisitor/visitors/flat_print_tree_node_visitors.rb
|
55
55
|
- lib/treevisitor/visitors/print_dir_tree_visitor.rb
|
56
|
-
- lib/treevisitor/visitors/print_node_visitor2.rb
|
57
56
|
- lib/treevisitor/visitors/print_tree_node_visitor.rb
|
57
|
+
- lib/treevisitor/visitors/print_tree_node_visitor2.rb
|
58
58
|
- test_data/gf_utility/kwartz_test_data/out.certified/dummy.txt
|
59
59
|
- test_data/gf_utility/kwartz_test_data/out/dummy.txt
|
60
60
|
- test_data/gf_utility/kwartz_test_data/source/test1.html
|
@@ -90,7 +90,7 @@ rubyforge_project: treevisitor
|
|
90
90
|
rubygems_version: 1.2.0
|
91
91
|
signing_key:
|
92
92
|
specification_version: 3
|
93
|
-
summary:
|
93
|
+
summary: Implementation of visitor design pattern
|
94
94
|
test_files:
|
95
95
|
- test/treevisitor/tc_dir_processor.rb
|
96
96
|
- test/treevisitor/cli/tc_cli_tree.rb
|