class StableMatching::Marriage::Validator

Public Class Methods

new(preference_table, partner_table) click to toggle source
# File lib/stable-matching/marriage/validator.rb, line 16
def initialize(preference_table, partner_table)
  @preference_table = preference_table
  @partner_table = partner_table
end
validate_pair!(alpha_preferences, beta_preferences) click to toggle source
# File lib/stable-matching/marriage/validator.rb, line 11
def self.validate_pair!(alpha_preferences, beta_preferences)
  new(alpha_preferences, beta_preferences).validate!
  new(beta_preferences, alpha_preferences).validate!
end

Public Instance Methods

validate!() click to toggle source
# File lib/stable-matching/marriage/validator.rb, line 21
def validate!
  case
  when !hash_of_arrays?         then handle_not_hash_of_arrays
  when empty?                   then handle_empty
  when !strings_or_integers?    then handle_not_strings_or_integers
  when !symmetrical?            then handle_not_symmetrical
  end

  raise ::StableMatching::InvalidPreferences, @error if @error
end

Private Instance Methods

symmetrical?() click to toggle source
# File lib/stable-matching/marriage/validator.rb, line 34
def symmetrical?
  @preference_table.each do |name, preference_list|
    expected_members = @partner_table.keys - [name]
    actual_members = preference_list

    next if expected_members.sort == actual_members.sort

    @name = name
    @extra = actual_members - expected_members
    @missing = expected_members - actual_members
    return false
  end

  true
end