Sha256: e1fa7baf5a95de93c71c3557512ba44995a3f2c8f7fa6446cbffa22926a70b54

Contents?: true

Size: 1.39 KB

Versions: 2

Compression:

Stored size: 1.39 KB

Contents

# frozen_string_literal: true

require 'eac_fs/file_info'
require 'ostruct'

module Avm
  module FileFormats
    class Base
      enable_abstract_methods

      def apply(files)
        old_content = Hash[files.map { |f| [f, File.read(f)] }]
        ::Avm::Files::Formatter::Utf8Assert.assert_files(files) { internal_apply(files) }
        files.map { |f| build_file_result(f, old_content[f]) }
      end

      def name
        self.class.name.demodulize
      end

      def match?(file)
        match_by_filename?(file) || match_by_type?(file)
      end

      def valid_basenames
        constant_or_array('VALID_BASENAMES')
      end

      def valid_types
        constant_or_array('VALID_TYPES')
      end

      private

      def constant_or_array(name)
        return [] unless self.class.const_defined?(name)

        self.class.const_get(name)
      end

      def build_file_result(file, old_content)
        ::OpenStruct.new(file: file, format: self.class,
                         changed: (old_content != File.read(file)))
      end

      def match_by_filename?(file)
        valid_basenames.any? do |valid_basename|
          file.basename.fnmatch?(valid_basename)
        end
      end

      def match_by_type?(file)
        info = ::EacFs::FileInfo.new(file)
        return unless info.content_type.type == 'text'

        valid_types.include?(info.content_type.subtype)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
avm-0.51.0 lib/avm/file_formats/base.rb
eac_tools-0.37.2 sub/avm/lib/avm/file_formats/base.rb