Sha256: 4b2d16f64edd2d91d6ee99307633102f74b366558774c50e73b33872513921f3

Contents?: true

Size: 1.23 KB

Versions: 63

Compression:

Stored size: 1.23 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/core_ext'

module EacFs
  class Comparator
    class Build
      TRUNCATE_FILE_CONTENT = "__TRUNCATED__\n"

      enable_method_class
      common_constructor :comparator, :root
      delegate :rename_files, :truncate_files, to: :comparator

      # @return [Hash]
      def result
        build(root)
      end

      private

      def build(obj)
        if obj.file?
          build_file(obj)
        elsif obj.directory?
          build_directory(obj)
        else
          raise "Unknown filesystem object \"#{obj}\""
        end
      end

      # @param dir [Pathname]
      # @return [Hash]
      def build_directory(dir)
        dir.children.map do |child|
          [fs_object_basename(child), build(child)]
        end.to_h
      end

      # @param file [Pathname]
      # @return [Hash]
      def build_file(file)
        truncate_file?(file) ? TRUNCATE_FILE_CONTENT : file.read
      end

      # @return [String]
      def fs_object_basename(obj)
        rename_files.inject(obj.basename.to_path) { |a, e| e.apply(a) }
      end

      def truncate_file?(file)
        truncate_files.any? do |pattern|
          file.basename.fnmatch?(pattern)
        end
      end
    end
  end
end

Version data entries

63 entries across 63 versions & 2 rubygems

Version Path
eac_tools-0.76.0 sub/eac_fs/lib/eac_fs/comparator/build.rb
eac_tools-0.75.2 sub/eac_fs/lib/eac_fs/comparator/build.rb
eac_tools-0.75.1 sub/eac_fs/lib/eac_fs/comparator/build.rb
eac_tools-0.75.0 sub/eac_fs/lib/eac_fs/comparator/build.rb
eac_tools-0.74.1 sub/eac_fs/lib/eac_fs/comparator/build.rb
eac_tools-0.74.0 sub/eac_fs/lib/eac_fs/comparator/build.rb
eac_tools-0.73.0 sub/eac_fs/lib/eac_fs/comparator/build.rb
eac_tools-0.72.0 sub/eac_fs/lib/eac_fs/comparator/build.rb
eac_tools-0.70.1 sub/eac_fs/lib/eac_fs/comparator/build.rb
eac_tools-0.70.0 sub/eac_fs/lib/eac_fs/comparator/build.rb
eac_tools-0.69.1 sub/eac_fs/lib/eac_fs/comparator/build.rb
eac_tools-0.69.0 sub/eac_fs/lib/eac_fs/comparator/build.rb
eac_tools-0.68.0 sub/eac_fs/lib/eac_fs/comparator/build.rb
eac_tools-0.67.1 sub/eac_fs/lib/eac_fs/comparator/build.rb
eac_tools-0.67.0 sub/eac_fs/lib/eac_fs/comparator/build.rb
eac_tools-0.66.0 sub/eac_fs/lib/eac_fs/comparator/build.rb
eac_tools-0.65.1 sub/eac_fs/lib/eac_fs/comparator/build.rb
eac_tools-0.65.0 sub/eac_fs/lib/eac_fs/comparator/build.rb
eac_tools-0.64.0 sub/eac_fs/lib/eac_fs/comparator/build.rb
eac_tools-0.63.0 sub/eac_fs/lib/eac_fs/comparator/build.rb