class << self
def to_a_paginated_by_id(limit, options = {})
if options[:min_id]
- paginate_by_min_id(limit, options[:min_id]).reverse
+ paginate_by_min_id(limit, options[:min_id], options[:max_id]).reverse
else
paginate_by_max_id(limit, options[:max_id], options[:since_id]).to_a
end
end
- def paginate_by_min_id(limit, min_id = nil)
+ def paginate_by_min_id(limit, min_id = nil, max_id = nil)
query = order(arel_table[:last_status_id].asc).limit(limit)
query = query.where(arel_table[:last_status_id].gt(min_id)) if min_id.present?
+ query = query.where(arel_table[:last_status_id].lt(max_id)) if max_id.present?
query
end
# Differs from :paginate_by_max_id in that it gives the results immediately following min_id,
# whereas since_id gives the items with largest id, but with since_id as a cutoff.
# Results will be in ascending order by id.
- scope :paginate_by_min_id, ->(limit, min_id = nil) {
+ scope :paginate_by_min_id, ->(limit, min_id = nil, max_id = nil) {
query = reorder(arel_table[:id]).limit(limit)
query = query.where(arel_table[:id].gt(min_id)) if min_id.present?
+ query = query.where(arel_table[:id].lt(max_id)) if max_id.present?
query
}
def self.to_a_paginated_by_id(limit, options = {})
if options[:min_id].present?
- paginate_by_min_id(limit, options[:min_id]).reverse
+ paginate_by_min_id(limit, options[:min_id], options[:max_id]).reverse
else
paginate_by_max_id(limit, options[:max_id], options[:since_id]).to_a
end
protected
def from_redis(limit, max_id, since_id, min_id)
+ max_id = '+inf' if max_id.blank?
if min_id.blank?
- max_id = '+inf' if max_id.blank?
since_id = '-inf' if since_id.blank?
unhydrated = redis.zrevrangebyscore(key, "(#{max_id}", "(#{since_id}", limit: [0, limit], with_scores: true).map(&:first).map(&:to_i)
else
- unhydrated = redis.zrangebyscore(key, "(#{min_id}", '+inf', limit: [0, limit], with_scores: true).map(&:first).map(&:to_i)
+ unhydrated = redis.zrangebyscore(key, "(#{min_id}", "(#{max_id}", limit: [0, limit], with_scores: true).map(&:first).map(&:to_i)
end
Status.where(id: unhydrated).cache_ids