zhishi-engine/zhishi-backend

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

Summary

Maintainability
A
0 mins
Test Coverage
module VotesCounter
  extend ActiveSupport::Concern
  included do

    scope :with_votes, Queries::VotesQuery.new(self)

    scope :ordered_by_top, -> {
      with_votes.order('total_votes DESC, created_at DESC')
    }

    scope :top, ->(needed=10) {
      ordered_by_top.paginate(per_page: needed, page: 1)
    }

    scope :by_date, -> {
      with_votes.order("#{table_name}.created_at DESC")
    }
  end

  def votes_count
    if respond_to? :total_votes
      total_votes.to_i
    else
      votes_alternative
    end
  end

  def votes_alternative
    votes.reduce(0) do |sum , vote|
      sum + vote.value
    end
  end

  def vote_by(user)
    vote = votes.find { |vote| vote.user_id == user.id }
    vote ? vote.value : nil
  end
end