Commit fde8e501997dafed7c931e5824959552f3a0481d

Authored by Victor Costa
1 parent bc3e832e

Move ranking logic to model

lib/proposals_discussion_plugin/api.rb
... ... @@ -6,17 +6,7 @@ class ProposalsDiscussionPlugin::API < Grape::API
6 6 get ':id/ranking' do
7 7 article = find_article(environment.articles, params[:id])
8 8 ranking = Rails.cache.fetch("#{article.cache_key}/proposals_ranking", expires_in: 30.minutes) do
9   - max_hits = article.proposals.maximum(:hits)
10   - min_hits = article.proposals.minimum(:hits)
11   -
12   - proposals = article.proposals.map do |proposal|
13   - w = [(proposal.hits - max_hits).abs, (proposal.hits - min_hits).abs, 1].max.to_f
14   - effective_support = (proposal.votes_for - proposal.votes_against)/w
15   -
16   - {:id => proposal.id, :abstract => proposal.abstract, :votes_for => proposal.votes_for, :votes_against => proposal.votes_against, :hits => proposal.hits, :effective_support => effective_support}
17   - end
18   - proposals = proposals.sort_by { |p| p[:effective_support] }.reverse
19   - {:proposals => proposals, :updated_at => DateTime.now}
  9 + {:proposals => article.ranking, :updated_at => DateTime.now}
20 10 end
21 11 ranking[:proposals] = paginate ranking[:proposals]
22 12 ranking
... ...
lib/proposals_discussion_plugin/proposals_holder.rb
... ... @@ -40,6 +40,19 @@ class ProposalsDiscussionPlugin::ProposalsHolder < Folder
40 40 end
41 41 end
42 42  
  43 + def ranking
  44 + max_hits = proposals.maximum(:hits)
  45 + min_hits = proposals.minimum(:hits)
  46 +
  47 + ranking = proposals.map do |proposal|
  48 + w = [(proposal.hits - max_hits).abs, (proposal.hits - min_hits).abs, 1].max.to_f
  49 + effective_support = (proposal.votes_for - proposal.votes_against)/w
  50 +
  51 + {:id => proposal.id, :abstract => proposal.abstract, :votes_for => proposal.votes_for, :votes_against => proposal.votes_against, :hits => proposal.hits, :effective_support => effective_support}
  52 + end
  53 + ranking.sort_by { |p| p[:effective_support] }.reverse
  54 + end
  55 +
43 56 def cache_key_with_person(params = {}, user = nil, language = 'en')
44 57 cache_key_without_person + (user ? "-#{user.identifier}" : '')
45 58 end
... ...