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.
@@ -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