Sha256: ae9bbcfcedc4ed7aaa7587e91c1885e04b05511c5d7617c6c29c2f8f711bc75d

Contents?: true

Size: 1.96 KB

Versions: 1

Compression:

Stored size: 1.96 KB

Contents

module Kaminari
  DEFAULT_PER_PAGE = 25 unless defined? ::Kaminari::DEFAULT_PER_PAGE

  module ActiveRecordExtension
    extend ActiveSupport::Concern

    included do
      def self.inherited(kls) #:nodoc:
        # TERRIBLE HORRIBLE NO GOOD VERY BAD HACK: inheritable_attributes is not yet set here on AR 3.0
        unless kls.default_scoping
          new_inheritable_attributes = Hash[inheritable_attributes.map do |key, value|
            [key, value.duplicable? ? value.dup : value]
          end]
          kls.instance_variable_set('@inheritable_attributes', new_inheritable_attributes)
        end

        kls.class_eval do
          # Fetch the values at the specified page number
          #   Model.page(5)
          scope :page, lambda {|num|
            limit(default_per_page).offset(default_per_page * ([num.to_i, 1].max - 1))
          } do
            # Specify the <tt>per_page</tt> value for the preceding <tt>page</tt> scope
            #   Model.page(3).per(10)
            def per(num)
              if (n = num.to_i) <= 0
                self
              else
                limit(n).offset(offset_value / limit_value * n)
              end
            end

            # Total number of pages
            def num_pages
              (except(:offset, :limit).count.to_f / limit_value).ceil
            end

            # Current page number
            def current_page
              (offset_value / limit_value) + 1
            end
          end

          # Overrides the default per_page value per model
          #   class Article < ActiveRecord::Base
          #     paginates_per 10
          #   end
          def self.paginates_per(val)
            @_default_per_page = val
          end

          # This model's default per_page value
          # returns 25 unless explicitly overridden via <tt>paginates_per</tt>
          def self.default_per_page
            @_default_per_page || Kaminari::DEFAULT_PER_PAGE
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
kaminari-0.9.13 lib/kaminari/active_record_extension.rb