lib/icarus/mod/tools/modinfo.rb in Icarus-Mod-Tools-1.7.1 vs lib/icarus/mod/tools/modinfo.rb in Icarus-Mod-Tools-1.8.0

- old
+ new

@@ -1,101 +1,20 @@ # frozen_string_literal: true +require "tools/baseinfo" + module Icarus module Mod module Tools # Sync methods - class Modinfo - attr_reader :data, :errors, :id, :created_at, :updated_at, :warnings - + class Modinfo < Baseinfo HASHKEYS = %i[name author version compatibility description long_description fileType fileURL imageURL readmeURL].freeze - def initialize(data, id: nil, created: nil, updated: nil) - @id = id - @created_at = created - @updated_at = updated - @errors = [] - @warnings = [] - - read(data) - end - - def read(data) - @data = data.is_a?(String) ? JSON.parse(data, symbolize_names: true) : data - end - - def uniq_name - "#{author}/#{name}" - end - # rubocop:disable Naming/MethodName def fileType @data[:fileType] || "pak" end # rubocop:enable Naming/MethodName - - def to_json(*args) - JSON.generate(@data, *args) - end - - def to_h - { - name:, - author:, - version:, - compatibility:, - description:, - long_description:, - fileType:, - fileURL:, - imageURL:, - readmeURL: - } - end - - def validate - @warnings << "Version should be a version string" unless validate_version(version) - - %w[name author description].each do |key| - @errors << "#{key.capitalize} cannot be blank" unless validate_string(@data[key.to_sym]) - end - - @errors << "Invalid fileType: #{fileType || "blank"}" unless validate_filetype(fileType) - - %w[fileURL imageURL readmeURL].each do |key| - @errors << "Invalid URL #{key.capitalize}: #{@data[key.to_sym] || "blank"}" unless validate_url(@data[key.to_sym]) - end - - @errors.empty? - end - - def method_missing(method_name, *_args, &) - @data[method_name.to_sym]&.strip - end - - def respond_to_missing?(method_name, include_private = false) - HASHKEYS.include?(method_name.to_sym) || super - end - - private - - def validate_url(url) - return true if url.nil? || url.empty? - - url =~ URI::DEFAULT_PARSER.make_regexp - end - - def validate_filetype(filetype) - %w[pak zip exmod].include?(filetype.downcase) - end - - def validate_string(string) - !(string.nil? || string.empty?) - end - - def validate_version(version) - version =~ /\d+\.\d+[.\d+]?/ - end end end end end