Class: PackAPI::Pagination::PaginatorCursor

Inherits:
Object
  • Object
show all
Defined in:
lib/pack_api/pagination/paginator_cursor.rb

Defined Under Namespace

Classes: SqlLiteralSerializer

Constant Summary collapse

MAX_LENGTH =
2048
CACHE_KEY_PREFIX =
'paginator_cursor'
CACHE_EXPIRES_IN =
8.hours

Class Method Summary collapse

Class Method Details

.create(query:, sort:, total_items:, offset:, per_page:, metadata: nil) ⇒ Object



10
11
12
13
14
15
16
17
18
19
# File 'lib/pack_api/pagination/paginator_cursor.rb', line 10

def create(query:, sort:, total_items:, offset:, per_page:, metadata: nil)
  sort_ready_to_serialize = SqlLiteralSerializer.serialize(sort)
  cursor_params = { query:, sort: sort_ready_to_serialize, total_items:, offset:, per_page:, metadata: }
  token = OpaqueTokenV2.create(cursor_params)
  return token if token.size <= MAX_LENGTH

  cache_key = generate_cache_key
  Rails.cache.write(cache_key, cursor_params, expires_in: CACHE_EXPIRES_IN)
  OpaqueTokenV2.create(cache_key)
end

.parse(encoded) ⇒ Object



21
22
23
24
25
26
# File 'lib/pack_api/pagination/paginator_cursor.rb', line 21

def parse(encoded)
  decoded = parse_opaque_token(encoded)
  decoded = decode_cache_key(decoded) if decoded.is_a?(String)
  decoded[:sort] = deserialize_sort_args(decoded)
  decoded
end