class Pagy::Keyset
def initialize(set, **vars)
def initialize(set, **vars) default = DEFAULT.slice(:limit, :page_param, # from pagy :headers, # from headers extra :jsonapi, # from jsonapi extra :limit_param, :limit_max, :limit_extra) # from limit_extra assign_vars({ **default, page: nil }, vars) assign_limit @set = set @page = @vars[:page] @keyset = extract_keyset raise InternalError, 'the set must be ordered' if @keyset.empty? return unless @page latest = JSON.parse(B64.urlsafe_decode(@page)).transform_keys(&:to_sym) @latest = @vars[:typecast_latest]&.(latest) || typecast_latest(latest) raise InternalError, 'page and keyset are not consistent' \ unless @latest.keys == @keyset.keys end