BathHacked/energy-sparks

View on GitHub
app/classes/schools/comparison.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Schools
  class Comparison
    attr_reader :school_value, :benchmark_value, :exemplar_value, :unit, :low_is_good

    def initialize(school_value:, benchmark_value:, exemplar_value:, unit:, low_is_good: true)
      @school_value = school_value
      @benchmark_value = benchmark_value
      @exemplar_value = exemplar_value
      @unit = unit
      @low_is_good = low_is_good
    end

    def valid?
      @school_value.present? && @exemplar_value.present? && @unit.present?
    end

    def category
      @category ||= categorise_school
    end

    private

    def categorise_school
      return :other_school if @school_value.nil? || @benchmark_value.nil? || @exemplar_value.nil?
      if exemplar_school?
        :exemplar_school
      elsif benchmark_school?
        :benchmark_school
      else
        :other_school
      end
    end

    def exemplar_school?
      @low_is_good ? @school_value <= @exemplar_value : @school_value >= @exemplar_value
    end

    def benchmark_school?
      if @low_is_good
        @school_value > @exemplar_value && @school_value <= @benchmark_value
      else
        @school_value < @exemplar_value && @school_value >= @benchmark_value
      end
    end
  end
end