Commit fde8e501997dafed7c931e5824959552f3a0481d
1 parent
bc3e832e
Exists in
master
and in
7 other branches
Move ranking logic to model
Showing
2 changed files
with
14 additions
and
11 deletions
Show diff stats
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 | ... | ... |