Sha256: b75071eac8846d1897eb73d3b01e8d0d2f6dac123e376485d17c00fe958b6ba0

Contents?: true

Size: 1.3 KB

Versions: 22

Compression:

Stored size: 1.3 KB

Contents

require 'delegate'
require 'forwardable'

module WillPaginate
  # a module that page number exceptions are tagged with
  module InvalidPage; end

  # integer representing a page number
  class PageNumber < DelegateClass(Integer)
    # a value larger than this is not supported in SQL queries
    BIGINT = 9223372036854775807

    extend Forwardable

    def initialize(value, name)
      value = Integer(value)
      if 'offset' == name ? (value < 0 or value > BIGINT) : value < 1
        raise RangeError, "invalid #{name}: #{value.inspect}"
      end
      @name = name
      super(value)
    rescue ArgumentError, TypeError, RangeError => error
      error.extend InvalidPage
      raise error
    end

    alias_method :to_i, :__getobj__

    def inspect
      "#{@name} #{to_i}"
    end

    def to_offset(per_page)
      PageNumber.new((to_i - 1) * per_page.to_i, 'offset')
    end

    def kind_of?(klass)
      super || to_i.kind_of?(klass)
    end
    alias is_a? kind_of?
  end

  # Ultrahax: makes `Fixnum === current_page` checks pass
  Numeric.extend Module.new {
    def ===(obj)
      obj.instance_of? PageNumber or super
    end
  }

  # An idemptotent coercion method
  def self.PageNumber(value, name = 'page')
    case value
    when PageNumber then value
    else PageNumber.new(value, name)
    end
  end
end

Version data entries

22 entries across 22 versions & 4 rubygems

Version Path
will_paginate-3.0.12 lib/will_paginate/page_number.rb
will_paginate-3.1.5 lib/will_paginate/page_number.rb
will_paginate-3.0.11 lib/will_paginate/page_number.rb
will_paginate-3.1.3 lib/will_paginate/page_number.rb
will_paginate-3.0.10 lib/will_paginate/page_number.rb
will_paginate-3.0.9 lib/will_paginate/page_number.rb
will_paginate-3.1.2 lib/will_paginate/page_number.rb
will_paginate-3.1.1 lib/will_paginate/page_number.rb
will_paginate-3.0.8 lib/will_paginate/page_number.rb
will_paginate-3.1.0 lib/will_paginate/page_number.rb
will_paginate_seo-3.0.4 lib/will_paginate/page_number.rb
will_paginate-3.0.7 lib/will_paginate/page_number.rb
will_paginate-3.0.6 lib/will_paginate/page_number.rb
hobo_will_paginate-2.1.1 lib/will_paginate/page_number.rb
hobo_will_paginate-2.1.0 lib/will_paginate/page_number.rb
will_paginate-3.0.5 lib/will_paginate/page_number.rb
hobo-will_paginate-3.0.4.hobo lib/will_paginate/page_number.rb
will_paginate-3.0.4 lib/will_paginate/page_number.rb
will_paginate-3.0.3 lib/will_paginate/page_number.rb
will_paginate-3.0.2 lib/will_paginate/page_number.rb