Class: StableMatching::PreferenceTable

Inherits:
SimpleDelegator
  • Object
show all
Defined in:
lib/stable-matching/preference_table.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(raw_preference_table) ⇒ PreferenceTable

Returns a new instance of PreferenceTable.



16
17
18
19
20
21
22
23
24
25
26
27
# 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

Instance Attribute Details

#name_to_member_mappingObject (readonly)

Returns the value of attribute name_to_member_mapping.



14
15
16
# File 'lib/stable-matching/preference_table.rb', line 14

def name_to_member_mapping
  @name_to_member_mapping
end

Instance Method Details

#complete?Boolean

Returns:

  • (Boolean)


47
48
49
50
51
# 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

#membersObject



53
54
55
# File 'lib/stable-matching/preference_table.rb', line 53

def members
  __getobj__
end


33
34
35
36
37
38
# File 'lib/stable-matching/preference_table.rb', line 33

def print
  table = {}
  members.each { |m| table[m.name] = m.preference_list.map(&:name) }

  pp(table)
end

#to_sObject



29
30
31
# File 'lib/stable-matching/preference_table.rb', line 29

def to_s
  members.map { |m| "#{m.name} => #{m.preference_list}" }.join(", ")
end

#unmatchedObject



40
41
42
43
44
45
# 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