class StableMatching::Marriage::PreferenceTable

Attributes

partner_table[RW]

Public Class Methods

initialize_pair(raw_preference_table_a, raw_preference_table_b) click to toggle source
# File lib/stable-matching/marriage/preference_table.rb, line 13
def self.initialize_pair(raw_preference_table_a, raw_preference_table_b)
  table_a = new(raw_preference_table_a)
  table_b = new(raw_preference_table_b)

  table_a.partner_table = table_b
  table_b.partner_table = table_a

  [table_a, table_b]
end
new(raw_preference_table) click to toggle source
# File lib/stable-matching/marriage/preference_table.rb, line 23
def initialize(raw_preference_table)
  members = initialize_members_from(raw_preference_table)

  @raw_preference_table = raw_preference_table

  # Avoid calling the parent initializer, but we still need to set
  # the delegated object. Thankfully SimpleDelegator offers a method
  # to set this directly
  __setobj__(members)
end

Public Instance Methods

partner_table=(partner_table) click to toggle source
# File lib/stable-matching/marriage/preference_table.rb, line 34
def partner_table=(partner_table)
  @partner_table = partner_table

  @raw_preference_table.each do |name, raw_preference_list|
    generate_preference_list(
      find_member_by_name(name),
      raw_preference_list,
      partner_table
    )
  end
end
unmatched() click to toggle source
# File lib/stable-matching/marriage/preference_table.rb, line 46
def unmatched
  have_accepted = partner_table.members.select(&:accepted_proposal?)
  have_been_accepted = have_accepted.map(&:current_proposer)

  members - have_been_accepted
end

Private Instance Methods

generate_preference_list(member, raw_preference_list, partner_table) click to toggle source
# File lib/stable-matching/marriage/preference_table.rb, line 55
def generate_preference_list(member, raw_preference_list, partner_table)
  member_list = raw_preference_list.map do |name|
    partner_table.name_to_member_mapping[name]
  end

  member.preference_list = PreferenceList.new(member_list)
end