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,17 +6,7 @@ class ProposalsDiscussionPlugin::API < Grape::API | ||
6 | get ':id/ranking' do | 6 | get ':id/ranking' do |
7 | article = find_article(environment.articles, params[:id]) | 7 | article = find_article(environment.articles, params[:id]) |
8 | ranking = Rails.cache.fetch("#{article.cache_key}/proposals_ranking", expires_in: 30.minutes) do | 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 | end | 10 | end |
21 | ranking[:proposals] = paginate ranking[:proposals] | 11 | ranking[:proposals] = paginate ranking[:proposals] |
22 | ranking | 12 | ranking |
lib/proposals_discussion_plugin/proposals_holder.rb
@@ -40,6 +40,19 @@ class ProposalsDiscussionPlugin::ProposalsHolder < Folder | @@ -40,6 +40,19 @@ class ProposalsDiscussionPlugin::ProposalsHolder < Folder | ||
40 | end | 40 | end |
41 | end | 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 | def cache_key_with_person(params = {}, user = nil, language = 'en') | 56 | def cache_key_with_person(params = {}, user = nil, language = 'en') |
44 | cache_key_without_person + (user ? "-#{user.identifier}" : '') | 57 | cache_key_without_person + (user ? "-#{user.identifier}" : '') |
45 | end | 58 | end |