mirror of
https://github.com/discourse/discourse.git
synced 2024-11-25 09:42:07 +08:00
FIX: ensures timeline_lookup includes last tuple (#11829)
A simplified version of the logic used in the function before my fix is as follow: ```ruby result = [] things = [0,1,2,3] max_values = 2 every = (things.size.to_f / max_values).ceil things.each_with_index do |t, index| next unless (t % every) === 0 result << t end p result # [0, 2] # 3 doesn’t get included ``` The problem is that if you get unlucky two times you won't get last tuple(s) and might get a very erroneous date. Double unlucky: - last tuple index % computed every !== 0 and you don't get the last tuple - the last tuple is related to a post with a very different date than the previous tuples (on year difference in our case)
This commit is contained in:
parent
aa1138ff71
commit
8edd2b38cb
|
@ -12,7 +12,10 @@ module TimelineLookup
|
|||
last_days_ago = -1
|
||||
tuples.each_with_index do |t, idx|
|
||||
return result unless t.is_a?(Array)
|
||||
next unless (idx % every) === 0
|
||||
|
||||
if idx != tuples.size - 1
|
||||
next unless (idx % every) === 0
|
||||
end
|
||||
|
||||
days_ago = t[1]
|
||||
|
||||
|
|
17
spec/lib/timeline_lookup_spec.rb
Normal file
17
spec/lib/timeline_lookup_spec.rb
Normal file
|
@ -0,0 +1,17 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
describe TimelineLookup do
|
||||
|
||||
context '.build' do
|
||||
it 'keeps the last tuple in the lookup' do
|
||||
tuples = [
|
||||
[7173, 400], [7174, 390], [7175, 380], [7176, 370], [7177, 1]
|
||||
]
|
||||
|
||||
expect(TimelineLookup.build(tuples, 2)).to eq([[1, 400], [4, 370], [5, 1]])
|
||||
end
|
||||
end
|
||||
|
||||
end
|
Loading…
Reference in New Issue
Block a user