Sha256: 149f7dfd9d1cc75c012ca4eb00ab9c325f558bb616f9388358b0756a305876d9

Contents?: true

Size: 1.66 KB

Versions: 113

Compression:

Stored size: 1.66 KB

Contents

# frozen_string_literal: true

module EacRubyUtils
  module Fs
    class Traverser
      attr_accessor :check_directory, :check_file, :recursive, :hidden_directories, :sort

      def check_path(path)
        path = ::Pathname.new(path.to_s) unless path.is_a?(::Pathname)
        internal_check_path(path, 0)
      end

      def hidden_directories?
        boolean_value(hidden_directories)
      end

      def recursive?
        boolean_value(recursive)
      end

      def sort?
        boolean_value(sort)
      end

      private

      def boolean_value(source_value)
        source_value = source_value.call if source_value.respond_to?(:call)
        source_value ? true : false
      end

      def each_child(dir, &block)
        if sort?
          dir.each_child.sort_by { |p| [p.to_s] }.each(&block)
        else
          dir.each_child(&block)
        end
      end

      def process_directory?(level)
        level.zero? || recursive?
      end

      def inner_check_directory(dir, level)
        return unless process_directory?(level)

        user_check_directory(dir)
        each_child(dir) do |e|
          next unless !e.basename.to_s.start_with?('.') || hidden_directories?

          internal_check_path(e, level + 1)
        end
      end

      def internal_check_path(path, level)
        if path.file?
          user_check_file(path)
        elsif path.directory?
          inner_check_directory(path, level)
        else
          raise "Unknown filesystem object: #{path}"
        end
      end

      def user_check_file(path)
        check_file&.call(path)
      end

      def user_check_directory(path)
        check_directory&.call(path)
      end
    end
  end
end

Version data entries

113 entries across 113 versions & 3 rubygems

Version Path
eac_ruby_utils-0.57.0 lib/eac_ruby_utils/fs/traverser.rb
ehbrs-tools-0.17.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/traverser.rb
avm-tools-0.86.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/traverser.rb
avm-tools-0.85.1 vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/traverser.rb
eac_ruby_utils-0.56.2 lib/eac_ruby_utils/fs/traverser.rb
avm-tools-0.85.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/traverser.rb
eac_ruby_utils-0.56.1 lib/eac_ruby_utils/fs/traverser.rb
ehbrs-tools-0.16.5 vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/traverser.rb
avm-tools-0.84.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/traverser.rb
eac_ruby_utils-0.56.0 lib/eac_ruby_utils/fs/traverser.rb
avm-tools-0.83.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/traverser.rb
ehbrs-tools-0.16.4 vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/traverser.rb
avm-tools-0.82.1 vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/traverser.rb
avm-tools-0.82.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/traverser.rb
avm-tools-0.81.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/traverser.rb
ehbrs-tools-0.16.3 vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/traverser.rb
eac_ruby_utils-0.55.0 lib/eac_ruby_utils/fs/traverser.rb
avm-tools-0.80.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/traverser.rb
avm-tools-0.79.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/traverser.rb
avm-tools-0.78.0 vendor/eac_ruby_utils/lib/eac_ruby_utils/fs/traverser.rb