Refactor the conflicts coefficient model

This commit is contained in:
Petko Bordjukov 2016-10-05 13:25:05 +03:00
parent 59cec71151
commit e66bafdc55
1 changed files with 22 additions and 14 deletions

View File

@ -1,25 +1,33 @@
class ConflictCoefficient class ConflictCoefficient
attr_reader :left, :right, :conflicts attr_reader :left, :right
def self.all def self.all
talk_combinations = Talk.find(:all, from: :halfnarp_friendly).map(&:id).combination(2) Talk.find(:all, from: :halfnarp_friendly).map(&:id).combination(2).map do |talks|
talk_preferences = TalkPreference.this_years ConflictCoefficient.new talks.first, talks.last
talk_preferences_count = talk_preferences.count
talk_combinations.map do |talks|
conflicts = talk_preferences.select do |talk_preference|
talk_preference.include_all? talks
end.count
ConflictCoefficient.new talks.first, talks.last, conflicts, talk_preferences_count
end end
end end
def initialize(left, right, conflicts, total_votes) def conflicts
@left, @right, @conflicts, @total_votes = left, right, conflicts, total_votes @conflicts ||= talk_preferences.select do |talk_preference|
talk_preference.include_all? [@left, @right]
end.count
end
def total_votes
talk_preferences.count
end
def initialize(left, right)
@left, @right = left, right
end end
def per_cent def per_cent
Rational(100 * @conflicts, @total_votes).to_f Rational(100 * conflicts, total_votes).to_f
end
private
def talk_preferences
@talk_preferences ||= TalkPreference.this_years
end end
end end