class PageCursorResolver
Constants
- MAX_CURSOR_COUNT
Attributes
context[R]
object[R]
Public Class Methods
new(object, context)
click to toggle source
# File lib/page_cursor_resolver.rb, line 10 def initialize(object, context) @object = object @context = context end
Public Instance Methods
page_cursors()
click to toggle source
# File lib/page_cursor_resolver.rb, line 15 def page_cursors return if total_pages <= 1 { around: around_cursors, first: first_cursor, last: last_cursor, previous: previous_cursor }.compact end
total_count()
click to toggle source
# File lib/page_cursor_resolver.rb, line 33 def total_count object_items.size end
total_pages()
click to toggle source
# File lib/page_cursor_resolver.rb, line 26 def total_pages return 0 if object_items.size.zero? return 1 if nodes_per_page.nil? (object_items.size.to_f / nodes_per_page).ceil end
Private Instance Methods
around_cursors()
click to toggle source
# File lib/page_cursor_resolver.rb, line 45 def around_cursors around_page_numbers.map { |page_num| page_cursor(page_num) } end
around_page_numbers()
click to toggle source
# File lib/page_cursor_resolver.rb, line 82 def around_page_numbers # rubocop:disable Metrics/AbcSize if total_pages <= MAX_CURSOR_COUNT (1..total_pages).to_a elsif current_page <= 3 (1..4).to_a elsif current_page >= total_pages - 2 ((total_pages - 3)..total_pages).to_a else [current_page - 1, current_page, current_page + 1] end end
current_page()
click to toggle source
# File lib/page_cursor_resolver.rb, line 78 def current_page nodes_before / nodes_per_page + 1 end
first_cursor()
click to toggle source
# File lib/page_cursor_resolver.rb, line 49 def first_cursor exceeds_max_cursor_count = total_pages > MAX_CURSOR_COUNT include_first_cursor = exceeds_max_cursor_count && !around_page_numbers.include?(1) return unless include_first_cursor page_cursor(1) end
last_cursor()
click to toggle source
# File lib/page_cursor_resolver.rb, line 58 def last_cursor exceeds_max_cursor_count = total_pages > MAX_CURSOR_COUNT include_last_cursor = exceeds_max_cursor_count && !around_page_numbers.include?(total_pages) return unless include_last_cursor page_cursor(total_pages) end
node_offset(node)
click to toggle source
# File lib/page_cursor_resolver.rb, line 102 def node_offset(node) # this was previously accomplished by calling a private method: # object.send(:offset_from_cursor, object.cursor_from_node(object.edge_nodes.first)) object_items.index(node) + 1 end
nodes_after()
click to toggle source
# File lib/page_cursor_resolver.rb, line 98 def nodes_after node_offset(object.edge_nodes.last) end
nodes_before()
click to toggle source
# File lib/page_cursor_resolver.rb, line 94 def nodes_before node_offset(object.edge_nodes.first) - 1 end
nodes_per_page()
click to toggle source
# File lib/page_cursor_resolver.rb, line 108 def nodes_per_page object.first || object.last end
object_items()
click to toggle source
# File lib/page_cursor_resolver.rb, line 39 def object_items return object.nodes unless object.respond_to?(:items) object.items end
page_cursor(page_number)
click to toggle source
# File lib/page_cursor_resolver.rb, line 74 def page_cursor(page_number) PageCursor.as_hash(current_page, page_number, nodes_per_page) end
previous_cursor()
click to toggle source
# File lib/page_cursor_resolver.rb, line 67 def previous_cursor include_previous_cursor = current_page > 1 return unless include_previous_cursor page_cursor(current_page - 1) end