class StableMatching::PreferenceTable

Attributes

name_to_member_mapping[R]

Public Class Methods

new(raw_preference_table) click to toggle source
Calls superclass method
# File lib/stable-matching/preference_table.rb, line 16
def initialize(raw_preference_table)
  members = initialize_members_from(raw_preference_table)

  raw_preference_table.each do |name, raw_preference_list|
    generate_preference_list(
      find_member_by_name(name),
      raw_preference_list
    )
  end

  super(members)
end

Public Instance Methods

complete?() click to toggle source
# File lib/stable-matching/preference_table.rb, line 47
def complete?
  # Does every member have only one preference remaining?
  counts = members.map { |member| member.preference_list.count }
  counts.uniq == [1]
end
members() click to toggle source
# File lib/stable-matching/preference_table.rb, line 53
def members
  __getobj__
end
print() click to toggle source
to_s() click to toggle source
# File lib/stable-matching/preference_table.rb, line 29
def to_s
  members.map { |m| "#{m.name} => #{m.preference_list}" }.join(", ")
end
unmatched() click to toggle source
# File lib/stable-matching/preference_table.rb, line 40
def unmatched
  have_accepted = members.select(&:accepted_proposal?)
  have_been_accepted = have_accepted.map(&:current_proposer)

  members - have_been_accepted
end

Private Instance Methods

find_member_by_name(name) click to toggle source
# File lib/stable-matching/preference_table.rb, line 59
def find_member_by_name(name)
  @name_to_member_mapping[name]
end
generate_preference_list(member, raw_preference_list) click to toggle source
# File lib/stable-matching/preference_table.rb, line 73
def generate_preference_list(member, raw_preference_list)
  member_list =
    raw_preference_list.map { |name| find_member_by_name(name) }

  member.preference_list = PreferenceList.new(member_list)
end
initialize_members_from(raw_preference_table) click to toggle source
# File lib/stable-matching/preference_table.rb, line 63
def initialize_members_from(raw_preference_table)
  @name_to_member_mapping = {}

  raw_preference_table.keys.each do |name|
    @name_to_member_mapping[name] = Member.new(name)
  end

  @name_to_member_mapping.values
end