Sha256: bbab72ad9b993224be73876678d330347dfa88a54d4ac5b7f90dddc180a93552

Contents?: true

Size: 1.13 KB

Versions: 3

Compression:

Stored size: 1.13 KB

Contents

# -*- coding: utf-8 -*-
module TreeVisitor
  #
  # Builds a TreeNode from a filesystem directory
  # It similar to CloneTreeNodeVisitor
  #
  class BuildDirTreeVisitor # < BasicTreeNodeVisitor
  
    attr_reader :root

    #
    # Number of visited directory (aka nr_nodes - nr_leaf)
    #
    attr_reader :nr_directories


    #
    # Number of visited directory (nr_leaves)
    # @see AbsNode#nr_leaves
    #
    attr_reader :nr_files
  
    def initialize
      super
      @root = nil
      @stack = []
      @nr_directories = 0
      @nr_files = 0
    end
  
    def enter_node( pathname )
      if @stack.empty?
        tree_node = TreeNode.new( File.basename( pathname ) )
        @root = tree_node
      else
        tree_node = TreeNode.new( File.basename( pathname ), @stack.last )
      end
      @nr_directories += 1
      @stack.push( tree_node )
    end

    def exit_node( pathname )
      @stack.pop
    end

    def visit_leaf( pathname )
      @nr_files  += 1
      # connect the leaf_node created to the last tree_node on the stack
      LeafNode.new( File.basename(pathname), @stack.last )
    end

  end
end # end module TreeVisitor

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
treevisitor-0.2.2 lib/treevisitor/visitors/build_dir_tree_visitor.rb
treevisitor-0.2.1 lib/treevisitor/visitors/build_dir_tree_visitor.rb
treevisitor-0.2.0 lib/treevisitor/visitors/build_dir_tree_visitor.rb