tree.rb 0.3.10 → 0.3.11
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.
- checksums.yaml +7 -0
- data/examples/ruby_examples/find_directory_without_subdirectory.rb +2 -2
- data/examples/ruby_examples/find_files.rb +4 -5
- data/examples/ruby_examples/print_files.rb +14 -2
- data/lib/tree_rb.rb +17 -15
- data/lib/tree_rb/cli/cli_tree.rb +32 -37
- data/lib/tree_rb/{abs_node.rb → core/abs_node.rb} +0 -1
- data/lib/tree_rb/{basic_tree_node_visitor.rb → core/basic_tree_node_visitor.rb} +0 -0
- data/lib/tree_rb/{leaf_node.rb → core/leaf_node.rb} +0 -0
- data/lib/tree_rb/{tree_node.rb → core/tree_node.rb} +1 -0
- data/lib/tree_rb/{tree_node_visitor.rb → core/tree_node_visitor.rb} +0 -0
- data/lib/tree_rb/exception.rb +7 -0
- data/lib/tree_rb/{util → input_file_system}/dir_processor.rb +0 -0
- data/lib/tree_rb/{directory_walker.rb → input_file_system/directory_walker.rb} +3 -3
- data/lib/tree_rb/input_html_page/dom_walker.rb +36 -0
- data/lib/tree_rb/output_dircat/dircat_helper.rb +24 -0
- data/lib/tree_rb/output_dircat/dircat_visitor.rb +78 -0
- data/lib/tree_rb/output_dircat/entry.rb +65 -0
- data/lib/tree_rb/{d3js_helper.rb → output_html/d3js_helper.rb} +10 -2
- data/lib/tree_rb/output_html/directory_to_hash2_visitor.rb +105 -0
- data/lib/tree_rb/{erb_render.rb → output_html/erb_render.rb} +0 -0
- data/lib/tree_rb/{visitors → output_sqlite}/sqlite_dir_tree_visitor.rb +0 -1
- data/lib/tree_rb/output_sqlite/sqlite_helper.rb +29 -0
- data/lib/tree_rb/version.rb +1 -1
- data/lib/tree_rb/visitors/callback_tree_node_visitor2.rb +0 -1
- data/lib/tree_rb/visitors/clone_tree_node_visitor.rb +0 -1
- data/lib/tree_rb/visitors/depth_tree_node_visitor.rb +0 -1
- data/lib/tree_rb/visitors/{flat_print_tree_node_visitors.rb → flat_print_tree_node_visitor.rb} +0 -0
- data/lib/tree_rb/{visitors → visitors_file_system}/build_dir_tree_visitor.rb +0 -0
- data/lib/tree_rb/{visitors → visitors_file_system}/directory_to_hash_visitor.rb +0 -0
- data/lib/tree_rb_cli.rb +0 -2
- data/spec/fixtures/html_pages/test_1.html +22 -0
- data/spec/fixtures/tmp/dircat +34 -0
- data/spec/tree_rb/cli/cli_tree_generic_spec.rb +2 -2
- data/spec/tree_rb/{tree_dsl_spec.rb → core/tree_dsl_spec.rb} +3 -3
- data/spec/tree_rb/{tree_dsl_with_derived_class1_spec.rb → core/tree_dsl_with_derived_class1_spec.rb} +1 -1
- data/spec/tree_rb/{tree_dsl_with_derived_class_spec.rb → core/tree_dsl_with_derived_class_spec.rb} +1 -1
- data/spec/tree_rb/{tree_node_paths_spec.rb → core/tree_node_paths_spec.rb} +2 -2
- data/spec/tree_rb/{tree_node_spec.rb → core/tree_node_spec.rb} +1 -1
- data/spec/tree_rb/{tree_node_visitor_delegate_spec.rb → core/tree_node_visitor_delegate_spec.rb} +1 -1
- data/spec/tree_rb/{tree_node_visitor_dsl_spec.rb → core/tree_node_visitor_dsl_spec.rb} +1 -1
- data/spec/tree_rb/{util → input_file_system}/dir_processor_spec.rb +2 -2
- data/spec/tree_rb/{directory_walker_spec.rb → input_file_system/directory_walker_spec.rb} +11 -12
- data/spec/tree_rb/input_html_page/dom_walker_spec.rb +18 -0
- data/tree.rb.gemspec +12 -11
- metadata +95 -79
- data/lib/tree_rb/visitors/directory_to_hash2_visitor.rb +0 -418
- data/spec/fixtures/test_dir_1/.dir_with_dot/dummy.txt +0 -1
- data/spec/fixtures/test_dir_2/[Dsube]/sub/.gitkeep +0 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2cb987c6a880527ec3110fa658983b5d60caa431
|
4
|
+
data.tar.gz: 7ab651eb25d463d83fbab1fd5e056a5e53499b57
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3cab8085a32ff8ac7a4a6c588fb42135dccfed166a274f70f59d947dfd584664fcf7dbfbf2c943fa2ca909ac25d7e14664f3fabb7c56daf7bc270d1e2d4816d7
|
7
|
+
data.tar.gz: 82dc7d99808412b5254790087c9ded891b970909a0a12f29e3d69bfb9f7fa52efca1545bcb5b490d7ea3b4c748b7cf7b951f1972c2ee32cc818923d0c8028fb4
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
require 'ostruct'
|
3
3
|
|
4
|
-
cwd = File.expand_path( File.join( File.dirname(__FILE__),
|
4
|
+
cwd = File.expand_path( File.join( File.dirname(__FILE__), '..', '..', 'lib') )
|
5
5
|
$:.unshift(cwd) unless $:.include?(cwd)
|
6
6
|
require 'tree_rb'
|
7
7
|
|
@@ -31,7 +31,7 @@ class DirWithoutSubDir < TreeRb::BasicTreeNodeVisitor
|
|
31
31
|
|
32
32
|
end
|
33
33
|
|
34
|
-
dtw = TreeRb::DirTreeWalker.new( File.join(
|
34
|
+
dtw = TreeRb::DirTreeWalker.new( File.join('..', '..'))
|
35
35
|
dtw.ignore /^\./
|
36
36
|
dtw.visit_file=false
|
37
37
|
dtw.run( DirWithoutSubDir.new )
|
@@ -1,6 +1,5 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
cwd = File.expand_path( File.join( File.dirname(__FILE__), "..", "..", "lib" ) )
|
2
|
+
cwd = File.expand_path( File.join( File.dirname(__FILE__), '..', '..', 'lib') )
|
4
3
|
$:.unshift(cwd) unless $:.include?(cwd)
|
5
4
|
require 'tree_rb'
|
6
5
|
include TreeRb
|
@@ -11,8 +10,8 @@ class MyVisitor < BasicTreeNodeVisitor
|
|
11
10
|
end
|
12
11
|
end
|
13
12
|
|
14
|
-
dtw = DirTreeWalker.new( File.join(File.dirname(__FILE__),
|
15
|
-
dtw.match
|
16
|
-
dtw.match
|
13
|
+
dtw = DirTreeWalker.new( File.join(File.dirname(__FILE__), '..', '..') )
|
14
|
+
dtw.match 'leaf_node.rb'
|
15
|
+
dtw.match 'abs_node.rb'
|
17
16
|
dtw.run( MyVisitor.new )
|
18
17
|
|
@@ -4,8 +4,20 @@ $:.unshift(cwd) unless $:.include?(cwd)
|
|
4
4
|
require 'tree_rb'
|
5
5
|
include TreeRb
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
root_dir = '..'
|
8
|
+
|
9
|
+
puts '*** print all files excluding "*.git" and "*.ini"'
|
10
|
+
dtw = DirTreeWalker.new( :ignore => %w(.git .ini) )
|
11
|
+
dtw.run root_dir do
|
12
|
+
on_leaf do |pathname|
|
13
|
+
puts "- #{pathname}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
puts '*** print files with extension *.sh" and "*.js"'
|
18
|
+
#dtw = DirTreeWalker.new( :match => %w(/.sh/ /.jd/) )
|
19
|
+
dtw = DirTreeWalker.new( :match => /.sh/ )
|
20
|
+
dtw.run root_dir do
|
9
21
|
on_leaf do |pathname|
|
10
22
|
puts "- #{pathname}"
|
11
23
|
end
|
data/lib/tree_rb.rb
CHANGED
@@ -5,6 +5,8 @@
|
|
5
5
|
#
|
6
6
|
require 'pathname'
|
7
7
|
require 'yaml'
|
8
|
+
require 'ostruct'
|
9
|
+
require 'nokogiri'
|
8
10
|
|
9
11
|
#
|
10
12
|
# rubygems
|
@@ -25,26 +27,22 @@ end
|
|
25
27
|
require 'tree_rb/version'
|
26
28
|
require 'tree_rb/extension_digest'
|
27
29
|
require 'tree_rb/extension_numeric'
|
30
|
+
require 'tree_rb/exception'
|
28
31
|
|
29
|
-
require 'tree_rb/abs_node'
|
30
|
-
require 'tree_rb/leaf_node'
|
31
|
-
require 'tree_rb/tree_node'
|
32
|
-
require 'tree_rb/basic_tree_node_visitor'
|
33
|
-
require 'tree_rb/tree_node_visitor'
|
32
|
+
require 'tree_rb/core/abs_node'
|
33
|
+
require 'tree_rb/core/leaf_node'
|
34
|
+
require 'tree_rb/core/tree_node'
|
35
|
+
require 'tree_rb/core/basic_tree_node_visitor'
|
36
|
+
require 'tree_rb/core/tree_node_visitor'
|
34
37
|
|
35
|
-
require 'tree_rb/directory_walker'
|
38
|
+
require 'tree_rb/input_file_system/directory_walker'
|
39
|
+
require 'tree_rb/input_file_system/dir_processor'
|
40
|
+
|
41
|
+
require 'tree_rb/input_html_page/dom_walker'
|
36
42
|
|
37
43
|
#
|
38
44
|
# visitors
|
39
45
|
#
|
40
|
-
#require 'tree_rb/visitors/block_tree_node_visitor'
|
41
|
-
#require 'tree_rb/visitors/build_dir_tree_visitor'
|
42
|
-
#require 'tree_rb/visitors/callback_tree_node_visitor2'
|
43
|
-
#require 'tree_rb/visitors/clone_tree_node_visitor'
|
44
|
-
#require 'tree_rb/visitors/depth_tree_node_visitor'
|
45
|
-
#require 'tree_rb/visitors/print_dir_tree_visitor'
|
46
|
-
#require 'tree_rb/visitors/directory_to_hash_visitor'
|
47
|
-
#require 'tree_rb/visitors/sqlite_dir_tree_visitor'
|
48
46
|
|
49
47
|
visitors_dir = File.join(File.dirname(__FILE__), "tree_rb", "visitors")
|
50
48
|
unless Dir.exist? visitors_dir
|
@@ -52,5 +50,9 @@ unless Dir.exist? visitors_dir
|
|
52
50
|
end
|
53
51
|
Dir[ File.join(visitors_dir, "*.rb") ].each { |f|require f }
|
54
52
|
|
53
|
+
visitors_dir = File.join(File.dirname(__FILE__), "tree_rb", "visitors_file_system")
|
54
|
+
unless Dir.exist? visitors_dir
|
55
|
+
raise "cannot found directory '#{visitors_dir}'"
|
56
|
+
end
|
57
|
+
Dir[ File.join(visitors_dir, "*.rb") ].each { |f|require f }
|
55
58
|
|
56
|
-
require 'tree_rb/util/dir_processor'
|
data/lib/tree_rb/cli/cli_tree.rb
CHANGED
@@ -74,7 +74,7 @@ module TreeRb
|
|
74
74
|
options[:show_indentation] = false
|
75
75
|
end
|
76
76
|
|
77
|
-
algos
|
77
|
+
algos = %w[build-dir print-dir json d3js html_partition html_tree html_treemap yaml sqlite dircat]
|
78
78
|
# algo_aliases = { "b" => "build-dir", "v" => "print-dir", "j" => "json", "y" => "yaml", "s" => "sqlite" }
|
79
79
|
# algo_list = (algo_aliases.keys + algos).join(',')
|
80
80
|
parser.on("--format ALGO", algos, "select an algo", " (#{algos})") do |algo|
|
@@ -191,6 +191,10 @@ module TreeRb
|
|
191
191
|
$stderr.puts e.to_s
|
192
192
|
$stderr.puts "try --help for help"
|
193
193
|
return false
|
194
|
+
rescue OptionParser::InvalidArgument => e
|
195
|
+
$stderr.puts e.to_s
|
196
|
+
$stderr.puts "try --help for help"
|
197
|
+
return false
|
194
198
|
end
|
195
199
|
|
196
200
|
unless options[:exit].nil?
|
@@ -230,8 +234,14 @@ module TreeRb
|
|
230
234
|
#
|
231
235
|
# 1. build dir tree walker
|
232
236
|
#
|
237
|
+
|
233
238
|
dirname = File.expand_path(dirname)
|
234
|
-
|
239
|
+
begin
|
240
|
+
directory_tree_walker = DirTreeWalker.new(dirname, options)
|
241
|
+
rescue ArgumentError => e
|
242
|
+
$stderr.puts e.to_s
|
243
|
+
return false
|
244
|
+
end
|
235
245
|
unless options[:all_files]
|
236
246
|
directory_tree_walker.ignore(/^\.[^.]+/) # ignore all file starting with "."
|
237
247
|
end
|
@@ -255,6 +265,11 @@ module TreeRb
|
|
255
265
|
visitor = PrintDirTreeVisitor.new
|
256
266
|
directory_tree_walker.run(visitor)
|
257
267
|
|
268
|
+
when 'yaml'
|
269
|
+
visitor = DirectoryToHashVisitor.new(dirname)
|
270
|
+
root = directory_tree_walker.run(visitor).root
|
271
|
+
output.puts root.to_yaml
|
272
|
+
|
258
273
|
when 'json'
|
259
274
|
visitor = DirectoryToHashVisitor.new(dirname)
|
260
275
|
root = directory_tree_walker.run(visitor).root
|
@@ -265,51 +280,31 @@ module TreeRb
|
|
265
280
|
end
|
266
281
|
|
267
282
|
when 'd3js'
|
268
|
-
|
269
|
-
|
270
|
-
begin
|
271
|
-
str_json = JSON.pretty_generate(root)
|
272
|
-
str_json = "var data = " + str_json
|
273
|
-
output.puts str_json
|
274
|
-
rescue JSON::NestingError => e
|
275
|
-
$stderr.puts "#{File.basename(__FILE__)}:#{__LINE__} #{e.to_s}"
|
276
|
-
end
|
283
|
+
require 'tree_rb/output_html/d3js_helper'
|
284
|
+
D3jsHelper.new.run(directory_tree_walker, dirname, nil, output)
|
277
285
|
|
278
286
|
when 'html_partition'
|
279
|
-
|
287
|
+
require 'tree_rb/output_html/d3js_helper'
|
288
|
+
D3jsHelper.new.run(directory_tree_walker, dirname, "d3js_layout_partition.erb", output)
|
280
289
|
|
281
290
|
when 'html_tree'
|
282
|
-
|
291
|
+
require 'tree_rb/output_html/d3js_helper'
|
292
|
+
D3jsHelper.new.run(directory_tree_walker, dirname, "d3js_layout_tree.erb", output)
|
283
293
|
|
284
294
|
when 'html_treemap'
|
285
|
-
|
286
|
-
|
287
|
-
when 'yaml'
|
288
|
-
visitor = DirectoryToHashVisitor.new(dirname)
|
289
|
-
root = directory_tree_walker.run(visitor).root
|
290
|
-
output.puts root.to_yaml
|
295
|
+
require 'tree_rb/output_html/d3js_helper'
|
296
|
+
D3jsHelper.new.run(directory_tree_walker, dirname, "d3js_layout_treemap.erb", output)
|
291
297
|
|
292
298
|
when 'sqlite'
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
filename = options[:output]
|
300
|
-
visitor = SqliteDirTreeVisitor.new(filename)
|
301
|
-
#start = Time.now
|
302
|
-
#me = self
|
303
|
-
#bytes = 0
|
304
|
-
directory_tree_walker.run(visitor)
|
305
|
-
end
|
306
|
-
|
307
|
-
rescue LoadError
|
308
|
-
puts 'You must gem install sqlite3 to use this output format'
|
309
|
-
end
|
299
|
+
require 'tree_rb/output_sqlite/sqlite_helper'
|
300
|
+
SqliteHelper.new.run(directory_tree_walker, output, options)
|
301
|
+
|
302
|
+
when 'dircat'
|
303
|
+
require 'tree_rb/output_dircat/dircat_helper'
|
304
|
+
DirCatHelper.new.run(directory_tree_walker, options)
|
310
305
|
|
311
306
|
else
|
312
|
-
puts "unknown
|
307
|
+
puts "unknown format #{options[:algo]} specified"
|
313
308
|
end
|
314
309
|
|
315
310
|
0
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -42,7 +42,7 @@ module TreeRb
|
|
42
42
|
if dirname
|
43
43
|
@dirname = dirname
|
44
44
|
unless File.directory?(dirname)
|
45
|
-
raise "#{dirname} is not a directory!"
|
45
|
+
raise ArgumentError.new "#{dirname} is not a directory!"
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
@@ -217,7 +217,7 @@ module TreeRb
|
|
217
217
|
# check dirname
|
218
218
|
#
|
219
219
|
if @dirname.nil? and dirname.nil?
|
220
|
-
raise
|
220
|
+
raise 'missing starting directory'
|
221
221
|
end
|
222
222
|
@dirname = dirname if dirname
|
223
223
|
|
@@ -225,7 +225,7 @@ module TreeRb
|
|
225
225
|
# check visitor
|
226
226
|
#
|
227
227
|
if tree_node_visitor and block
|
228
|
-
raise
|
228
|
+
raise 'cannot use block and parameter together'
|
229
229
|
end
|
230
230
|
|
231
231
|
if tree_node_visitor
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
module TreeRb
|
3
|
+
|
4
|
+
class DomWalker
|
5
|
+
def initialize(node)
|
6
|
+
@node = node
|
7
|
+
end
|
8
|
+
|
9
|
+
def run(visitor)
|
10
|
+
@visitor = visitor
|
11
|
+
process_node(@node)
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
#
|
16
|
+
# recurse on nodes
|
17
|
+
#
|
18
|
+
def process_node(node, level=1)
|
19
|
+
entries = node.children
|
20
|
+
@visitor.enter_node(node)
|
21
|
+
entries.each do |entry|
|
22
|
+
unless is_leaf?(entry)
|
23
|
+
process_node(entry, level+1)
|
24
|
+
else
|
25
|
+
@visitor.visit_leaf(entry)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
@visitor.exit_node(node)
|
29
|
+
end
|
30
|
+
|
31
|
+
def is_leaf?(node)
|
32
|
+
node.node_type == Nokogiri::XML::Node::TEXT_NODE
|
33
|
+
end
|
34
|
+
|
35
|
+
end # class
|
36
|
+
end # module
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'tree_rb/output_dircat/entry'
|
3
|
+
require 'tree_rb/output_dircat/dircat_visitor'
|
4
|
+
|
5
|
+
module TreeRb
|
6
|
+
|
7
|
+
class DirCatHelper
|
8
|
+
|
9
|
+
def run(directory_tree_walker, options)
|
10
|
+
unless options[:output]
|
11
|
+
$stderr.puts "need to specify the -o options"
|
12
|
+
else
|
13
|
+
filename = options[:output]
|
14
|
+
visitor = DirCatVisitor.new(filename)
|
15
|
+
#start = Time.now
|
16
|
+
#me = self
|
17
|
+
#bytes = 0
|
18
|
+
directory_tree_walker.run(visitor)
|
19
|
+
visitor.save_to
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end # module
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
module TreeRb
|
3
|
+
|
4
|
+
class DirCatVisitor < BasicTreeNodeVisitor
|
5
|
+
|
6
|
+
CR = "\r"
|
7
|
+
CLEAR = "\e[K"
|
8
|
+
|
9
|
+
def initialize(out_filename, options = { })
|
10
|
+
@start = Time.now
|
11
|
+
@bytes = 0
|
12
|
+
@entries = Array.new
|
13
|
+
@md5_to_entries = Hash.new
|
14
|
+
@out_filename = out_filename
|
15
|
+
@verbose_level = 1
|
16
|
+
@show_progress = true
|
17
|
+
end
|
18
|
+
|
19
|
+
def visit_leaf(filename)
|
20
|
+
entry = DirCat::Entry.from_filename(filename)
|
21
|
+
add_entry(entry)
|
22
|
+
@bytes += entry.size
|
23
|
+
if @verbose_level > 0
|
24
|
+
print "#{CR}#{filename}#{CLEAR}"
|
25
|
+
end
|
26
|
+
if @show_progress
|
27
|
+
sec = Time.now - @start
|
28
|
+
print "#{CR}bytes: #{@bytes.to_human} time: #{sec} bytes/sec #{@bytes/sec} #{CLEAR}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
#
|
33
|
+
# add entry to this catalog
|
34
|
+
# @private
|
35
|
+
def add_entry(e)
|
36
|
+
@entries.push(e)
|
37
|
+
if @md5_to_entries.has_key?(e.md5)
|
38
|
+
@md5_to_entries[e.md5].push(e)
|
39
|
+
else
|
40
|
+
@md5_to_entries[e.md5] = [e]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# serialize catalog
|
45
|
+
# @return [DirCatSer] serialized catalog
|
46
|
+
def to_ser
|
47
|
+
dircat_ser = DirCat::DirCatSer.new
|
48
|
+
dircat_ser.dircat_version = DirCat::FORMAT_VERSION
|
49
|
+
dircat_ser.dirname = @dirname
|
50
|
+
dircat_ser.ctime = @ctime
|
51
|
+
dircat_ser.entries = []
|
52
|
+
@entries.each do |entry|
|
53
|
+
dircat_ser.entries << entry.to_ser
|
54
|
+
end
|
55
|
+
dircat_ser
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
#
|
60
|
+
# Save serialized catalog to file
|
61
|
+
# @param [String,File] file
|
62
|
+
def save_to
|
63
|
+
if @out_filename.kind_of?(String)
|
64
|
+
begin
|
65
|
+
File.open(@out_filename, "w") do |f|
|
66
|
+
f.puts to_ser.to_yaml
|
67
|
+
end
|
68
|
+
rescue Errno::ENOENT
|
69
|
+
raise DirCatException.new, "DirCat: cannot write into '#{file}'", caller
|
70
|
+
end
|
71
|
+
else
|
72
|
+
@out_filename.puts to_ser.to_yaml
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|