Рассчитать значение смещения, начиная с 0 для нумерации страниц - PullRequest
0 голосов
/ 30 марта 2020

Без необходимости использовать какой-либо драгоценный камень, я разбиваю свои извлеченные данные. В API я возвращаю ссылки ha sh, которые должны возвращать предыдущие, следующие, первые, последние и собственные значения

Данные возвращаются, если params [: offset] = 0, где limit = 10, затем смещение будет

 offset = params[:offset].to_i * limit
 data = slice(offset, limit)

Теперь для расчета ссылок:

class PaginationMetaGenerator

DEFAULT_OFFSET = 0
DEFAULT_LIMIT = 10

def initialize(request:, count:)
  @url = request.base_url + request.path
  @offset = request.params[:offset].to_i || DEFAULT_OFFSET
  @limit = request.params[:limit].to_i || DEFAULT_LIMIT
  @count = count
  @hash = {}
end

def call
  if @offset > 0 && @offset <= @limit
    @hash[:first] = generate_url(0)
    @hash[:prev] = generate_url(@offset - 1)
  end
  @hash[:self] = generate_url(@offset)
  if @offset < @count && @limit < @count
    @hash[:next] = generate_url(@offset + 1)
    @hash[:last] = generate_url(@count)
  end
  @hash
end

private

def generate_url(offset)
  [@url, url_params(offset)].join('?')
end

def url_params(offset)
  url_params = {}
  url_params[:offset] = offset if include_page?(offset)
  url_params[:limit] = @limit if include_per_page?
  url_params.to_query
end

def include_per_page?
  @limit != 0 
end

def include_page?(offset)
  offset <= @count
end

end

Но следующее и последнее возвращенное значение неверно. Я довольно тупой в расчете здесь, и мне нужна помощь в расчете значений

...