Module: Responders::PaginateResponder

Defined in:
lib/responders/paginate_responder.rb

Instance Method Summary collapse

Instance Method Details

#max_per_pageObject



40
41
42
43
44
# File 'lib/responders/paginate_responder.rb', line 40

def max_per_page
  @max_per_page ||= controller.max_per_page if controller.respond_to? :max_per_page
  @max_per_page ||= 50
  @max_per_page
end

#pageObject



17
18
19
20
21
22
23
24
# File 'lib/responders/paginate_responder.rb', line 17

def page
  @page ||= controller.page if controller.respond_to? :page
  @page ||= controller.params[:page].try(:to_i)
  @page ||= 1
  @page
rescue
  1
end

#per_pageObject



31
32
33
34
35
36
37
38
# File 'lib/responders/paginate_responder.rb', line 31

def per_page
  @per_page ||= controller.per_page if controller.respond_to? :per_page
  @per_page ||= controller.params[:per_page].try(:to_i)
  @per_page = [[1, @per_page].max, max_per_page].min
  @per_page
rescue
  max_per_page
end

#to_formatObject



4
5
6
7
8
9
10
11
12
13
14
15
# File 'lib/responders/paginate_responder.rb', line 4

def to_format
  if get? && resource.respond_to?(:paginate)
    @resource = resource.paginate :page => self.page, :per_page => self.per_page

    controller.response.link(controller.url_for(request.params.merge(:page => 1)), :rel => "first")
    controller.response.link(controller.url_for(request.params.merge(:page => page - 1)), :rel => "prev") if page > 1
    controller.response.link(controller.url_for(request.params.merge(:page => page + 1)), :rel => "next") if total_pages && page < total_pages
    controller.response.link(controller.url_for(request.params.merge(:page => total_pages)), :rel => "last") if total_pages
    controller.response.headers["X-Total-Pages"] = total_pages if total_pages
  end
  super
end

#total_pagesObject



26
27
28
29
# File 'lib/responders/paginate_responder.rb', line 26

def total_pages
  @total_pages ||= resource.total_pages if resource.respond_to? :total_pages
  @total_pages
end