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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/examples/ruby_examples/find_directory_without_subdirectory.rb +2 -2
  3. data/examples/ruby_examples/find_files.rb +4 -5
  4. data/examples/ruby_examples/print_files.rb +14 -2
  5. data/lib/tree_rb.rb +17 -15
  6. data/lib/tree_rb/cli/cli_tree.rb +32 -37
  7. data/lib/tree_rb/{abs_node.rb → core/abs_node.rb} +0 -1
  8. data/lib/tree_rb/{basic_tree_node_visitor.rb → core/basic_tree_node_visitor.rb} +0 -0
  9. data/lib/tree_rb/{leaf_node.rb → core/leaf_node.rb} +0 -0
  10. data/lib/tree_rb/{tree_node.rb → core/tree_node.rb} +1 -0
  11. data/lib/tree_rb/{tree_node_visitor.rb → core/tree_node_visitor.rb} +0 -0
  12. data/lib/tree_rb/exception.rb +7 -0
  13. data/lib/tree_rb/{util → input_file_system}/dir_processor.rb +0 -0
  14. data/lib/tree_rb/{directory_walker.rb → input_file_system/directory_walker.rb} +3 -3
  15. data/lib/tree_rb/input_html_page/dom_walker.rb +36 -0
  16. data/lib/tree_rb/output_dircat/dircat_helper.rb +24 -0
  17. data/lib/tree_rb/output_dircat/dircat_visitor.rb +78 -0
  18. data/lib/tree_rb/output_dircat/entry.rb +65 -0
  19. data/lib/tree_rb/{d3js_helper.rb → output_html/d3js_helper.rb} +10 -2
  20. data/lib/tree_rb/output_html/directory_to_hash2_visitor.rb +105 -0
  21. data/lib/tree_rb/{erb_render.rb → output_html/erb_render.rb} +0 -0
  22. data/lib/tree_rb/{visitors → output_sqlite}/sqlite_dir_tree_visitor.rb +0 -1
  23. data/lib/tree_rb/output_sqlite/sqlite_helper.rb +29 -0
  24. data/lib/tree_rb/version.rb +1 -1
  25. data/lib/tree_rb/visitors/callback_tree_node_visitor2.rb +0 -1
  26. data/lib/tree_rb/visitors/clone_tree_node_visitor.rb +0 -1
  27. data/lib/tree_rb/visitors/depth_tree_node_visitor.rb +0 -1
  28. data/lib/tree_rb/visitors/{flat_print_tree_node_visitors.rb → flat_print_tree_node_visitor.rb} +0 -0
  29. data/lib/tree_rb/{visitors → visitors_file_system}/build_dir_tree_visitor.rb +0 -0
  30. data/lib/tree_rb/{visitors → visitors_file_system}/directory_to_hash_visitor.rb +0 -0
  31. data/lib/tree_rb_cli.rb +0 -2
  32. data/spec/fixtures/html_pages/test_1.html +22 -0
  33. data/spec/fixtures/tmp/dircat +34 -0
  34. data/spec/tree_rb/cli/cli_tree_generic_spec.rb +2 -2
  35. data/spec/tree_rb/{tree_dsl_spec.rb → core/tree_dsl_spec.rb} +3 -3
  36. data/spec/tree_rb/{tree_dsl_with_derived_class1_spec.rb → core/tree_dsl_with_derived_class1_spec.rb} +1 -1
  37. data/spec/tree_rb/{tree_dsl_with_derived_class_spec.rb → core/tree_dsl_with_derived_class_spec.rb} +1 -1
  38. data/spec/tree_rb/{tree_node_paths_spec.rb → core/tree_node_paths_spec.rb} +2 -2
  39. data/spec/tree_rb/{tree_node_spec.rb → core/tree_node_spec.rb} +1 -1
  40. data/spec/tree_rb/{tree_node_visitor_delegate_spec.rb → core/tree_node_visitor_delegate_spec.rb} +1 -1
  41. data/spec/tree_rb/{tree_node_visitor_dsl_spec.rb → core/tree_node_visitor_dsl_spec.rb} +1 -1
  42. data/spec/tree_rb/{util → input_file_system}/dir_processor_spec.rb +2 -2
  43. data/spec/tree_rb/{directory_walker_spec.rb → input_file_system/directory_walker_spec.rb} +11 -12
  44. data/spec/tree_rb/input_html_page/dom_walker_spec.rb +18 -0
  45. data/tree.rb.gemspec +12 -11
  46. metadata +95 -79
  47. data/lib/tree_rb/visitors/directory_to_hash2_visitor.rb +0 -418
  48. data/spec/fixtures/test_dir_1/.dir_with_dot/dummy.txt +0 -1
  49. data/spec/fixtures/test_dir_2/[Dsube]/sub/.gitkeep +0 -0
@@ -0,0 +1,65 @@
1
+ # -*- coding: utf-8 -*-
2
+ module DirCat
3
+
4
+ FORMAT_VERSION="0.2.1"
5
+
6
+ class EntrySer < OpenStruct
7
+ end
8
+
9
+ class DirCatSer < OpenStruct
10
+ end
11
+
12
+ class DirCatException < RuntimeError
13
+ end
14
+
15
+ #
16
+ # Entry
17
+ #
18
+ class Entry
19
+
20
+ # TODO: must be attr_reader
21
+ attr_accessor :md5
22
+ attr_accessor :name
23
+ attr_accessor :path
24
+ attr_accessor :size
25
+ attr_accessor :mtime
26
+
27
+ def self.from_filename(filename)
28
+ entry = new
29
+ entry.name = File.basename(filename)
30
+ entry.path = File.dirname(filename)
31
+ stat = File.lstat(filename)
32
+ entry.size = stat.size
33
+ entry.mtime = stat.mtime
34
+ # self.md5 = Digest::MD5.hexdigest(File.read( f ))
35
+ entry.md5 = MD5.file(filename).hexdigest unless stat.symlink?
36
+ entry
37
+ end
38
+
39
+ def self.from_ser(entry_ser)
40
+ entry = new
41
+ entry.md5 = entry_ser.md5
42
+ entry.name = entry_ser.name
43
+ entry.path = entry_ser.path
44
+ entry.size = entry_ser.size
45
+ entry.mtime = entry_ser.mtime
46
+ entry
47
+ end
48
+
49
+ def to_ser
50
+ entry_ser = EntrySer.new
51
+ entry_ser.md5 = @md5
52
+ entry_ser.name = @name
53
+ entry_ser.path = @path
54
+ entry_ser.size = @size
55
+ entry_ser.mtime = @mtime
56
+ entry_ser
57
+ end
58
+
59
+ def to_s
60
+ @md5 + " " + @name + "\t " + @path + "\n"
61
+ end
62
+
63
+ end
64
+
65
+ end
@@ -1,4 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
+ require 'tree_rb/output_html/directory_to_hash2_visitor'
3
+ require 'tree_rb/output_html/erb_render'
4
+
2
5
  module TreeRb
3
6
 
4
7
  class D3jsHelper
@@ -10,8 +13,13 @@ module TreeRb
10
13
  str_json = JSON.pretty_generate(root)
11
14
  str_json = "var data = " + str_json
12
15
 
13
- render = ErbRender.new(template, str_json)
14
- output.puts render.render
16
+ if template
17
+ render = ErbRender.new(template, str_json)
18
+ output.puts render.render
19
+ else
20
+ output.puts str_json
21
+ end
22
+
15
23
  rescue JSON::NestingError => e
16
24
  $stderr.puts "#{File.basename(__FILE__)}:#{__LINE__} #{e.to_s}"
17
25
  end
@@ -0,0 +1,105 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module TreeRb
4
+
5
+ #{
6
+ # "name": "flare",
7
+ # "children": [
8
+ # {
9
+ # "name": "analytics1",
10
+ # "children": [
11
+ # {
12
+ # "name": "cluster",
13
+ # "children": [
14
+ # {"name": "AgglomerativeCluster", "size": 3938},
15
+ # {"name": "CommunityStructure", "size": 3812},
16
+ # {"name": "HierarchicalCluster", "size": 6714},
17
+ # {"name": "MergeEdge", "size": 743}
18
+ # ]
19
+ # },
20
+ # {
21
+ # "name": "graph",
22
+ # "children": [
23
+ # {"name": "BetweennessCentrality", "size": 3534},
24
+ # {"name": "LinkDistance", "size": 5731},
25
+ # {"name": "MaxFlowMinCut", "size": 7840},
26
+ # {"name": "ShortestPaths", "size": 5914},
27
+ # {"name": "SpanningTree", "size": 3416}
28
+ # ]
29
+ # },
30
+ # {
31
+ # "name": "optimization",
32
+ # "children": [
33
+ # {"name": "AspectRatioBanker", "size": 7074}
34
+ # ]
35
+ # }
36
+ # ]
37
+ # },
38
+ # {
39
+ # "name": "animate",
40
+ # "children": [
41
+ # {"name": "Easing", "size": 17010},
42
+ # {"name": "FunctionSequence", "size": 5842},
43
+ # {
44
+ # "name": "interpolate",
45
+ # "children": [
46
+ # {"name": "ArrayInterpolator", "size": 1983},
47
+ # {"name": "ColorInterpolator", "size": 2047},
48
+ # {"name": "DateInterpolator", "size": 1375},
49
+ # {"name": "Interpolator", "size": 8746},
50
+ # {"name": "MatrixInterpolator", "size": 2202},
51
+ # {"name": "NumberInterpolator", "size": 1382},
52
+ # {"name": "ObjectInterpolator", "size": 1629},
53
+ # {"name": "PointInterpolator", "size": 1675},
54
+ # {"name": "RectangleInterpolator", "size": 2042}
55
+ # ]
56
+ # },
57
+ # {"name": "ISchedulable", "size": 1041},
58
+ # {"name": "Parallel", "size": 5176},
59
+ # {"name": "Pause", "size": 449},
60
+ # {"name": "Scheduler", "size": 5593},
61
+ # {"name": "Sequence", "size": 5534},
62
+ # {"name": "Transition", "size": 9201},
63
+ # {"name": "Transitioner", "size": 19975},
64
+ # {"name": "TransitionEvent", "size": 1116},
65
+ # {"name": "Tween", "size": 6006}
66
+ # ]
67
+ # },
68
+ # ]
69
+ # }
70
+ # ]
71
+ #}
72
+ #
73
+
74
+ #
75
+ # Build hash with directory structure
76
+ #
77
+ class DirectoryToHash2Visitor < BasicTreeNodeVisitor
78
+
79
+ attr_reader :root
80
+
81
+ def initialize(pathname)
82
+ @stack = []
83
+ end
84
+
85
+ def enter_node(pathname)
86
+ @root = @node if @root.nil?
87
+ @node = { name: File.basename(pathname), children: [] }
88
+ @stack.last[:children] << @node unless @stack.empty?
89
+ @stack.push(@node)
90
+ end
91
+
92
+ def exit_node(pathname)
93
+ @node = @stack.pop
94
+ end
95
+
96
+ def visit_leaf(pathname)
97
+ begin
98
+ @node[:children] << { name: File.basename(pathname), size: File.stat(pathname).size }
99
+ rescue Errno::ENOENT => e
100
+ $stderr.puts e.to_s
101
+ end
102
+ end
103
+
104
+ end
105
+ end
@@ -3,7 +3,6 @@ module TreeRb
3
3
 
4
4
  class SqliteDirTreeVisitor < BasicTreeNodeVisitor
5
5
 
6
-
7
6
  def initialize(filename)
8
7
  @db = SQLite3::Database.new(filename)
9
8
  @db.execute("create table files(path varchar(1024), size integer, digest varchar(40))")
@@ -0,0 +1,29 @@
1
+ # -*- coding: utf-8 -*-
2
+ begin
3
+ require 'sqlite3'
4
+ require 'tree_rb/output_sqlite/sqlite_dir_tree_visitor'
5
+ rescue LoadError
6
+ $stderr.puts 'You must gem install sqlite3 to use this output format'
7
+ end
8
+
9
+ module TreeRb
10
+
11
+ class SqliteHelper
12
+
13
+ def run(directory_tree_walker, output, options)
14
+ unless options[:output]
15
+ $stderr.puts "need to specify the -o options"
16
+ else
17
+ output.close
18
+ filename = options[:output]
19
+ visitor = SqliteDirTreeVisitor.new(filename)
20
+ #start = Time.now
21
+ #me = self
22
+ #bytes = 0
23
+ directory_tree_walker.run(visitor)
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+ end # module
@@ -1,4 +1,4 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  module TreeRb
3
- VERSION="0.3.10"
3
+ VERSION="0.3.11"
4
4
  end
@@ -10,7 +10,6 @@ module TreeRb
10
10
  attr_reader :root
11
11
 
12
12
  def initialize(delegate = nil)
13
- super()
14
13
  @stack = []
15
14
  @root = nil
16
15
  @delegate = delegate
@@ -12,7 +12,6 @@ module TreeRb
12
12
  attr_reader :cloned_root
13
13
 
14
14
  def initialize
15
- super
16
15
  @cloned_root = nil
17
16
  @stack = []
18
17
  end
@@ -8,7 +8,6 @@ module TreeRb
8
8
  attr_reader :depth
9
9
 
10
10
  def initialize
11
- super
12
11
  @depth = 0
13
12
  end
14
13
 
data/lib/tree_rb_cli.rb CHANGED
@@ -14,7 +14,5 @@ require 'erb'
14
14
  # tree_rb cli
15
15
  #
16
16
  require 'tree_rb'
17
- require 'tree_rb/d3js_helper'
18
- require 'tree_rb/erb_render'
19
17
  require 'tree_rb/cli/cli_tree'
20
18
  require 'tree_rb/cli/cli_json'
@@ -0,0 +1,22 @@
1
+ <html>
2
+ <body>
3
+ <p id='para-1'>A</p>
4
+
5
+ <div class='block' id='X1'>
6
+ <h1>Foo</h1>
7
+
8
+ <p id='para-2'>B</p>
9
+ </div>
10
+ <p id='para-3'>C</p>
11
+
12
+ <h2>Bar</h2>
13
+
14
+ <p id='para-4'>D</p>
15
+
16
+ <p id='para-5'>E</p>
17
+
18
+ <div class='block' id='X2'>
19
+ <p id='para-6'>F</p>
20
+ </div>
21
+ </body>
22
+ </html>
@@ -0,0 +1,34 @@
1
+ --- !ruby/object:DirCat::DirCatSer
2
+ table:
3
+ :dircat_version: 0.2.1
4
+ :dirname:
5
+ :ctime:
6
+ :entries:
7
+ - !ruby/object:DirCat::EntrySer
8
+ table:
9
+ :md5: !binary |-
10
+ YWZiOTZmMjY1MmY0YmEzY2Q4NGY3YmUwYWU2ZmZmZTM=
11
+ :name: file.1.2.1
12
+ :path: /home/gf/GioPrj.home/tree.rb/spec/fixtures/test_dir_1/dir.1/dir.1.2
13
+ :size: 11
14
+ :mtime: 2012-08-19 22:26:38.000000000 +02:00
15
+ modifiable: true
16
+ - !ruby/object:DirCat::EntrySer
17
+ table:
18
+ :md5: !binary |-
19
+ YTQ3ODhiYTI1ZDQyZjIxMDAzZGIxMWVjNTMxMTJmMWU=
20
+ :name: file.1.1
21
+ :path: /home/gf/GioPrj.home/tree.rb/spec/fixtures/test_dir_1/dir.1
22
+ :size: 9
23
+ :mtime: 2012-08-19 22:26:38.000000000 +02:00
24
+ modifiable: true
25
+ - !ruby/object:DirCat::EntrySer
26
+ table:
27
+ :md5: !binary |-
28
+ YzRjMGM1MzBiODQyZWZlNDAzOGFjNGE2NTliZmJlNzc=
29
+ :name: file.2.1
30
+ :path: /home/gf/GioPrj.home/tree.rb/spec/fixtures/test_dir_1/dir.2
31
+ :size: 9
32
+ :mtime: 2012-08-19 22:26:38.000000000 +02:00
33
+ modifiable: true
34
+ modifiable: true
@@ -86,9 +86,9 @@ describe CliTree do
86
86
  # puts captured
87
87
 
88
88
  expected_out="test_dir_3_with_error\n`-- accessible_dir\n\n2 directories, 0 files\n"
89
- expected_err="Permission denied - /home/gf/GioPrj.home/tree.rb/spec/fixtures/test_dir_3_with_error/no_accessible_dir\n"
89
+ expected_err=/Permission denied/
90
90
  captured.out.should == expected_out
91
- captured.err.should == expected_err
91
+ captured.err.should match expected_err
92
92
  captured.err.should_not be_empty
93
93
  captured.out.split("\n").length.should == 4
94
94
  end
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
- require File.join(File.dirname(__FILE__), "..", "spec_helper")
2
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
3
3
 
4
4
  describe "TreeNodeDsl" do
5
5
 
@@ -30,11 +30,11 @@ EOS
30
30
  it "test_dsl_block_with_arg" do
31
31
  tree = TreeNode.create do
32
32
  node "root" do |node|
33
- node.prefix_path=("pre/")
33
+ node.prefix_path=("pre/")
34
34
  leaf "l1"
35
35
  leaf "l2"
36
36
  node "sub" do
37
- leaf "l3" do |leaf|
37
+ leaf "l3" do |leaf|
38
38
  end
39
39
  end
40
40
  node "woleaves"
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
- require File.join(File.dirname(__FILE__), "..", "spec_helper")
2
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
3
3
 
4
4
  describe "Tree Node Dsl Derived Class with n-arg constructor" do
5
5
 
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
- require File.join(File.dirname(__FILE__), "..", "spec_helper")
2
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
3
3
 
4
4
  describe "Tree Node Dsl Derived Class with no-arg constructor " do
5
5
 
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
- require File.join(File.dirname(__FILE__), "..", "spec_helper")
2
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
3
3
 
4
4
  describe TreeNode do
5
5
 
@@ -67,4 +67,4 @@ describe TreeNode do
67
67
  end
68
68
 
69
69
  end
70
- end
70
+ end
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
- require File.join(File.dirname(__FILE__), "..", "spec_helper")
2
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
3
3
 
4
4
  describe TreeNode do
5
5
 
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
- require File.join(File.dirname(__FILE__), "..", "spec_helper")
2
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
3
3
 
4
4
  describe TreeNodeVisitor do
5
5
 
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
- require File.join(File.dirname(__FILE__), "..", "spec_helper")
2
+ require File.join(File.dirname(__FILE__), "..", "..", "spec_helper")
3
3
 
4
4
  describe TreeNodeVisitor do
5
5
 
@@ -8,8 +8,8 @@ describe DirProcessor do
8
8
  dp = DirProcessor.new { |f| files << f }
9
9
  dp.process(FIXTURES)
10
10
 
11
- # puts files
12
- files.length.should == 4
11
+ puts files
12
+ files.length.should == 6
13
13
  end
14
14
 
15
15
  end