class PragmaticSerializer::PaginationJSON

Attributes

limit[R]
offset[R]
pagination_evaluator[R]
total[R]

Public Class Methods

new(limit:, offset:, total: nil, pagination_evaluator:) click to toggle source
# File lib/pragmatic_serializer/pagination_json.rb, line 5
def initialize(limit:, offset:, total: nil, pagination_evaluator:)
  @limit = limit
  @offset = offset
  @total = total
  @pagination_evaluator = pagination_evaluator
end

Public Instance Methods

as_json() click to toggle source
# File lib/pragmatic_serializer/pagination_json.rb, line 12
def as_json
  h = {
    limit: limit,
    offset: offset,
    href: href,
    first: first,
    next: self.next,
    prev: prev,
  }
  h.merge!(total: total) if total
  h
end
first() click to toggle source
# File lib/pragmatic_serializer/pagination_json.rb, line 25
def first
  pagination_evaluator.call(limit: limit, offset: 0)
end
href() click to toggle source
# File lib/pragmatic_serializer/pagination_json.rb, line 44
def href
  pagination_evaluator.call(limit: limit, offset: offset)
end
next() click to toggle source
# File lib/pragmatic_serializer/pagination_json.rb, line 29
def next
  show_next = unless total.nil?
     total > (offset + limit)
  else
    true
  end

  pagination_evaluator.call(limit: limit, offset: offset + limit) if show_next
end
prev() click to toggle source
# File lib/pragmatic_serializer/pagination_json.rb, line 39
def prev
  prev_offset = offset < limit ? 0 : offset - limit
  pagination_evaluator.call(limit: limit, offset: prev_offset) if offset > 0
end