treevisitor 0.1.5 → 0.1.6
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/README.md +104 -0
- data/VERSION.yml +1 -1
- data/examples/{directory_without_subdirectory.rb → directory_walker/directory_without_subdirectory.rb} +6 -4
- data/examples/{find_files.rb → directory_walker/find_files.rb} +4 -3
- data/examples/{print_files.rb → directory_walker/print_files.rb} +5 -8
- data/examples/protovis/directory_to_json_visitor.rb +13 -0
- data/examples/protovis/index.html +87 -0
- data/examples/protovis/protovis-d3.2.js +15269 -0
- data/examples/protovis/treevisitor.js +33 -0
- data/examples/protovis/treevisitor.png +0 -0
- data/lib/treevisitor/basic_tree_node_visitor.rb +29 -0
- data/lib/treevisitor/cli/cli_tree.rb +43 -35
- data/lib/treevisitor/directory_walker.rb +260 -0
- data/lib/treevisitor/tree_node_visitor.rb +33 -5
- data/lib/treevisitor/{dir_processor.rb → util/dir_processor.rb} +0 -0
- data/lib/treevisitor/visitors/block_tree_node_visitor.rb +1 -1
- data/lib/treevisitor/visitors/build_dir_tree_visitor.rb +1 -1
- data/lib/treevisitor/visitors/callback_tree_node_visitor.rb +1 -2
- data/lib/treevisitor/visitors/callback_tree_node_visitor2.rb +1 -1
- data/lib/treevisitor/visitors/clone_tree_node_visitor.rb +1 -1
- data/lib/treevisitor/visitors/depth_tree_node_visitor.rb +1 -1
- data/lib/treevisitor/visitors/directory_to_hash_visitor.rb +33 -0
- data/lib/treevisitor/visitors/flat_print_tree_node_visitors.rb +1 -1
- data/lib/treevisitor/visitors/print_dir_tree_visitor.rb +1 -1
- data/lib/treevisitor/visitors/print_tree_node_visitor.rb +1 -1
- data/lib/treevisitor.rb +24 -8
- data/spec/fixtures/{test_dir → test_dir_1}/.dir_with_dot/dummy.txt +0 -0
- data/spec/fixtures/{test_dir → test_dir_1}/dir.1/dir.1.2/file.1.2.1 +0 -0
- data/spec/fixtures/{test_dir → test_dir_1}/dir.1/file.1.1 +0 -0
- data/spec/fixtures/{test_dir → test_dir_1}/dir.2/file.2.1 +0 -0
- data/spec/spec_helper.rb +6 -9
- data/spec/treevisitor/cli/cli_tree_spec.rb +5 -5
- data/spec/treevisitor/directory_walker_spec.rb +61 -0
- data/spec/treevisitor/tree_dsl_spec.rb +57 -0
- data/spec/treevisitor/tree_dsl_with_derived_class1_spec.rb +53 -0
- data/spec/treevisitor/tree_dsl_with_derived_class_spec.rb +51 -0
- data/spec/treevisitor/{dir_processor_spec.rb → util/dir_processor_spec.rb} +2 -4
- data/spec/treevisitor/visitor_dsl_spec.rb +32 -0
- data/spec/treevisitor/visitors/block_tree_node_visitor_spec.rb +27 -0
- data/spec/treevisitor/visitors/callback_tree_node_visitor2_spec.rb +38 -0
- data/spec/treevisitor/visitors/callback_tree_node_visitors_spec.rb +29 -0
- data/spec/treevisitor/visitors/depth_tree_node_visitor_spec.rb +30 -0
- data/tasks/jeweler.rake +4 -8
- data/treevisitor.gemspec +114 -0
- metadata +48 -29
- data/README.rdoc +0 -42
- data/lib/treevisitor/dir_tree_walker.rb +0 -165
- data/spec/treevisitor/dir_tree_walker_spec.rb +0 -50
- data/spec/treevisitor/tree_node_dsl_spec.rb +0 -153
- data/spec/treevisitor/tree_node_visitor_spec.rb +0 -70
- data/tasks/rubyforge.rake +0 -28
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 6
|
9
|
+
version: 0.1.6
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Tokiro
|
@@ -14,11 +14,11 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-21 00:00:00 +01:00
|
18
18
|
default_executable: tree.rb
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
|
-
name:
|
21
|
+
name: json
|
22
22
|
requirement: &id001 !ruby/object:Gem::Requirement
|
23
23
|
none: false
|
24
24
|
requirements:
|
@@ -103,49 +103,62 @@ extensions: []
|
|
103
103
|
|
104
104
|
extra_rdoc_files:
|
105
105
|
- LICENSE.txt
|
106
|
-
- README.
|
106
|
+
- README.md
|
107
107
|
files:
|
108
|
-
-
|
108
|
+
- LICENSE.txt
|
109
|
+
- README.md
|
109
110
|
- Rakefile
|
110
111
|
- VERSION.yml
|
111
|
-
- examples/directory_without_subdirectory.rb
|
112
|
-
- examples/find_files.rb
|
113
|
-
- examples/print_files.rb
|
112
|
+
- examples/directory_walker/directory_without_subdirectory.rb
|
113
|
+
- examples/directory_walker/find_files.rb
|
114
|
+
- examples/directory_walker/print_files.rb
|
115
|
+
- examples/protovis/directory_to_json_visitor.rb
|
116
|
+
- examples/protovis/index.html
|
117
|
+
- examples/protovis/protovis-d3.2.js
|
118
|
+
- examples/protovis/treevisitor.js
|
119
|
+
- examples/protovis/treevisitor.png
|
114
120
|
- lib/tree_visitor.rb
|
115
121
|
- lib/treevisitor.rb
|
116
122
|
- lib/treevisitor/abs_node.rb
|
123
|
+
- lib/treevisitor/basic_tree_node_visitor.rb
|
117
124
|
- lib/treevisitor/cli/cli_tree.rb
|
118
|
-
- lib/treevisitor/
|
119
|
-
- lib/treevisitor/dir_tree_walker.rb
|
125
|
+
- lib/treevisitor/directory_walker.rb
|
120
126
|
- lib/treevisitor/leaf_node.rb
|
121
127
|
- lib/treevisitor/tree_node.rb
|
122
128
|
- lib/treevisitor/tree_node_visitor.rb
|
129
|
+
- lib/treevisitor/util/dir_processor.rb
|
123
130
|
- lib/treevisitor/visitors/block_tree_node_visitor.rb
|
124
131
|
- lib/treevisitor/visitors/build_dir_tree_visitor.rb
|
125
132
|
- lib/treevisitor/visitors/callback_tree_node_visitor.rb
|
126
133
|
- lib/treevisitor/visitors/callback_tree_node_visitor2.rb
|
127
134
|
- lib/treevisitor/visitors/clone_tree_node_visitor.rb
|
128
135
|
- lib/treevisitor/visitors/depth_tree_node_visitor.rb
|
136
|
+
- lib/treevisitor/visitors/directory_to_hash_visitor.rb
|
129
137
|
- lib/treevisitor/visitors/flat_print_tree_node_visitors.rb
|
130
138
|
- lib/treevisitor/visitors/print_dir_tree_visitor.rb
|
131
139
|
- lib/treevisitor/visitors/print_tree_node_visitor.rb
|
132
140
|
- lib/treevisitor_cli.rb
|
133
141
|
- tasks/jeweler.rake
|
134
142
|
- tasks/rspec.rake
|
135
|
-
- tasks/rubyforge.rake
|
136
143
|
- tasks/yard.rake
|
137
|
-
-
|
138
|
-
- spec/fixtures/
|
139
|
-
- spec/fixtures/
|
140
|
-
- spec/fixtures/
|
141
|
-
- spec/fixtures/
|
144
|
+
- treevisitor.gemspec
|
145
|
+
- spec/fixtures/test_dir_1/.dir_with_dot/dummy.txt
|
146
|
+
- spec/fixtures/test_dir_1/dir.1/dir.1.2/file.1.2.1
|
147
|
+
- spec/fixtures/test_dir_1/dir.1/file.1.1
|
148
|
+
- spec/fixtures/test_dir_1/dir.2/file.2.1
|
142
149
|
- spec/spec_helper.rb
|
143
150
|
- spec/treevisitor/cli/cli_tree_spec.rb
|
144
|
-
- spec/treevisitor/
|
145
|
-
- spec/treevisitor/
|
146
|
-
- spec/treevisitor/
|
151
|
+
- spec/treevisitor/directory_walker_spec.rb
|
152
|
+
- spec/treevisitor/tree_dsl_spec.rb
|
153
|
+
- spec/treevisitor/tree_dsl_with_derived_class1_spec.rb
|
154
|
+
- spec/treevisitor/tree_dsl_with_derived_class_spec.rb
|
147
155
|
- spec/treevisitor/tree_node_spec.rb
|
148
|
-
- spec/treevisitor/
|
156
|
+
- spec/treevisitor/util/dir_processor_spec.rb
|
157
|
+
- spec/treevisitor/visitor_dsl_spec.rb
|
158
|
+
- spec/treevisitor/visitors/block_tree_node_visitor_spec.rb
|
159
|
+
- spec/treevisitor/visitors/callback_tree_node_visitor2_spec.rb
|
160
|
+
- spec/treevisitor/visitors/callback_tree_node_visitors_spec.rb
|
161
|
+
- spec/treevisitor/visitors/depth_tree_node_visitor_spec.rb
|
149
162
|
- bin/tree.rb
|
150
163
|
has_rdoc: true
|
151
164
|
homepage: http://github.com/tokiro/treevisitor
|
@@ -180,14 +193,20 @@ signing_key:
|
|
180
193
|
specification_version: 3
|
181
194
|
summary: Implementation of visitor design pattern
|
182
195
|
test_files:
|
183
|
-
- spec/fixtures/
|
184
|
-
- spec/fixtures/
|
185
|
-
- spec/fixtures/
|
186
|
-
- spec/fixtures/
|
196
|
+
- spec/fixtures/test_dir_1/.dir_with_dot/dummy.txt
|
197
|
+
- spec/fixtures/test_dir_1/dir.1/dir.1.2/file.1.2.1
|
198
|
+
- spec/fixtures/test_dir_1/dir.1/file.1.1
|
199
|
+
- spec/fixtures/test_dir_1/dir.2/file.2.1
|
187
200
|
- spec/spec_helper.rb
|
188
201
|
- spec/treevisitor/cli/cli_tree_spec.rb
|
189
|
-
- spec/treevisitor/
|
190
|
-
- spec/treevisitor/
|
191
|
-
- spec/treevisitor/
|
202
|
+
- spec/treevisitor/directory_walker_spec.rb
|
203
|
+
- spec/treevisitor/tree_dsl_spec.rb
|
204
|
+
- spec/treevisitor/tree_dsl_with_derived_class1_spec.rb
|
205
|
+
- spec/treevisitor/tree_dsl_with_derived_class_spec.rb
|
192
206
|
- spec/treevisitor/tree_node_spec.rb
|
193
|
-
- spec/treevisitor/
|
207
|
+
- spec/treevisitor/util/dir_processor_spec.rb
|
208
|
+
- spec/treevisitor/visitor_dsl_spec.rb
|
209
|
+
- spec/treevisitor/visitors/block_tree_node_visitor_spec.rb
|
210
|
+
- spec/treevisitor/visitors/callback_tree_node_visitor2_spec.rb
|
211
|
+
- spec/treevisitor/visitors/callback_tree_node_visitors_spec.rb
|
212
|
+
- spec/treevisitor/visitors/depth_tree_node_visitor_spec.rb
|
data/README.rdoc
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
= tree.rb / tree visitor library
|
2
|
-
|
3
|
-
+tree.rb+ is a 'clone' of tree unix command. It is based on tree visitor library.
|
4
|
-
Tree visitor is an implementation of visitor design pattern.
|
5
|
-
|
6
|
-
$ tree.rb lib
|
7
|
-
|
8
|
-
lib
|
9
|
-
|-- tree_visitor.rb
|
10
|
-
|-- treevisitor.rb
|
11
|
-
|-- treevisitor_cli.rb
|
12
|
-
`-- treevisitor
|
13
|
-
|-- abs_node.rb
|
14
|
-
|-- dir_processor.rb
|
15
|
-
|-- dir_tree_walker.rb
|
16
|
-
|-- leaf_node.rb
|
17
|
-
|-- tree_node.rb
|
18
|
-
|-- tree_node_visitor.rb
|
19
|
-
|-- cli
|
20
|
-
| `-- cli_tree.rb
|
21
|
-
`-- visitors
|
22
|
-
|-- block_tree_node_visitor.rb
|
23
|
-
|-- build_dir_tree_visitor.rb
|
24
|
-
|-- callback_tree_node_visitor.rb
|
25
|
-
|-- callback_tree_node_visitor2.rb
|
26
|
-
|-- clone_tree_node_visitor.rb
|
27
|
-
|-- depth_tree_node_visitor.rb
|
28
|
-
|-- flat_print_tree_node_visitors.rb
|
29
|
-
|-- print_dir_tree_visitor.rb
|
30
|
-
`-- print_tree_node_visitor.rb
|
31
|
-
|
32
|
-
== Documentation
|
33
|
-
|
34
|
-
http://rubydoc.info/gems/treevisitor
|
35
|
-
|
36
|
-
== INSTALL:
|
37
|
-
|
38
|
-
sudo gem install treevisitor
|
39
|
-
|
40
|
-
== Copyright
|
41
|
-
|
42
|
-
Copyright (c) 2009-2010 tokiro.oyama@gmail.com. See LICENSE for details.
|
@@ -1,165 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
module TreeVisitor
|
3
|
-
|
4
|
-
#
|
5
|
-
# Visit a file system directory
|
6
|
-
#
|
7
|
-
class DirTreeWalker
|
8
|
-
|
9
|
-
#
|
10
|
-
# @param [String] dirname the root of the tree (top level directory)
|
11
|
-
#
|
12
|
-
def initialize(dirname)
|
13
|
-
@dirname = dirname
|
14
|
-
unless File.directory?(dirname)
|
15
|
-
raise "#{dirname} is not a directory!"
|
16
|
-
end
|
17
|
-
|
18
|
-
@visitor = nil
|
19
|
-
|
20
|
-
#
|
21
|
-
# pattern
|
22
|
-
#
|
23
|
-
@ignore_dir_patterns = []
|
24
|
-
@ignore_file_patterns = []
|
25
|
-
|
26
|
-
@match_file_patterns = []
|
27
|
-
|
28
|
-
#
|
29
|
-
# options
|
30
|
-
#
|
31
|
-
@visit_file = true
|
32
|
-
end
|
33
|
-
|
34
|
-
##########################################################################
|
35
|
-
# Pattern
|
36
|
-
|
37
|
-
|
38
|
-
#
|
39
|
-
# Ignore a node (leaf/Tree) matching pattern
|
40
|
-
# @param [RegEx] pattern
|
41
|
-
#
|
42
|
-
def ignore(pattern)
|
43
|
-
@ignore_dir_patterns << pattern
|
44
|
-
@ignore_file_patterns << pattern
|
45
|
-
self
|
46
|
-
end
|
47
|
-
|
48
|
-
#
|
49
|
-
# Ignore a directory (Tree) matching pattern
|
50
|
-
# @param [RegEx] pattern
|
51
|
-
#
|
52
|
-
def ignore_dir(pattern)
|
53
|
-
@ignore_dir_patterns << pattern
|
54
|
-
self
|
55
|
-
end
|
56
|
-
|
57
|
-
#
|
58
|
-
# Ignore a file (Leaf) matching pattern
|
59
|
-
# @param [RegEx] pattern
|
60
|
-
#
|
61
|
-
def ignore_file(pattern)
|
62
|
-
@ignore_file_patterns << pattern
|
63
|
-
self
|
64
|
-
end
|
65
|
-
|
66
|
-
#
|
67
|
-
# Just the opposite of ignore
|
68
|
-
# directory/file matching pattern will be visited
|
69
|
-
#
|
70
|
-
# @param [RegEx] pattern
|
71
|
-
#
|
72
|
-
def match(pattern)
|
73
|
-
@match_file_patterns << pattern
|
74
|
-
self
|
75
|
-
end
|
76
|
-
|
77
|
-
##########################################################################
|
78
|
-
# Options
|
79
|
-
|
80
|
-
#
|
81
|
-
# it is true to visit file
|
82
|
-
#
|
83
|
-
attr_accessor :visit_file
|
84
|
-
|
85
|
-
##########################################################################
|
86
|
-
|
87
|
-
#
|
88
|
-
# Test directory ignore pattern
|
89
|
-
#
|
90
|
-
# @param [String] directory name
|
91
|
-
# @return [boolean] if dirname match almost one pattern
|
92
|
-
#
|
93
|
-
def ignore_dir?(dirname)
|
94
|
-
_include?(@ignore_dir_patterns, File.basename(dirname))
|
95
|
-
end
|
96
|
-
|
97
|
-
#
|
98
|
-
# Test file ignore pattern
|
99
|
-
#
|
100
|
-
# @param [String] file name
|
101
|
-
# @return [boolean] if filename match almost one pattern
|
102
|
-
#
|
103
|
-
def ignore_file?(filename)
|
104
|
-
_include?(@ignore_file_patterns, File.basename(filename))
|
105
|
-
end
|
106
|
-
|
107
|
-
#
|
108
|
-
# Test common ignore pattern
|
109
|
-
#
|
110
|
-
# @param [String] file name
|
111
|
-
# @return [boolean] if filename match almost one pattern
|
112
|
-
#
|
113
|
-
def match?(filename)
|
114
|
-
return true if @match_file_patterns.empty?
|
115
|
-
_include?(@match_file_patterns, File.basename(filename))
|
116
|
-
end
|
117
|
-
|
118
|
-
#
|
119
|
-
# Run the visitor through the directory tree
|
120
|
-
#
|
121
|
-
# @param [TreeNodeVisitor]
|
122
|
-
# @return [TreeNodeVisitor] the visitor
|
123
|
-
#
|
124
|
-
def run(tree_node_visitor)
|
125
|
-
@visitor = tree_node_visitor
|
126
|
-
process_directory(File.expand_path(@dirname))
|
127
|
-
tree_node_visitor
|
128
|
-
end
|
129
|
-
|
130
|
-
private
|
131
|
-
|
132
|
-
def _include?(patterns, basename)
|
133
|
-
# return false if the patters.empty?
|
134
|
-
patterns.find { |pattern|
|
135
|
-
if pattern.kind_of? Regexp
|
136
|
-
pattern.match(basename)
|
137
|
-
else
|
138
|
-
basename == pattern
|
139
|
-
end
|
140
|
-
}
|
141
|
-
end
|
142
|
-
|
143
|
-
#
|
144
|
-
# recurse on other directories
|
145
|
-
#
|
146
|
-
def process_directory(dirname)
|
147
|
-
@visitor.enter_tree_node(dirname)
|
148
|
-
# return if ignore_dir?( dirname )
|
149
|
-
|
150
|
-
Dir.entries(dirname).sort.each { |basename|
|
151
|
-
next if basename == "." or basename == ".." # ignore always "." and ".."
|
152
|
-
pathname = File.join(dirname, basename)
|
153
|
-
|
154
|
-
if File.directory?(pathname)
|
155
|
-
process_directory(pathname) unless ignore_dir?(basename)
|
156
|
-
else
|
157
|
-
if !!@visit_file && match?(basename) && !ignore_file?(basename)
|
158
|
-
@visitor.visit_leaf_node(pathname)
|
159
|
-
end
|
160
|
-
end
|
161
|
-
}
|
162
|
-
@visitor.exit_tree_node(dirname)
|
163
|
-
end
|
164
|
-
end
|
165
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require File.join(File.dirname(__FILE__), "..", "spec_helper")
|
3
|
-
|
4
|
-
describe DirTreeWalker do
|
5
|
-
|
6
|
-
it "should accumulate file names" do
|
7
|
-
dir_tree_walker = DirTreeWalker.new( File.join(FIXTURES, "test_dir") )
|
8
|
-
|
9
|
-
accumulator = []
|
10
|
-
visitor = BlockTreeNodeVisitor.new { |pathname| accumulator << File.basename( pathname ) }
|
11
|
-
dir_tree_walker.run( visitor )
|
12
|
-
accumulator.length.should == 9
|
13
|
-
accumulator.sort.should == %w{ test_dir dir.1 dir.1.2 file.1.2.1 file.1.1 dir.2 file.2.1 .dir_with_dot dummy.txt}.sort
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should accumulate file names 2" do
|
17
|
-
dir_tree_walker = DirTreeWalker.new( File.join( FIXTURES, "test_dir_2" ) )
|
18
|
-
dir_tree_walker.ignore( "sub" )
|
19
|
-
|
20
|
-
accumulator = []
|
21
|
-
visitor = BlockTreeNodeVisitor.new { |pathname| accumulator << File.basename( pathname ) }
|
22
|
-
dir_tree_walker.run( visitor )
|
23
|
-
# accumulator.length.should == 4
|
24
|
-
accumulator.sort.should == %w{ [Dsube] test_dir_2}.sort
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should ignore files" do
|
28
|
-
dtp = DirTreeWalker.new( "." )
|
29
|
-
|
30
|
-
dtp.ignore(/^\./)
|
31
|
-
dtp.ignore_file?( ".thumbnails" ).should be_true
|
32
|
-
dtp.ignore_dir?( ".thumbnails" ).should be_true
|
33
|
-
|
34
|
-
dtp.ignore_dir("thumbnails")
|
35
|
-
dtp.ignore_dir?( ".thumbnails" ).should be_true
|
36
|
-
dtp.ignore_dir?( "thumbnails" ).should be_true
|
37
|
-
dtp.ignore_dir?( "pippo" ).should be_false
|
38
|
-
|
39
|
-
dtp.ignore_file("xvpics")
|
40
|
-
dtp.ignore_file?( "xvpics" ).should be_true
|
41
|
-
end
|
42
|
-
|
43
|
-
it "should ignore files 2" do
|
44
|
-
dtp = DirTreeWalker.new( "." )
|
45
|
-
|
46
|
-
dtp.ignore("sub")
|
47
|
-
dtp.ignore_file?( "[Dsube]" ).should be_false
|
48
|
-
dtp.ignore_dir?( "[Dsube]" ).should be_false
|
49
|
-
end
|
50
|
-
end
|
@@ -1,153 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require File.join(File.dirname(__FILE__), "..", "spec_helper")
|
3
|
-
|
4
|
-
describe "TreeNodeDsl" do
|
5
|
-
|
6
|
-
class DTreeNode < TreeNode
|
7
|
-
def to_s
|
8
|
-
"dt: #{content}"
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
class DLeafNode < LeafNode
|
13
|
-
def to_s
|
14
|
-
"dl: #{content}"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
class ArgsTreeNode < TreeNode
|
19
|
-
|
20
|
-
attr_reader :description
|
21
|
-
|
22
|
-
def initialize(name, description, parent)
|
23
|
-
super(name, parent)
|
24
|
-
@description = description
|
25
|
-
end
|
26
|
-
|
27
|
-
def to_s
|
28
|
-
"a: #{description}"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
class ArgsLeafNode < LeafNode
|
33
|
-
|
34
|
-
attr_reader :description
|
35
|
-
|
36
|
-
def initialize(name, description, parent)
|
37
|
-
super(name, parent)
|
38
|
-
@description = description
|
39
|
-
end
|
40
|
-
|
41
|
-
def to_s
|
42
|
-
"a: #{description}"
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
it "test_dsl" do
|
49
|
-
tree = TreeNode.create do
|
50
|
-
node "root" do
|
51
|
-
leaf "l1"
|
52
|
-
leaf "l2"
|
53
|
-
node "sub" do
|
54
|
-
leaf "l3"
|
55
|
-
end
|
56
|
-
node "woleaves"
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
# puts tree.to_str
|
61
|
-
out =<<EOS
|
62
|
-
root
|
63
|
-
|-- l1
|
64
|
-
|-- l2
|
65
|
-
|-- sub
|
66
|
-
| `-- l3
|
67
|
-
`-- woleaves
|
68
|
-
EOS
|
69
|
-
tree.to_str.should == out
|
70
|
-
end
|
71
|
-
|
72
|
-
it "test_dsl_block_with_arg" do
|
73
|
-
tree = TreeNode.create do
|
74
|
-
node "root" do |node|
|
75
|
-
node.prefix_path=("pre/")
|
76
|
-
leaf "l1"
|
77
|
-
leaf "l2"
|
78
|
-
node "sub" do
|
79
|
-
leaf "l3" do |leaf|
|
80
|
-
end
|
81
|
-
end
|
82
|
-
node "woleaves"
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
# puts tree.to_str
|
87
|
-
out =<<EOS
|
88
|
-
root
|
89
|
-
|-- l1
|
90
|
-
|-- l2
|
91
|
-
|-- sub
|
92
|
-
| `-- l3
|
93
|
-
`-- woleaves
|
94
|
-
EOS
|
95
|
-
tree.to_str.should == out
|
96
|
-
tree.find("l3").path_with_prefix.should == "pre/root/sub/l3"
|
97
|
-
end
|
98
|
-
|
99
|
-
it "test_derivated" do
|
100
|
-
tree = TreeNode.create(DTreeNode, DLeafNode) do
|
101
|
-
node "root" do
|
102
|
-
leaf "l1"
|
103
|
-
leaf "l2"
|
104
|
-
node "sub" do
|
105
|
-
leaf "l3"
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
# puts tree.to_str
|
111
|
-
out =<<EOS
|
112
|
-
dt: root
|
113
|
-
|-- dl: l1
|
114
|
-
|-- dl: l2
|
115
|
-
`-- dt: sub
|
116
|
-
`-- dl: l3
|
117
|
-
EOS
|
118
|
-
tree.to_str.should == out
|
119
|
-
|
120
|
-
tree = DTreeNode.create(DLeafNode) do
|
121
|
-
node "root" do
|
122
|
-
leaf "l1"
|
123
|
-
leaf "l2"
|
124
|
-
node "sub" do
|
125
|
-
leaf "l3"
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|
129
|
-
tree.to_str.should == out
|
130
|
-
end
|
131
|
-
|
132
|
-
it "test_derivated_args" do
|
133
|
-
tree = TreeNode.create(ArgsTreeNode, ArgsLeafNode) do
|
134
|
-
node "root", "droot" do
|
135
|
-
leaf "l1", "dl1"
|
136
|
-
leaf "l2", "dl2"
|
137
|
-
node "sub", "dsub" do
|
138
|
-
leaf "l3", "dl3"
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
# puts tree.to_str
|
144
|
-
out =<<EOS
|
145
|
-
a: droot
|
146
|
-
|-- a: dl1
|
147
|
-
|-- a: dl2
|
148
|
-
`-- a: dsub
|
149
|
-
`-- a: dl3
|
150
|
-
EOS
|
151
|
-
tree.to_str.should == out
|
152
|
-
end
|
153
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
require File.join(File.dirname(__FILE__), "..", "spec_helper")
|
3
|
-
|
4
|
-
require 'treevisitor/visitors/block_tree_node_visitor'
|
5
|
-
require 'treevisitor/visitors/callback_tree_node_visitor'
|
6
|
-
require 'treevisitor/visitors/callback_tree_node_visitor2'
|
7
|
-
require 'treevisitor/visitors/clone_tree_node_visitor'
|
8
|
-
require 'treevisitor/visitors/depth_tree_node_visitor'
|
9
|
-
|
10
|
-
describe "TreeNodeVisitors" do
|
11
|
-
|
12
|
-
before do
|
13
|
-
ta = TreeNode.new( "a", nil )
|
14
|
-
LeafNode.new("1", ta )
|
15
|
-
LeafNode.new("2", ta )
|
16
|
-
|
17
|
-
tb = TreeNode.new( "b", ta )
|
18
|
-
LeafNode.new( "3", tb )
|
19
|
-
|
20
|
-
@tree = ta
|
21
|
-
end
|
22
|
-
|
23
|
-
it BlockTreeNodeVisitor do
|
24
|
-
accumulator = []
|
25
|
-
visitor = BlockTreeNodeVisitor.new { |node| accumulator << node.content}
|
26
|
-
@tree.accept( visitor )
|
27
|
-
accumulator.length.should == 5
|
28
|
-
accumulator.should == %w{ a 1 2 b 3 }
|
29
|
-
end
|
30
|
-
|
31
|
-
it DepthTreeNodeVisitor do
|
32
|
-
visitor = DepthTreeNodeVisitor.new
|
33
|
-
@tree.accept( visitor )
|
34
|
-
visitor.depth.should == 0
|
35
|
-
|
36
|
-
visitor = CloneTreeNodeVisitor.new
|
37
|
-
@tree.accept( visitor )
|
38
|
-
visitor.cloned_root.nr_nodes.should == @tree.nr_nodes
|
39
|
-
end
|
40
|
-
|
41
|
-
it CallbackTreeNodeVisitor do
|
42
|
-
accumulator = []
|
43
|
-
visitor = CallbackTreeNodeVisitor.new
|
44
|
-
visitor.on_enter_tree_node{ |tree_node| accumulator << tree_node.content }
|
45
|
-
visitor.on_visit_leaf_node{ |leaf_node| accumulator << leaf_node.content }
|
46
|
-
@tree.accept( visitor )
|
47
|
-
accumulator.length.should == 5
|
48
|
-
accumulator.should == %w{ a 1 2 b 3 }
|
49
|
-
end
|
50
|
-
|
51
|
-
it CallbackTreeNodeVisitor2 do
|
52
|
-
visitor = CallbackTreeNodeVisitor2.new
|
53
|
-
visitor.on_enter_tree_node{ |tree_node, new_parent_node|
|
54
|
-
TreeNode.new("n" + tree_node.content, new_parent_node)
|
55
|
-
}
|
56
|
-
visitor.on_visit_leaf_node{ |leaf_node, new_parent_node|
|
57
|
-
LeafNode.new( "n" + leaf_node.content, new_parent_node )
|
58
|
-
}
|
59
|
-
@tree.accept( visitor )
|
60
|
-
new_root = visitor.root
|
61
|
-
new_root.content.should == "n" + @tree.content
|
62
|
-
|
63
|
-
accumulator = []
|
64
|
-
visitor = BlockTreeNodeVisitor.new { |node| accumulator << node.content}
|
65
|
-
new_root.accept( visitor )
|
66
|
-
accumulator.length.should == 5
|
67
|
-
accumulator.should == %w{ na n1 n2 nb n3 }
|
68
|
-
end
|
69
|
-
|
70
|
-
end
|
data/tasks/rubyforge.rake
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
#
|
2
|
-
# rubyforge
|
3
|
-
#
|
4
|
-
#begin
|
5
|
-
# require 'rake/contrib/sshpublisher'
|
6
|
-
# namespace :rubyforge do
|
7
|
-
#
|
8
|
-
# desc "Release gem and RDoc documentation to RubyForge"
|
9
|
-
# task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
|
10
|
-
#
|
11
|
-
# namespace :release do
|
12
|
-
# desc "Publish RDoc to RubyForge."
|
13
|
-
# task :docs => [:rdoc] do
|
14
|
-
# config = YAML.load(
|
15
|
-
# File.read(File.expand_path('~/.rubyforge/user-config.yml'))
|
16
|
-
# )
|
17
|
-
#
|
18
|
-
# host = "#{config['username']}@rubyforge.org"
|
19
|
-
# remote_dir = "/var/www/gforge-projects/treevisitor/"
|
20
|
-
# local_dir = 'rdoc'
|
21
|
-
#
|
22
|
-
# Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
|
23
|
-
# end
|
24
|
-
# end
|
25
|
-
# end
|
26
|
-
#rescue LoadError
|
27
|
-
# puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
|
28
|
-
#end
|