class StableMatching::Roommate::PhaseIIRunner

Public Class Methods

new(preference_table, opts = {}) click to toggle source
# File lib/stable-matching/roommate/phase_ii_runner.rb, line 73
def initialize(preference_table, opts = {})
  @preference_table = preference_table
  @logger = opts.fetch(:logger)
end

Public Instance Methods

run() click to toggle source
# File lib/stable-matching/roommate/phase_ii_runner.rb, line 78
def run
  @preference_table.members.each do |proposer|
    acceptor, rejections =
      determine_acceptor_and_their_rejections(proposer)

    @logger.debug(
      "#{proposer.name} accepted by #{acceptor.name}. "\
      "#{acceptor.name} rejecting members less preferred than "\
      "#{proposer.name}: #{rejections.map(&:name)}"
    )

    rejections.each { |rejected| acceptor.reject!(rejected) }
  end
end

Private Instance Methods

determine_acceptor_and_their_rejections(proposer) click to toggle source
# File lib/stable-matching/roommate/phase_ii_runner.rb, line 95
def determine_acceptor_and_their_rejections(proposer)
  acceptor = proposer.current_acceptor
  current_proposer_index = acceptor.preference_list.index(proposer)

  rejections = acceptor.preference_list[current_proposer_index + 1..-1]

  [acceptor, rejections]
end