class RsPaginator::Paginator
Public Class Methods
new(objects, context, extra_params: {})
click to toggle source
# File lib/rs_paginator/paginator.rb, line 10 def initialize(objects, context, extra_params: {}) @objects = objects @context = context @total_pages = objects.total_pages @current_page = objects.page @extra_params = extra_params end
Public Instance Methods
render()
click to toggle source
# File lib/rs_paginator/paginator.rb, line 18 def render content_tag(:ul, class: %w[pagination pagination-sm]) do prev_link + page_links + next_link end end
Private Instance Methods
gap()
click to toggle source
# File lib/rs_paginator/paginator.rb, line 58 def gap content_tag(:li, @context.link_to(raw('⋯'), '#'), class: 'disabled') end
next_link()
click to toggle source
# File lib/rs_paginator/paginator.rb, line 38 def next_link last = @current_page == @total_pages content_tag(:li, class: last ? 'disabled' : nil) do url = last ? '#' : params(page: @current_page + 1) @context.link_to(raw('»'), url) end end
page_link(i)
click to toggle source
# File lib/rs_paginator/paginator.rb, line 50 def page_link(i) current = i == @current_page content_tag(:li, class: current ? 'active' : nil) do url = current ? '#' : params(page: i) @context.link_to(i, url) end end
page_links()
click to toggle source
# File lib/rs_paginator/paginator.rb, line 46 def page_links raw visible_pages.map { |i| i ? page_link(i) : gap }.join end
params(h = {})
click to toggle source
# File lib/rs_paginator/paginator.rb, line 26 def params(h = {}) @context.params.merge(@extra_params).merge(h) end
prev_link()
click to toggle source
# File lib/rs_paginator/paginator.rb, line 30 def prev_link first = @current_page == 1 content_tag(:li, class: first ? 'disabled' : nil) do url = first ? '#' : params(page: @current_page - 1) @context.link_to(raw('«'), url) end end
visible_pages()
click to toggle source
# File lib/rs_paginator/paginator.rb, line 62 def visible_pages if @total_pages <= 11 1..@total_pages elsif @current_page <= 6 (1..8).to_a + [nil, @total_pages-1, @total_pages] elsif @current_page > @total_pages - 6 [1, 2, nil] + ((@total_pages - 8)..@total_pages).to_a else [1, 2, nil] + ((@current_page - 2)..(@current_page + 2)).to_a + [nil, @total_pages-1, @total_pages] end end