class StableMatching::Validator
Public Class Methods
new(preference_table)
click to toggle source
# File lib/stable-matching/validator.rb, line 12 def initialize(preference_table) @preference_table = preference_table end
validate!(preference_table)
click to toggle source
# File lib/stable-matching/validator.rb, line 8 def self.validate!(preference_table) new(preference_table).validate! end
Private Instance Methods
empty?()
click to toggle source
# File lib/stable-matching/validator.rb, line 33 def empty? return true if @preference_table.empty? @preference_table.each_value.any?(&:empty?) end
even_sized?()
click to toggle source
# File lib/stable-matching/validator.rb, line 58 def even_sized? @preference_table.keys.size.even? end
handle_empty()
click to toggle source
# File lib/stable-matching/validator.rb, line 39 def handle_empty @error = "Preferences table can not empty" end
handle_not_even_sized()
click to toggle source
# File lib/stable-matching/validator.rb, line 62 def handle_not_even_sized @error = "Preference table must have an even number of keys" end
handle_not_hash_of_arrays()
click to toggle source
# File lib/stable-matching/validator.rb, line 29 def handle_not_hash_of_arrays @error = "Expecting a preference table hash of arrays" end
handle_not_strings_or_integers()
click to toggle source
# File lib/stable-matching/validator.rb, line 54 def handle_not_strings_or_integers @error = "All keys must be String or Integer" end
handle_not_symmetrical()
click to toggle source
# File lib/stable-matching/validator.rb, line 82 def handle_not_symmetrical @error = "Entry #{@name} has invalid preferences. "\ "The extra members are: #{@extra}. "\ "The missing members are: #{@missing}" end
hash_of_arrays?()
click to toggle source
@abstract Subclass is expected to implement validate! @!method validate!
Validate the structure and content of the `preference_table`
# File lib/stable-matching/validator.rb, line 22 def hash_of_arrays? return false unless @preference_table.is_a?(Hash) @preference_table.values.each { |p| return false unless p.is_a?(Array) } true end
strings_or_integers?()
click to toggle source
# File lib/stable-matching/validator.rb, line 43 def strings_or_integers? @preference_table.each do |key, array| @member_klass ||= key.class return false unless valid_member?(key) array.each { |value| return false unless valid_member?(value) } end true end
symmetrical?()
click to toggle source
# File lib/stable-matching/validator.rb, line 66 def symmetrical? @preference_table.each do |name, preference_list| expected_members = @preference_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
valid_member?(member)
click to toggle source
# File lib/stable-matching/validator.rb, line 88 def valid_member?(member) (member.is_a?(String) || member.is_a?(Integer)) && member.class == @member_klass end