Sha256: 89838e7a1342e2e89bad6792ae54b1710eb9ad4b2be3523a6b1fd698ff1952ba
Contents?: true
Size: 1.43 KB
Versions: 3
Compression:
Stored size: 1.43 KB
Contents
# frozen_string_literal: true module SearchObject module Plugin module Paging def self.included(base) base.extend ClassMethods end attr_reader :page, :per_page def initialize(options = {}) @page = [options[:page].to_i, 0].max @per_page = self.class.calculate_per_page options[:per_page] super options end private def fetch_results apply_paging super end def apply_paging(scope) scope.limit(per_page).offset(([page, 1].max - 1) * per_page) end module ClassMethods def per_page(number) raise InvalidNumberError.new('Per page', number) unless number.positive? config[:per_page] = number end def min_per_page(number) raise InvalidNumberError.new('Min per page', number) unless number.positive? config[:min_per_page] = number end def max_per_page(number) raise InvalidNumberError.new('Max per page', number) unless number.positive? config[:max_per_page] = number end # :api: private def calculate_per_page(given) per_page = (given || config[:per_page] || 25).to_i.abs per_page = [per_page, config[:max_per_page]].min if config[:max_per_page] per_page = [per_page, config[:min_per_page]].max if config[:min_per_page] per_page end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
search_object-1.2.5 | lib/search_object/plugin/paging.rb |
search_object-1.2.4 | lib/search_object/plugin/paging.rb |
search_object-1.2.3 | lib/search_object/plugin/paging.rb |