2016-11-15 16:56:29 +01:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								# frozen_string_literal: true
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2016-03-24 13:21:53 +01:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								module Paginable
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								  extend ActiveSupport::Concern
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								  included do
							 | 
						
					
						
							
								
									
										
										
										
											2017-05-01 23:31:02 +09:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    scope :paginate_by_max_id, ->(limit, max_id = nil, since_id = nil) {
							 | 
						
					
						
							
								
									
										
										
										
											2016-11-09 17:48:44 +01:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								      query = order(arel_table[:id].desc).limit(limit)
							 | 
						
					
						
							
								
									
										
										
										
											2017-06-08 20:24:28 +09:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								      query = query.where(arel_table[:id].lt(max_id)) if max_id.present?
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								      query = query.where(arel_table[:id].gt(since_id)) if since_id.present?
							 | 
						
					
						
							
								
									
										
										
										
											2016-10-02 22:35:27 +02:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								      query
							 | 
						
					
						
							
								
									
										
										
										
											2016-11-09 17:48:44 +01:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    }
							 | 
						
					
						
							
								
									
										
										
										
											2018-02-25 18:31:28 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    # 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.
							 | 
						
					
						
							
								
									
										
										
										
											2020-09-13 00:09:49 +09:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    scope :paginate_by_min_id, ->(limit, min_id = nil, max_id = nil) {
							 | 
						
					
						
							
								
									
										
										
										
											2018-02-25 18:31:28 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								      query = reorder(arel_table[:id]).limit(limit)
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								      query = query.where(arel_table[:id].gt(min_id)) if min_id.present?
							 | 
						
					
						
							
								
									
										
										
										
											2020-09-13 00:09:49 +09:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								      query = query.where(arel_table[:id].lt(max_id)) if max_id.present?
							 | 
						
					
						
							
								
									
										
										
										
											2018-02-25 18:31:28 -08:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								      query
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								    }
							 | 
						
					
						
							
								
									
										
										
										
											2018-09-28 02:23:45 +02:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								
							 | 
						
					
						
							
								
									
										
										
										
											2020-08-31 19:47:09 +09:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    def self.to_a_paginated_by_id(limit, options = {})
							 | 
						
					
						
							
								
									
										
										
										
											2018-09-28 02:23:45 +02:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								      if options[:min_id].present?
							 | 
						
					
						
							
								
									
										
										
										
											2020-09-13 00:09:49 +09:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        paginate_by_min_id(limit, options[:min_id], options[:max_id]).reverse
							 | 
						
					
						
							
								
									
										
										
										
											2018-09-28 02:23:45 +02:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								      else
							 | 
						
					
						
							
								
									
										
										
										
											2020-08-31 19:47:09 +09:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								        paginate_by_max_id(limit, options[:max_id], options[:since_id]).to_a
							 | 
						
					
						
							
								
									
										
										
										
											2018-09-28 02:23:45 +02:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								      end
							 | 
						
					
						
							
								
									
										
										
										
											2020-08-31 19:47:09 +09:00
										 
									 
								 
							 | 
							
								
									
										
									
								
							 | 
							
								
							 | 
							
							
								    end
							 | 
						
					
						
							
								
									
										
										
										
											2016-03-24 13:21:53 +01:00
										 
									 
								 
							 | 
							
								
							 | 
							
								
							 | 
							
							
								  end
							 | 
						
					
						
							| 
								
							 | 
							
								
							 | 
							
								
							 | 
							
							
								end
							 |