Story#recalculate_hotness: cap comment points at story votes
This commit is contained in:
parent
8fe01e7e2c
commit
a05ab9a01e
|
@ -123,7 +123,11 @@ class Story < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.recalculate_all_hotnesses!
|
def self.recalculate_all_hotnesses!
|
||||||
Story.all.order("id DESC").each do |s|
|
# do the front page first, since find_each can't take an order
|
||||||
|
Story.order("id DESC").limit(100).each do |s|
|
||||||
|
s.recalculate_hotness!
|
||||||
|
end
|
||||||
|
Story.find_each do |s|
|
||||||
s.recalculate_hotness!
|
s.recalculate_hotness!
|
||||||
end
|
end
|
||||||
true
|
true
|
||||||
|
@ -189,6 +193,8 @@ class Story < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
|
|
||||||
def calculated_hotness
|
def calculated_hotness
|
||||||
|
# take each tag's hotness modifier into effect, and give a slight bump to
|
||||||
|
# stories submitted by the author
|
||||||
base = self.tags.map{|t| t.hotness_mod }.sum +
|
base = self.tags.map{|t| t.hotness_mod }.sum +
|
||||||
(self.user_is_author ? 0.25 : 0.0)
|
(self.user_is_author ? 0.25 : 0.0)
|
||||||
|
|
||||||
|
@ -210,6 +216,12 @@ class Story < ActiveRecord::Base
|
||||||
# mix in any stories this one cannibalized
|
# mix in any stories this one cannibalized
|
||||||
cpoints += self.merged_stories.map{|s| s.score }.inject(&:+).to_f
|
cpoints += self.merged_stories.map{|s| s.score }.inject(&:+).to_f
|
||||||
|
|
||||||
|
# if a story has many comments but few votes, it's probably a bad story, so
|
||||||
|
# cap the comment points at the number of upvotes
|
||||||
|
if cpoints > self.upvotes
|
||||||
|
cpoints = self.upvotes
|
||||||
|
end
|
||||||
|
|
||||||
# don't immediately kill stories at 0 by bumping up score by one
|
# don't immediately kill stories at 0 by bumping up score by one
|
||||||
order = Math.log([ (score + 1).abs + cpoints, 1 ].max, 10)
|
order = Math.log([ (score + 1).abs + cpoints, 1 ].max, 10)
|
||||||
if score > 0
|
if score > 0
|
||||||
|
|
Loading…
Reference in a new issue