class Validator

Public Class Methods

new(skill_list:, skill_group:, skill_cat:, advanced_cat:, concentration_cat:, strains:, professions:, strain_stats:, strain_specs:, profession_concentrations:, profession_concentration_hierarchy:, profession_concentration_group:, profession_advanced:, skill_counters:, skill_countered: @skill_list = skill_list) click to toggle source
# File lib/Validator.rb, line 5
def initialize skill_list:, 
               skill_group:, 
               skill_cat:, 
               advanced_cat:,
               concentration_cat:,
               strains:, 
               professions:, 
               strain_stats:, 
               strain_specs:,
               profession_concentrations:,
               profession_concentration_hierarchy:,
               profession_concentration_group:,
               profession_advanced:,
               skill_counters:,
               skill_countered:
  @skill_list = skill_list
  @skill_group = skill_group
  @skill_cat = skill_cat
  @advanced_cat = advanced_cat
  @concentration_cat = concentration_cat
  @strains = strains
  @professions = professions
  @strain_stats = strain_stats
  @strain_specs = strain_specs
  @profession_concentrations = profession_concentrations
  @profession_concentration_hierarchy = profession_concentration_hierarchy
  @profession_advanced = profession_advanced
  @skill_counters = skill_counters
  @skill_countered = skill_countered

  @profession_concentration_inverted = Hash.new
  @profession_concentrations.each do |basic, data|
    data.each do |conc|
      @profession_concentration_inverted[conc] = true
    end
  end

  validate_non_empty
  validate_skill_name_matches cat: @skill_cat
  validate_skill_name_matches cat: @advanced_cat
  validate_skill_name_matches cat: @concentration_cat
  validate_stats
  validate_strain_specs
  validate_profession_concentrations
  validate_profession_concentration_hierarchy
  validate_profession_advanced
  validate_non_duplicate_skill_codes
  validate_skill_counters cat: @skill_counters
  validate_skill_counters cat: @skill_countered
  validate_skill_counter_bidirectional
end

Private Instance Methods

validate_non_duplicate_skill_codes() click to toggle source
# File lib/Validator.rb, line 131
def validate_non_duplicate_skill_codes
  existing_codes = Hash.new

  @skill_list.each do |skill, code|
    if existing_codes[code] == nil
      existing_codes[code] = skill
    else
      puts "Duplicate skill code: #{code}"
      puts "  Previously claimed by: #{existing_codes[code]}"
      puts "  Ateempt to claim by:   #{skill}"
    end
  end
end
validate_non_empty() click to toggle source
# File lib/Validator.rb, line 72
def validate_non_empty
  assert(@skill_list.length > 0, "Empty skill list")
  assert(@skill_cat.length > 0, "Empty processed skills")
  assert(@strains.length > 0, "Empty strains")
  assert(@professions.length > 0, "Empty professions")
end
validate_profession_advanced() click to toggle source
# File lib/Validator.rb, line 62
def validate_profession_advanced
  assert(@profession_advanced.length > 0)
end
validate_profession_concentration_hierarchy() click to toggle source
# File lib/Validator.rb, line 66
def validate_profession_concentration_hierarchy
  @profession_concentration_hierarchy.each do |prof, pc|
    is_in_profession?(prof)
  end
end
validate_profession_concentrations() click to toggle source
# File lib/Validator.rb, line 58
def validate_profession_concentrations
  assert(@profession_concentrations.length > 0)
end
validate_skill_counters(cat: cat.each do |s, ls| if !is_in_list?(s)) click to toggle source
# File lib/Validator.rb, line 145
def validate_skill_counters cat:
  cat.each do |s, ls|
    if !is_in_list?(s)
      puts "Mismatched skill counter: #{s}"
    end
validate_skill_name_matches(cat: mismatches = Array.new) click to toggle source
# File lib/Validator.rb, line 101
def validate_skill_name_matches cat:
  mismatches = Array.new

  cat.each do |skill_name, sdata|
    if !is_in_list?(skill_name)
      # puts "mismatch: #{skill_name}"
      mismatches << skill_name
      # ap @skill_cat[skill_name]
    end

    sdata.each do |stype, stdata|
      case stype
      when :innate, :innate_disadvantage, :innate_disabled
        stdata.each do |strain|
          is_in_strain?(strain)
        end
      when :innate_preq
      when :open
      else
        is_in_profession?(stype)
        if stdata[:preq]
          stdata[:preq][:list].each do |pskill, _junk|
            is_in_list?(pskill)
          end
        end
      end
    end
  end
end
validate_stats() click to toggle source
# File lib/Validator.rb, line 93
def validate_stats
  @strain_stats.each do |strain, stats|
    is_in_strain?(strain)
    assert(stats.keys.sort == [:hp, :mp, :infection].sort, 
           "Strain stats must contain HP, MP and Infection")
  end
end
validate_strain_specs() click to toggle source
# File lib/Validator.rb, line 79
def validate_strain_specs
  cumulative_strain_specs = Hash.new

  @strain_specs.each do |strain, specs|
    is_in_strain?(strain)
    (specs[:advantages] + specs[:disadvantages]).each do |spec|
      assert(cumulative_strain_specs[spec] == nil,
             "Duplicate strain-specific skill: [#{strain}] [#{spec}]")

      cumulative_strain_specs[spec] = true
    end
  end
end