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.
@@ -1,116 +1,116 @@
1
- require 'treevisitor/visitors/block_tree_node_visitor'
2
-
3
- class DirTreeWalker
4
-
5
- def initialize( dirname )
6
- @dirname = dirname
7
- unless File.directory?( dirname )
8
- raise "#{dirname} is not a directory!"
9
- end
10
-
11
- @visitor = nil
12
-
13
- #
14
- # pattern
15
- #
16
- @ignore_dir_patterns = []
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
34
- end
35
-
36
- def add_ignore_dir( pattern )
37
- @ignore_dir_patterns << pattern
38
- end
39
-
40
- def add_ignore_file( pattern )
41
- @ignore_file_patterns << pattern
42
- end
43
-
44
- #
45
- # quali file bisogna prendere in considerazione
46
- # inspect opposto di ignore :-)
47
- #
48
- def add_inspect_file( pattern )
49
- @inspect_file_patterns << pattern
50
- end
51
-
52
- ##########################################################################
53
- # Options
54
-
55
- attr_accessor :visit_leaf
56
-
57
- ##########################################################################
58
-
59
-
60
- def ignore_dir?( dirname )
61
- include?( @ignore_dir_patterns, File.basename( dirname ) )
62
- end
63
-
64
- def ignore_file?( filename )
65
- include?( @ignore_file_patterns, File.basename( filename ) )
66
- end
67
-
68
- def inspect_file?( filename )
69
- return true if @inspect_file_patterns.empty?
70
- include?( @inspect_file_patterns, File.basename( filename ) )
71
- end
72
-
73
- def run( treeNodeVisitor )
74
- @visitor = treeNodeVisitor
75
- process_directory( File.expand_path( @dirname ) )
76
- end
77
-
78
- private
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
-
91
- #
92
- # recurse on other directories
93
- #
94
- # def process_directory( parentNode, dirname )
95
- def process_directory( dirname )
96
- @visitor.enter_treeNode( dirname )
97
- # return if ignore_dir?( dirname )
98
-
99
- Dir.entries( dirname ).each { |basename|
100
- next if basename == "." or basename == ".." # ignore always "." and ".."
101
- pathname = File.join( dirname, basename )
102
-
103
- if File.directory?( pathname )
104
- # directory
105
- process_directory( pathname ) unless ignore_dir?( basename )
106
- else
107
- if @visit_leaf
108
- if inspect_file?( basename ) && ! ignore_file?( basename )
109
- @visitor.visit_leafNode( pathname )
110
- end
111
- end
112
- end
113
- }
114
- @visitor.exit_treeNode( dirname )
115
- end
116
- end
1
+ require 'treevisitor/visitors/block_tree_node_visitor'
2
+
3
+ class DirTreeWalker
4
+
5
+ def initialize( dirname )
6
+ @dirname = dirname
7
+ unless File.directory?( dirname )
8
+ raise "#{dirname} is not a directory!"
9
+ end
10
+
11
+ @visitor = nil
12
+
13
+ #
14
+ # pattern
15
+ #
16
+ @ignore_dir_patterns = []
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
34
+ end
35
+
36
+ def add_ignore_dir( pattern )
37
+ @ignore_dir_patterns << pattern
38
+ end
39
+
40
+ def add_ignore_file( pattern )
41
+ @ignore_file_patterns << pattern
42
+ end
43
+
44
+ #
45
+ # quali file bisogna prendere in considerazione
46
+ # inspect opposto di ignore :-)
47
+ #
48
+ def add_inspect_file( pattern )
49
+ @inspect_file_patterns << pattern
50
+ end
51
+
52
+ ##########################################################################
53
+ # Options
54
+
55
+ attr_accessor :visit_leaf
56
+
57
+ ##########################################################################
58
+
59
+
60
+ def ignore_dir?( dirname )
61
+ include?( @ignore_dir_patterns, File.basename( dirname ) )
62
+ end
63
+
64
+ def ignore_file?( filename )
65
+ include?( @ignore_file_patterns, File.basename( filename ) )
66
+ end
67
+
68
+ def inspect_file?( filename )
69
+ return true if @inspect_file_patterns.empty?
70
+ include?( @inspect_file_patterns, File.basename( filename ) )
71
+ end
72
+
73
+ def run( treeNodeVisitor )
74
+ @visitor = treeNodeVisitor
75
+ process_directory( File.expand_path( @dirname ) )
76
+ end
77
+
78
+ private
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
+
91
+ #
92
+ # recurse on other directories
93
+ #
94
+ # def process_directory( parentNode, dirname )
95
+ def process_directory( dirname )
96
+ @visitor.enter_tree_node( dirname )
97
+ # return if ignore_dir?( dirname )
98
+
99
+ Dir.entries( dirname ).each { |basename|
100
+ next if basename == "." or basename == ".." # ignore always "." and ".."
101
+ pathname = File.join( dirname, basename )
102
+
103
+ if File.directory?( pathname )
104
+ # directory
105
+ process_directory( pathname ) unless ignore_dir?( basename )
106
+ else
107
+ if @visit_leaf
108
+ if inspect_file?( basename ) && ! ignore_file?( basename )
109
+ @visitor.visit_leaf_node( pathname )
110
+ end
111
+ end
112
+ end
113
+ }
114
+ @visitor.exit_tree_node( dirname )
115
+ end
116
+ end
@@ -1,27 +1,31 @@
1
- # common
2
- require "treevisitor/abs_node"
3
-
4
- #
5
- # Deriva da AbsNode
6
- #
7
- # definisce un metodo to_str
8
- #
9
- #
10
- class LeafNode < AbsNode
11
-
12
- def initialize( name, parent = nil )
13
- super( name )
14
- if parent
15
- parent.add_leaf( self )
16
- end
17
- end
18
-
19
- def accept( visitor )
20
- visitor.visit_leafNode( self )
21
- end
22
-
23
- def to_str
24
- name.to_str
25
- end
26
-
27
- end
1
+ # common
2
+ require "treevisitor/abs_node"
3
+
4
+ #
5
+ # Deriva da AbsNode
6
+ #
7
+ # definisce un metodo to_str
8
+ #
9
+ #
10
+ class LeafNode < AbsNode
11
+
12
+ def initialize( name, parent = nil )
13
+ super( name )
14
+ if parent
15
+ parent.add_leaf( self )
16
+ end
17
+ end
18
+
19
+ def root?
20
+ false
21
+ end
22
+
23
+ def accept( visitor )
24
+ visitor.visit_leaf_node( self )
25
+ end
26
+
27
+ def to_str
28
+ name.to_str
29
+ end
30
+
31
+ end
@@ -1,134 +1,134 @@
1
- # common
2
- require 'treevisitor/leaf_node'
3
-
4
- #
5
- # Un treeNode e' come un AbsNode
6
- # in piu' ha la possibilita' di contenere
7
- # altri treeNode e LeafNode
8
- #
9
- # TreeNode @childs -1---n-> TreeNode
10
- # @leaves -1---n-> LeafNode
11
- #
12
- class TreeNode < AbsNode
13
-
14
- attr_reader :leaves
15
- attr_reader :childs
16
-
17
- def initialize( name, parent = nil )
18
- @leaves = []
19
- @childs = []
20
- super( name )
21
- if parent
22
- parent.add_child( self )
23
- end
24
- end
25
-
26
- def root?
27
- @parent.nil?
28
- end
29
-
30
- #
31
- # invalidate cached info
32
- #
33
- def invalidate
34
- super
35
- @childs.each{ |c| c.invalidate }
36
- @leaves.each{ |l| l.invalidate }
37
- end
38
-
39
- def nr_nodes
40
- nr = @leaves.length + @childs.length
41
- @childs.inject( nr ) { |nr,c| nr + c.nr_nodes }
42
- end
43
-
44
- def nr_leaves
45
- @leaves.length + @childs.inject(0) { |sum, child| sum + child.nr_leaves }
46
- end
47
-
48
- def nr_childs
49
- @childs.length + @childs.inject(0) { |sum, child| sum + child.nr_childs }
50
- end
51
-
52
- def add_leaf( leaf )
53
- return if leaf.parent == self
54
- if not leaf.parent.nil?
55
- leaf.remove_from_parent()
56
- end
57
- leaf.parent = self
58
- if @leaves.length > 0
59
- @leaves.last.next = leaf
60
- leaf.prev = @leaves.last
61
- leaf.next = nil
62
- end
63
- leaf.invalidate
64
- @leaves << leaf
65
- end
66
-
67
- def add_child( treeNode )
68
- return if treeNode.parent == self
69
- if not treeNode.parent.nil?
70
- treeNode.remove_from_parent()
71
- end
72
- treeNode.invalidate
73
- treeNode.parent = self
74
- @childs << treeNode
75
- end
76
-
77
- def find( name )
78
- if self.name == name
79
- return self
80
- end
81
-
82
- leaf = @leaves.find { |l| l.name == name }
83
- if leaf
84
- return leaf
85
- end
86
-
87
- @childs.each {|c|
88
- node = c.find(name)
89
- return node if node
90
- }
91
- nil
92
- end
93
-
94
- def accept( visitor )
95
- visitor.enter_treeNode( self )
96
- @leaves.each{ |l|
97
- l.accept( visitor )
98
- }
99
- @childs.each { |tn|
100
- tn.accept( visitor )
101
- }
102
- visitor.exit_treeNode( self )
103
- end
104
-
105
- def to_str( depth = 0 )
106
- str = ""
107
- (0...depth).step {
108
- str << " |-"
109
- }
110
-
111
- str << @name
112
- str << "\n"
113
-
114
- if ! @leaves.empty?
115
- @leaves.each{ |l|
116
- (0...depth-1).step {
117
- str << " |-"
118
- }
119
- if @childs.empty?
120
- str << " | "
121
- else
122
- str << " | | "
123
- end
124
- str << l.to_str
125
- str << "\n"
126
- }
127
- end
128
-
129
- @childs.each { |tn|
130
- str << tn.to_str( depth + 1 )
131
- }
132
- str
133
- end
134
- end
1
+ # common
2
+ require 'treevisitor/leaf_node'
3
+
4
+ #
5
+ # Un treeNode e' come un AbsNode
6
+ # in piu' ha la possibilita' di contenere
7
+ # altri treeNode e LeafNode
8
+ #
9
+ # TreeNode @childs -1---n-> TreeNode
10
+ # @leaves -1---n-> LeafNode
11
+ #
12
+ class TreeNode < AbsNode
13
+
14
+ attr_reader :leaves
15
+ attr_reader :childs
16
+
17
+ def initialize( name, parent = nil )
18
+ @leaves = []
19
+ @childs = []
20
+ super( name )
21
+ if parent
22
+ parent.add_child( self )
23
+ end
24
+ end
25
+
26
+ def root?
27
+ @parent.nil?
28
+ end
29
+
30
+ #
31
+ # invalidate cached info
32
+ #
33
+ def invalidate
34
+ super
35
+ @childs.each{ |c| c.invalidate }
36
+ @leaves.each{ |l| l.invalidate }
37
+ end
38
+
39
+ def nr_nodes
40
+ nr = @leaves.length + @childs.length
41
+ @childs.inject( nr ) { |nr,c| nr + c.nr_nodes }
42
+ end
43
+
44
+ def nr_leaves
45
+ @leaves.length + @childs.inject(0) { |sum, child| sum + child.nr_leaves }
46
+ end
47
+
48
+ def nr_childs
49
+ @childs.length + @childs.inject(0) { |sum, child| sum + child.nr_childs }
50
+ end
51
+
52
+ def add_leaf( leaf )
53
+ return if leaf.parent == self
54
+ if not leaf.parent.nil?
55
+ leaf.remove_from_parent()
56
+ end
57
+ leaf.parent = self
58
+ if @leaves.length > 0
59
+ @leaves.last.next = leaf
60
+ leaf.prev = @leaves.last
61
+ leaf.next = nil
62
+ end
63
+ leaf.invalidate
64
+ @leaves << leaf
65
+ end
66
+
67
+ def add_child( treeNode )
68
+ return if treeNode.parent == self
69
+ if not treeNode.parent.nil?
70
+ treeNode.remove_from_parent()
71
+ end
72
+ treeNode.invalidate
73
+ treeNode.parent = self
74
+ @childs << treeNode
75
+ end
76
+
77
+ def find( name )
78
+ if self.name == name
79
+ return self
80
+ end
81
+
82
+ leaf = @leaves.find { |l| l.name == name }
83
+ if leaf
84
+ return leaf
85
+ end
86
+
87
+ @childs.each {|c|
88
+ node = c.find(name)
89
+ return node if node
90
+ }
91
+ nil
92
+ end
93
+
94
+ def accept( visitor )
95
+ visitor.enter_tree_node( self )
96
+ @leaves.each{ |l|
97
+ l.accept( visitor )
98
+ }
99
+ @childs.each { |tn|
100
+ tn.accept( visitor )
101
+ }
102
+ visitor.exit_tree_node( self )
103
+ end
104
+
105
+ def to_str( depth = 0 )
106
+ str = ""
107
+ (0...depth).step {
108
+ str << " |-"
109
+ }
110
+
111
+ str << @name
112
+ str << "\n"
113
+
114
+ if ! @leaves.empty?
115
+ @leaves.each{ |l|
116
+ (0...depth-1).step {
117
+ str << " |-"
118
+ }
119
+ if @childs.empty?
120
+ str << " | "
121
+ else
122
+ str << " | | "
123
+ end
124
+ str << l.to_str
125
+ str << "\n"
126
+ }
127
+ end
128
+
129
+ @childs.each { |tn|
130
+ str << tn.to_str( depth + 1 )
131
+ }
132
+ str
133
+ end
134
+ end
@@ -1,31 +1,31 @@
1
- # rubygems
2
- require 'rubygems'
3
- require 'abstract'
4
-
5
- #
6
- # Classe astratta per visitare un TreeNode
7
- #
8
- class TreeNodeVisitor
9
-
10
- def enter_treeNode( treeNode )
11
- not_implemented
12
- end
13
-
14
- def exit_treeNode( treeNode )
15
- not_implemented
16
- end
17
-
18
- def visit_leafNode( leafNode )
19
- not_implemented
20
- end
21
-
22
- end
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
1
+ # rubygems
2
+ require 'rubygems'
3
+ require 'abstract'
4
+
5
+ #
6
+ # Classe astratta per visitare un TreeNode
7
+ #
8
+ class TreeNodeVisitor
9
+
10
+ def enter_tree_node( treeNode )
11
+ not_implemented
12
+ end
13
+
14
+ def exit_tree_node( treeNode )
15
+ not_implemented
16
+ end
17
+
18
+ def visit_leaf_node( leafNode )
19
+ not_implemented
20
+ end
21
+
22
+ end
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
@@ -1,8 +1,7 @@
1
1
  require 'treevisitor/tree_node_visitor.rb'
2
2
 
3
3
  #
4
- # Utilizzo della classa astratta DirTreeProcessor
5
- # per chimare un blocco su tutti i TreeNode
4
+ # It call a block when visit a tree_node or leaf_node
6
5
  #
7
6
  class BlockTreeNodeVisitor < TreeNodeVisitor
8
7
 
@@ -10,14 +9,14 @@ class BlockTreeNodeVisitor < TreeNodeVisitor
10
9
  @block = action
11
10
  end
12
11
 
13
- def enter_treeNode( treeNode )
12
+ def enter_tree_node( treeNode )
14
13
  @block.call( treeNode )
15
14
  end
16
15
 
17
- def exit_treeNode( treeNode )
16
+ def exit_tree_node( treeNode )
18
17
  end
19
18
 
20
- def visit_leafNode( leafNode )
19
+ def visit_leaf_node( leafNode )
21
20
  @block.call( leafNode )
22
21
  end
23
22