gf-treevisitor 0.0.8 → 0.0.10
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/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
|