module PaginationRenderLogic::Digg

Provides logic for building digg style pagination First Previous 1 2 3 … 22 23 24 25 26 [27] 28 29 30 31 32 … 48 49 50 Next Last

Attributes

after_first_page[RW]
arround_current_page[RW]
current_page[RW]
first_page_section[RW]
last_page_section[RW]
middle_section[RW]
total_pages[RW]

Public Instance Methods

config(args = {}) click to toggle source
# File lib/pagination_render_logic/digg.rb, line 9
def config(args = {})
  @total_pages = args[:total_pages] || 0
  @after_first_page = args[:after_first_page] || 3
  @arround_current_page = args[:arround_current_page] || 5
  @current_page = args[:current_page] || 1
end
config!(args = {}) click to toggle source
# File lib/pagination_render_logic/digg.rb, line 16
def config!(args = {})
  config(args)
  setup
end
first_page() click to toggle source
# File lib/pagination_render_logic/digg.rb, line 54
def first_page
  1
end
has_first_page?() click to toggle source
# File lib/pagination_render_logic/digg.rb, line 50
def has_first_page?
  @current_page > 1
end
has_first_page_section?() click to toggle source
# File lib/pagination_render_logic/digg.rb, line 70
def has_first_page_section?
  not @first_page_section.empty?
end
has_last_page?() click to toggle source
# File lib/pagination_render_logic/digg.rb, line 42
def has_last_page?
  @current_page < @total_pages
end
has_last_page_section?() click to toggle source
# File lib/pagination_render_logic/digg.rb, line 74
def has_last_page_section?
  not @last_page_section.empty?
end
has_next_page?() click to toggle source
# File lib/pagination_render_logic/digg.rb, line 34
def has_next_page?
  @current_page < @total_pages
end
has_previous_page?() click to toggle source
# File lib/pagination_render_logic/digg.rb, line 58
def has_previous_page?
  @current_page > 1
end
last_page() click to toggle source
# File lib/pagination_render_logic/digg.rb, line 46
def last_page
  @total_pages
end
next_page() click to toggle source
# File lib/pagination_render_logic/digg.rb, line 38
def next_page
  @current_page + 1
end
previous_page() click to toggle source
# File lib/pagination_render_logic/digg.rb, line 62
def previous_page
  @current_page - 1
end
setup() click to toggle source
# File lib/pagination_render_logic/digg.rb, line 21
def setup
  @middle_section = ([current_page - arround_current_page, 1].max..[current_page + arround_current_page, total_pages].min).to_a
  @first_page_section = (1..[after_first_page, total_pages].min).to_a
  @last_page_section = ([1, total_pages - after_first_page + 1].max..total_pages).to_a
  if (total_pages / 2) > current_page
    merge_left
    merge_right
  else
    merge_right
    merge_left
  end
end

Private Instance Methods

merge_left() click to toggle source
# File lib/pagination_render_logic/digg.rb, line 80
def merge_left
  if (not @middle_section.empty?) and @middle_section.first - 1 <= @first_page_section.last
    @middle_section = @first_page_section | @middle_section
    @first_page_section.clear 
  end
end
merge_right() click to toggle source
# File lib/pagination_render_logic/digg.rb, line 87
def merge_right
  if (not @middle_section.empty?) and @middle_section.last + 1 >= @last_page_section.first
    @middle_section = @middle_section | @last_page_section
    @last_page_section.clear
  end
end