class Treely::Directory

Public Class Methods

new(path) click to toggle source
# File lib/treely/directory.rb, line 3
def initialize(path)
  @pathname = Pathname(path)
  @directories, @files = [], []
  @ignore_pattern = /\A\.(\.?|\w+)\z/

  unless @pathname.directory?
    @contents = []
  end
end

Public Instance Methods

contents() click to toggle source
# File lib/treely/directory.rb, line 13
def contents
  @contents ||= digger.call(@pathname)
  [*@contents, { directories: @directories.size, files: @files.size }]
end

Private Instance Methods

digger() click to toggle source
# File lib/treely/directory.rb, line 20
def digger
  lambda do |pathname|
    pathname.children.reject { |n| @ignore_pattern.match?(n.basename.to_s) }.map do |pathname|
      if pathname.directory?
        @directories << pathname
        { name: pathname.basename.to_s, contents: digger.call(pathname) }
      else
        @files << pathname
        { name: pathname.basename.to_s }
      end
    end.sort_by do |item|
      [
        item[:contents].class.to_s,
        item[:name]
      ]
    end
  end
end