BathHacked/energy-sparks

View on GitHub
app/services/equivalences/relevant_and_timely.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Equivalences
  class RelevantAndTimely
    TIME_PERIODS = {
      last_week: 14,
      last_school_week: 14,
      last_work_week: 14,
      last_month: 14,
      last_year: 90,
      last_academic_year: 180,
    }.freeze

    def initialize(school)
      @school = school
    end

    def equivalences(meter_types: :all)
      if meter_types == :all
        relevant_equivalences.select { |eq| in_date(eq) }
      else
        relevant_equivalences.select { |eq| in_date(eq) && meter_types.include?(eq.equivalence_type.meter_type.to_sym) }
      end
    end

  private

    def in_date(equivalence)
      relevant_days_ago(equivalence) < equivalence.to_date
    end

    def relevant_days_ago(equivalence)
      TIME_PERIODS[equivalence.content_version.equivalence_type.time_period.to_sym].days.ago
    end

    def relevant_equivalences
      @school.equivalences.joins(content_version: :equivalence_type).where(relevant: true)
    end
  end
end