class HALPresenter::Pagination

Attributes

collection[RW]
self_uri[RW]
serialized[RW]

Public Class Methods

included(base) click to toggle source
# File lib/hal_presenter/pagination.rb, line 7
def self.included(base)
  base.extend ClassMethods
end
new(serialized, collection) click to toggle source
# File lib/hal_presenter/pagination.rb, line 54
def initialize(serialized, collection)
  @serialized = serialized
  @collection = collection
  @self_uri = Uri.parse serialized.dig(:_links, :self, :href)
end
paginate!(serialized, collection) click to toggle source
# File lib/hal_presenter/pagination.rb, line 50
def self.paginate!(serialized, collection)
  new(serialized, collection).call
end

Public Instance Methods

call() click to toggle source
# File lib/hal_presenter/pagination.rb, line 60
def call
  return unless should_paginate?
  add_query_to_self
  add_prev_link
  add_next_link
end

Private Instance Methods

add_query_to_self() click to toggle source
# File lib/hal_presenter/pagination.rb, line 83
def add_query_to_self
  serialized[:_links][:self][:href] = (self_uri + query(current_page)).to_s
end
current_page() click to toggle source

Supported by Sequel, Kaminari and will_paginate

# File lib/hal_presenter/pagination.rb, line 102
def current_page
  collection.respond_to?(:current_page) && collection.current_page
end
next_page() click to toggle source

Supported by Sequel, Kaminari and will_paginate

# File lib/hal_presenter/pagination.rb, line 112
def next_page
  collection.respond_to?(:next_page) && collection.next_page
end
per_page() click to toggle source
# File lib/hal_presenter/pagination.rb, line 116
def per_page
  if collection.respond_to?(:page_size)
    collection.page_size # Supported by Sequel
  elsif collection.respond_to?(:max_per_page)
    collection.max_per_page # Supported by Kaminari
  elsif collection.respond_to?(:per_page)
    collection.per_page # Supported by will_paginate
  end
end
prev_page() click to toggle source
# File lib/hal_presenter/pagination.rb, line 106
def prev_page
  return collection.prev_page if collection.respond_to?(:prev_page) # Sequel and Kaminari
  return collection.previous_page if collection.respond_to?(:previous_page) # will_paginate
end
query(page) click to toggle source
# File lib/hal_presenter/pagination.rb, line 75
def query(page)
  return {} unless page
  {
    page: page,
    per_page: per_page,
  }
end
should_paginate?() click to toggle source
# File lib/hal_presenter/pagination.rb, line 71
def should_paginate?
  self_uri && current_page
end