class Madness::Directory

Represents a directory with markdown file sand subflders.

Attributes

dir[R]

Public Class Methods

new(dir) click to toggle source
# File lib/madness/directory.rb, line 10
def initialize(dir)
  @dir = dir
end

Public Instance Methods

list() click to toggle source
# File lib/madness/directory.rb, line 14
def list
  @list ||= (dirs + files)
end

Private Instance Methods

config() click to toggle source
# File lib/madness/directory.rb, line 57
def config
  @config ||= Settings.instance
end
dir_paths() click to toggle source
# File lib/madness/directory.rb, line 53
def dir_paths
  @dir_paths ||= dirs.map(&:path)
end
dirs() click to toggle source
# File lib/madness/directory.rb, line 31
def dirs
  @dirs ||= begin
    result = Dir["#{dir}/*"].select { |f| File.directory? f }
    result.reject! { |f| exclude? f }
    result.nat_sort.map { |path| Item.new path, :dir }
  end
end
exclude?(path) click to toggle source
# File lib/madness/directory.rb, line 39
def exclude?(path)
  return false unless config.exclude.is_a? Array

  basename = File.basename path
  config.exclude.each do |pattern|
    return true if basename&.match?(Regexp.new(pattern))
  end
  false
end
files() click to toggle source
# File lib/madness/directory.rb, line 20
def files
  @files ||= begin
    result = Dir["#{dir}/#{config.dir_glob}"]
    result.reject! do |f|
      ['README.md', 'index.md'].include? File.basename(f)
    end
    result.reject! { |f| is_cover_page? f }
    result.nat_sort.map { |path| Item.new path, :file }
  end
end
is_cover_page?(path) click to toggle source
# File lib/madness/directory.rb, line 49
def is_cover_page?(path)
  dir_paths.include? path.remove(/\.md$/)
end