class RailsPaginate::Collection

method modules

Attributes

array_or_relation[R]
current_page[R]
pages[R]
per_page[R]

Public Class Methods

new(array_or_relation, page = nil, per_page = nil) click to toggle source

initialize collection

# File lib/rails_paginate/collection.rb, line 7
def initialize(array_or_relation, page = nil, per_page = nil)
  # validate
  raise ArgumentError, "per_page is not valid" if not per_page.nil? and per_page <= 0 
  raise ArgumentError, "result is not an array or relation" unless array_or_relation.respond_to? :count

  # array_or_relation
  @array_or_relation = array_or_relation

  # save meta data
  @per_page          = per_page || relation_per_page || RailsPaginate.per_page

  # load page with result
  load_page(page) unless page.nil?
end

Public Instance Methods

first_page() click to toggle source

first page

# File lib/rails_paginate/collection.rb, line 74
def first_page
  1
end
first_page?() click to toggle source

is current page the first page?

# File lib/rails_paginate/collection.rb, line 89
def first_page?
  current_page == first_page
end
last_page() click to toggle source

last page

# File lib/rails_paginate/collection.rb, line 79
def last_page
  pages
end
last_page?() click to toggle source

is current page the last page?

# File lib/rails_paginate/collection.rb, line 84
def last_page?
  current_page == last_page
end
load_page(page) click to toggle source

switch page

# File lib/rails_paginate/collection.rb, line 28
def load_page(page)
  # jump to correct page
  page = page.to_i if page.is_a? String
  page = first_page unless page.is_a? Fixnum
  page = first_page unless page > 0
  page = last_page if page > pages

  # save page
  @current_page = page

  # load result
  load_result
end
load_result() click to toggle source

load result from input array_or_relation to internal array

# File lib/rails_paginate/collection.rb, line 43
def load_result
  if array_or_relation.is_a? Array
    result = array_or_relation[offset..(offset + per_page - 1)]
  else
    result = array_or_relation.limit(per_page).offset(offset).all
  end

  self.replace result.nil? ? [] : result
end
need_paginate?() click to toggle source

need paginate

# File lib/rails_paginate/collection.rb, line 69
def need_paginate?
  total > per_page
end
next_page() click to toggle source

next page

# File lib/rails_paginate/collection.rb, line 94
def next_page
  current_page < pages ? (current_page + 1) : nil
end
offset() click to toggle source

get offset

# File lib/rails_paginate/collection.rb, line 64
def offset
  (current_page - 1) * per_page
end
previous_page() click to toggle source

previous page

# File lib/rails_paginate/collection.rb, line 99
def previous_page
  current_page > 1 ? (current_page - 1) : nil
end
relation_per_page() click to toggle source

check if the relation has a per_page

# File lib/rails_paginate/collection.rb, line 23
def relation_per_page
  (array_or_relation.respond_to?(:per_page) ? array_or_relation.per_page : nil) unless array_or_relation.is_a? Array
end
total() click to toggle source

total count of array or relation

# File lib/rails_paginate/collection.rb, line 54
def total
  @total ||= array_or_relation.count
end