class JSOM::Pagination::Links
Constants
- DEFAULT_PAGE_SIZE
Attributes
next[R]
page[R]
prev[R]
self[R]
total_pages[R]
url[R]
Public Class Methods
new(page:, url:, total_pages:)
click to toggle source
# File lib/jsom/pagination/links.rb, line 34 def initialize(page:, url:, total_pages:) @url = parse_url(url) @page = page @total_pages = total_pages generate_links end
Public Instance Methods
first()
click to toggle source
# File lib/jsom/pagination/links.rb, line 20 def first @first || generate_url(1) end
last()
click to toggle source
# File lib/jsom/pagination/links.rb, line 24 def last @last || generate_url(total_pages) end
to_h()
click to toggle source
# File lib/jsom/pagination/links.rb, line 10 def to_h { first: @first, prev: @prev, self: @self, next: @next, last: @last }.reject { |_key, value| value.nil? } end
Private Instance Methods
generate_links()
click to toggle source
# File lib/jsom/pagination/links.rb, line 52 def generate_links if page.number > 1 @first = generate_url(1) @prev = generate_url(page.number - 1) end @self = generate_url(page.number) return unless page.number < total_pages @next = generate_url(page.number + 1) @last = generate_url(total_pages) end
generate_url(page_number)
click to toggle source
# File lib/jsom/pagination/links.rb, line 65 def generate_url(page_number) separator = url.to_s.include?('?') ? '&' : '?' [url.to_s, url_params(page_number)].reject(&:empty?).join(separator) end
include_page?(page_number)
click to toggle source
# File lib/jsom/pagination/links.rb, line 98 def include_page?(page_number) page_number > 1 end
include_per_page?()
click to toggle source
# File lib/jsom/pagination/links.rb, line 94 def include_per_page? page.size != DEFAULT_PAGE_SIZE end
parse_url(url)
click to toggle source
# File lib/jsom/pagination/links.rb, line 41 def parse_url(url) uri = Addressable::URI.parse(url) url_params = Rack::Utils.parse_nested_query( uri.query ).delete_if { |key, _value| key == 'page' } uri.query = to_query(url_params) uri.query = nil if uri.query.empty? uri end
to_query(obj, namespace = '')
click to toggle source
# File lib/jsom/pagination/links.rb, line 78 def to_query(obj, namespace = '') query = obj.collect do |key, value| if value.is_a?(Hash) to_query(value, namespace.empty? ? key : "#{namespace}[#{key}]") else if namespace.empty? [key, value].join('=') else ["#{namespace}[#{key}]", value].join('=') end end end.compact query.join('&') end
url_params(page_number)
click to toggle source
# File lib/jsom/pagination/links.rb, line 70 def url_params(page_number) url_params = {} url_params[:page] = {} if include_per_page? || include_page?(page_number) url_params[:page][:number] = page_number if include_page?(page_number) url_params[:page][:size] = page.size if include_per_page? to_query(url_params) end