Sha256: 90739d668df0d137f5f6549de6126c598e8f740cefd5fe40c5aee2a2545980a6

Contents?: true

Size: 1.81 KB

Versions: 2

Compression:

Stored size: 1.81 KB

Contents

# typed: strict
# frozen_string_literal: true

module Bhook
  class Directory
    extend T::Sig

    GIT_DIR = '.git'
    MD_EXT = '.md'

    sig { params(src_path: Pathname, out_path: Pathname).returns(Bhook::Directory) }
    def self.new_root_directory(src_path, out_path)
      self.new(src_path, out_path, Git.open(src_path), Bhook::Config.new(src_path))
    end


    sig { params(src_path: Pathname, out_path: Pathname, git: Git::Base, config: Bhook::Config).void }
    def initialize(src_path, out_path, git, config)
      @src_path = src_path
      @out_path = T.let(out_path.join(src_path.basename), Pathname)
      @git = git
      @config = config
      @sub_dirs = T.let([], T::Array[Directory])
      @md_files = T.let([], T::Array[MdFile])
      build_next_level_nodes
    end

    sig { params(theme: Theme).void }
    def write!(theme)
      FileUtils.mkdir_p(@out_path)
      L.debug("mkdir: #{@out_path}")
      @sub_dirs.each { |dir| dir.write!(theme) }
      @md_files.map do |file|
        Thread.new { file.write!(theme) }
      end.each do |thread|
        thread.join
      end
    end

    sig { returns(T::Array[MdFile]) }
    def all_md_files
      @md_files + @sub_dirs.map(&:all_md_files).flatten
    end

    sig { returns(String) }
    def to_s
      @src_path.to_s
    end

    private

    sig { void }
    def build_next_level_nodes
      children = @src_path.children
      children.delete(@src_path.join(GIT_DIR))

      file_threads = []
      children.each do |child_path|
        if child_path.directory?
          @sub_dirs << Directory.new(child_path, @out_path, @git, @config)
        elsif child_path.extname == MD_EXT
          file_threads << Thread.new { MdFile.new(child_path, @out_path, @git, @config) }
        end
      end
      file_threads.each { |thread| @md_files << thread.value }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
bhook-0.1.6 lib/bhook/directory.rb
bhook-0.1.5 lib/bhook/directory.rb