2019-05-03 06:17:27 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2016-05-18 01:03:08 +08:00
|
|
|
module TimelineLookup
|
|
|
|
|
2018-06-27 11:11:22 +08:00
|
|
|
# Given an array of tuples containing (id, days_ago), return at most `max_values` worth of a
|
2016-05-18 01:03:08 +08:00
|
|
|
# lookup table to help the front end timeline display dates associated with posts
|
|
|
|
def self.build(tuples, max_values = 300)
|
|
|
|
result = []
|
|
|
|
|
|
|
|
every = (tuples.size.to_f / max_values).ceil
|
|
|
|
|
|
|
|
last_days_ago = -1
|
|
|
|
tuples.each_with_index do |t, idx|
|
2018-06-27 11:11:22 +08:00
|
|
|
return result unless t.is_a?(Array)
|
2021-01-25 18:30:59 +08:00
|
|
|
|
|
|
|
if idx != tuples.size - 1
|
|
|
|
next unless (idx % every) === 0
|
|
|
|
end
|
2016-05-18 01:03:08 +08:00
|
|
|
|
2018-06-27 11:11:22 +08:00
|
|
|
days_ago = t[1]
|
2016-05-18 01:03:08 +08:00
|
|
|
|
|
|
|
if (days_ago != last_days_ago)
|
2016-05-27 00:49:54 +08:00
|
|
|
result << [idx + 1, days_ago]
|
2016-05-18 01:03:08 +08:00
|
|
|
last_days_ago = days_ago
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
result
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|