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
         
     |