Sha256: f191263a82161e0e1b07ca0faf785e9c4fa638a390effe2ae8fa5f4ecd4d4a03

Contents?: true

Size: 1.89 KB

Versions: 13

Compression:

Stored size: 1.89 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/core_ext'

module EhbrsRubyUtils
  module Vg
    module Wii
      module Wit
        module Parsers
          class Dump
            enable_simple_cache
            common_constructor :output

            # WIA/WII (v1.00,LZMA2.7@100)  &  Wii
            # ISO/WII  &  Wii
            # WBFS/WII  &  Wii
            # ISO/GC  &  GameCube
            FILE_DISC_TYPE_PATTERN = %r{\A(\S+)/(\S+)\s+(?:\(([^\)]+)\)\s+)?&\s+(\S+)\z}.freeze

            private

            def properties_uncached
              r = {}
              output.each_line do |line|
                dump_output_line_to_hash(line).if_present { |v| r.merge!(v) }
              end
              r
            end

            def dump_output_line_to_hash(line)
              m = /\A\s*([^:]+):\s+(.+)\z/.match(line.strip)
              return nil unless m

              parse_attribute(m[1].strip, m[2].strip)
            end

            def line_method_parser(label)
              "parse_#{label}".parameterize.underscore
            end

            def parse_attribute(label, value)
              method = line_method_parser(label)
              return { label => value } unless respond_to?(method, true)

              send(method, value).transform_keys { |k| "#{label}/#{k}" }
            end

            def parse_file_disc_type(value)
              r = FILE_DISC_TYPE_PATTERN.match(value).if_present do |m|
                { type: m[1], platform_acronym: m[2], type_extra: m[3],
                  platform_name: m[4] }
              end
              r.if_blank { raise "\"#{FILE_DISC_TYPE_PATTERN}\" does not match \"#{value}\"" }
            end

            def parse_disc_part_ids(value)
              value.split(',').to_h do |v|
                r = v.strip.split('=')
                [r[0].strip, r[1].strip]
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
ehbrs_ruby_utils-0.44.3 lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump.rb
ehbrs_ruby_utils-0.44.2 lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump.rb
ehbrs_ruby_utils-0.44.1 lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump.rb
ehbrs_ruby_utils-0.44.0 lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump.rb
ehbrs_ruby_utils-0.41.1 lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump.rb
ehbrs_ruby_utils-0.41.0 lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump.rb
ehbrs_ruby_utils-0.40.0 lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump.rb
ehbrs_ruby_utils-0.39.0 lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump.rb
ehbrs_ruby_utils-0.38.0 lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump.rb
ehbrs_ruby_utils-0.37.0 lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump.rb
ehbrs_ruby_utils-0.36.1 lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump.rb
ehbrs_ruby_utils-0.36.0 lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump.rb
ehbrs_ruby_utils-0.35.0 lib/ehbrs_ruby_utils/vg/wii/wit/parsers/dump.rb