ombulabs/pecas

View on GitHub
app/models/concerns/leaderboard_calculation.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'active_support/concern'

module LeaderboardCalculation
  extend ActiveSupport::Concern

  included do
    def self.calculate
      [1, 0].each do |weeks_ago|
        start_date = Time.now.beginning_of_week.to_date - weeks_ago.weeks
        end_date = Time.now.end_of_week.to_date - weeks_ago.weeks
        model_klass = self.name.gsub("Leaderboard", "").constantize

        model_klass.find_each do |record|
          leaderboard = self.find_or_create_by(
            "#{model_klass.name.downcase}_id" => record.id,
            start_date: start_date,
            end_date: end_date)
          leaderboard.update_column(:total_minutes, record.minutes_of_week(weeks_ago))
        end
      end
    end
  end
end