module SimplePaginate::ActiveRecordModelExtension

Public Class Methods

paginate(options = {}) click to toggle source
# File lib/simple_paginate/models/active_record_model_extension.rb, line 6
def self.paginate(options = {})
  options = options.dup
  page = (options.delete(:page) || 1).to_i
  per_page = (options.delete(:per_page) || SimplePaginate.config.default_per_page).to_i

  offset(per_page * (page - 1)).limit(per_page + 1).extending do
    def current_page
      (offset_value / (limit_value - 1)) + 1
    end

    def first_page?
      current_page == 1
    end

    def last_page?
      actual_records_length < limit_value
    end

    def actual_records_length
      loaded? ? @actual_records.length : count(:all)
    end

    private

    def exec_queries
      @actual_records = super
      @records = if @actual_records.length > 1 && @actual_records.length == limit_value
                   @actual_records.first(limit_value - 1)
                 else
                   @actual_records
                 end
      @records
    end
  end
end

Public Instance Methods

actual_records_length() click to toggle source
# File lib/simple_paginate/models/active_record_model_extension.rb, line 24
def actual_records_length
  loaded? ? @actual_records.length : count(:all)
end
current_page() click to toggle source
# File lib/simple_paginate/models/active_record_model_extension.rb, line 12
def current_page
  (offset_value / (limit_value - 1)) + 1
end
exec_queries() click to toggle source
Calls superclass method
# File lib/simple_paginate/models/active_record_model_extension.rb, line 30
def exec_queries
  @actual_records = super
  @records = if @actual_records.length > 1 && @actual_records.length == limit_value
               @actual_records.first(limit_value - 1)
             else
               @actual_records
             end
  @records
end
first_page?() click to toggle source
# File lib/simple_paginate/models/active_record_model_extension.rb, line 16
def first_page?
  current_page == 1
end
last_page?() click to toggle source
# File lib/simple_paginate/models/active_record_model_extension.rb, line 20
def last_page?
  actual_records_length < limit_value
end