Sha256: 0621e043b4e0453d97733be9fbc2a0c6ddb5ff858e8809b4d1732032d943d869

Contents?: true

Size: 1.42 KB

Versions: 27

Compression:

Stored size: 1.42 KB

Contents

# frozen_string_literal: true

require 'avm/file_formats/utf8_assert'
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::FileFormats::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

27 entries across 27 versions & 2 rubygems

Version Path
avm-0.59.0 lib/avm/file_formats/base.rb
eac_tools-0.50.0 sub/avm/lib/avm/file_formats/base.rb
avm-0.58.0 lib/avm/file_formats/base.rb
eac_tools-0.49.0 sub/avm/lib/avm/file_formats/base.rb
eac_tools-0.48.1 sub/avm/lib/avm/file_formats/base.rb
eac_tools-0.48.0 sub/avm/lib/avm/file_formats/base.rb
eac_tools-0.47.2 sub/avm/lib/avm/file_formats/base.rb
eac_tools-0.47.1 sub/avm/lib/avm/file_formats/base.rb
eac_tools-0.47.0 sub/avm/lib/avm/file_formats/base.rb
avm-0.57.0 lib/avm/file_formats/base.rb
eac_tools-0.46.0 sub/avm/lib/avm/file_formats/base.rb
avm-0.56.1 lib/avm/file_formats/base.rb
eac_tools-0.45.2 sub/avm/lib/avm/file_formats/base.rb
eac_tools-0.45.1 sub/avm/lib/avm/file_formats/base.rb
avm-0.56.0 lib/avm/file_formats/base.rb
eac_tools-0.45.0 sub/avm/lib/avm/file_formats/base.rb
eac_tools-0.44.0 sub/avm/lib/avm/file_formats/base.rb
eac_tools-0.43.0 sub/avm/lib/avm/file_formats/base.rb
avm-0.55.0 lib/avm/file_formats/base.rb
eac_tools-0.42.0 sub/avm/lib/avm/file_formats/base.rb