mysociety/alaveteli

View on GitHub
app/models/statistics/leaderboard.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Statistics
  # Top 10 User records who've performed specific site actions
  class Leaderboard
    def all_time_requesters
      InfoRequest.is_public.
                  joins(:user).
                  merge(User.active).
                  group(:user).
                  order(count_info_requests_all: :desc).
                  limit(10).
                  count
    end

    def last_28_day_requesters
      # TODO: Refactor as it's basically the same as all_time_requesters
      InfoRequest.is_public.
                  where('info_requests.created_at >= ?', 28.days.ago).
                  joins(:user).
                  merge(User.active).
                  group(:user).
                  order(count_info_requests_all: :desc).
                  limit(10).
                  count
    end

    def all_time_commenters
      Comment.visible.
              joins(:user).
              merge(User.active).
              group(:user).
              order(count_all: :desc).
              limit(10).
              count
    end

    def last_28_day_commenters
      # TODO: Refactor as it's basically the same as all_time_commenters
      Comment.visible.
              where('comments.created_at >= ?', 28.days.ago).
              joins(:user).
              merge(User.active).
              group(:user).
              order(count_all: :desc).
              limit(10).
              count
    end
  end
end