class StableMatching::Member

Attributes

accepted_proposal_from[R]
name[R]
preference_list[W]
received_proposals_from[R]

Public Class Methods

new(name) click to toggle source
# File lib/stable-matching/member.rb, line 11
def initialize(name)
  @name = name
  @accepted_proposal_from = nil
end

Public Instance Methods

accept_proposal_from!(member) click to toggle source
# File lib/stable-matching/member.rb, line 47
def accept_proposal_from!(member)
  @accepted_proposal_from = member
end
accepted_proposal?() click to toggle source
# File lib/stable-matching/member.rb, line 38
def accepted_proposal?
  !current_proposer.nil?
end
current_acceptor() click to toggle source
# File lib/stable-matching/member.rb, line 32
def current_acceptor
  preference_list.detect do |member|
    member.accepted_proposal_from == self
  end
end
current_proposer() click to toggle source
# File lib/stable-matching/member.rb, line 28
def current_proposer
  @accepted_proposal_from
end
first_preference() click to toggle source
# File lib/stable-matching/member.rb, line 59
def first_preference
  preference_list.first
end
last_preference() click to toggle source
# File lib/stable-matching/member.rb, line 67
def last_preference
  preference_list.last
end
preference_list() click to toggle source
# File lib/stable-matching/member.rb, line 20
def preference_list
  if @preference_list.nil?
    raise "preference list not set for member: #{name}"
  end

  @preference_list
end
reject!(member) click to toggle source
# File lib/stable-matching/member.rb, line 51
def reject!(member)
  @accepted_proposal_from = nil if current_proposer == member

  # Delete each member from the other member's preference list
  preference_list.delete(member)
  member.preference_list.delete(self)
end
second_preference() click to toggle source
# File lib/stable-matching/member.rb, line 63
def second_preference
  preference_list[1]
end
to_s() click to toggle source
# File lib/stable-matching/member.rb, line 16
def to_s
  name
end
would_prefer?(new_proposer) click to toggle source
# File lib/stable-matching/member.rb, line 42
def would_prefer?(new_proposer)
  return true unless accepted_proposal?
  preference_of(new_proposer) > preference_of(current_proposer)
end

Private Instance Methods

preference_of(member) click to toggle source
# File lib/stable-matching/member.rb, line 73
def preference_of(member)
  index = preference_list.index(member)
  return if index.nil?

  # Return the preference as the inverse of the index so a smaller index
  # has a greater preference
  preference_list.size - index
end