class Rankum::Metrics::FCPCalculator

Public Class Methods

run(context) click to toggle source
# File lib/rankum/metrics/fcp_calculator.rb, line 9
def self.run context
  FCPCalculator.new(context).run
end

Public Instance Methods

run() click to toggle source
# File lib/rankum/metrics/fcp_calculator.rb, line 13
def run
  execute { context.value = calculate_fcp }
end

Private Instance Methods

actual_rank() click to toggle source
# File lib/rankum/metrics/fcp_calculator.rb, line 52
def actual_rank
  @actual_rank ||= rank_reader.actual_rank
end
actual_rank_pairs() click to toggle source
# File lib/rankum/metrics/fcp_calculator.rb, line 22
def actual_rank_pairs
  @actual_rank_pairs ||= Rankum::Utils::FCPPair.to_a(actual_rank)
end
calculate_fcp() click to toggle source
# File lib/rankum/metrics/fcp_calculator.rb, line 26
def calculate_fcp
  total_pairs = perfect_rank_pair_count

  actual_rank_pairs.each do |pair|
    if perfect_rank_pairs[pair] > 0
      perfect_rank_pairs[pair] -= 1
    end
  end

  not_matched_pairs = perfect_rank_pair_count
  result = (total_pairs - not_matched_pairs).to_f / total_pairs
  result > 0 ? result : 0
end
perfect_rank() click to toggle source
# File lib/rankum/metrics/fcp_calculator.rb, line 48
def perfect_rank
  @perfect_rank ||= rank_reader.perfect_rank
end
perfect_rank_pair_count() click to toggle source
# File lib/rankum/metrics/fcp_calculator.rb, line 40
def perfect_rank_pair_count
  perfect_rank_pairs.reduce(0) { |acc, (k,v)| acc += v }
end
perfect_rank_pairs() click to toggle source
# File lib/rankum/metrics/fcp_calculator.rb, line 18
def perfect_rank_pairs
  @perfect_rank_pairs ||= Rankum::Utils::FCPPair.to_h(perfect_rank)
end
rank_reader() click to toggle source
# File lib/rankum/metrics/fcp_calculator.rb, line 44
def rank_reader
  @reader ||= context.rank_reader
end