lib/icarus/mod/tools/modinfo.rb in Icarus-Mod-Tools-1.6.0 vs lib/icarus/mod/tools/modinfo.rb in Icarus-Mod-Tools-1.7.0

- old
+ new

@@ -3,25 +3,32 @@ module Icarus module Mod module Tools # Sync methods class Modinfo - attr_reader :data, :id, :created_at, :updated_at + attr_reader :data, :errors, :id, :created_at, :updated_at, :warnings 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 @@ -43,15 +50,47 @@ imageURL:, readmeURL: } end + def validate + @warnings << "Version should not be blank" unless validate_string(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 end end end end