class Pagy
def series(size: @vars[:size], **_)
def series(size: @vars[:size], **_) raise VariableError.new(self, :size, 'to be an Integer >= 0', size) \ unless size.is_a?(Integer) && size >= 0 return [] if size.zero? [].tap do |series| if size >= @last series.push(*1..@last) else left = ((size - 1) / 2.0).floor # left half might be 1 page shorter for even size start = if @page <= left # beginning pages 1 elsif @page > (@last - size + left) # end pages @last - size + 1 else # intermediate pages @page - left end series.push(*start...start + size) # Set first and last pages plus gaps when needed, respecting the size if vars[:ends] && size >= 7 series[0] = 1 series[1] = :gap unless series[1] == 2 series[-2] = :gap unless series[-2] == @last - 1 series[-1] = @last end end series[series.index(@page)] = @page.to_s end end