Module: Gitlab::Pagination::CursorBasedKeyset
- Defined in:
- lib/gitlab/pagination/cursor_based_keyset.rb
Constant Summary collapse
- SUPPORTED_ORDERING =
{ Group => { name: :asc }, AuditEvent => { id: :desc }, ::Ci::Build => { id: :desc }, ::Packages::BuildInfo => { id: :desc } }.freeze
- SUPPORTED_MULTI_ORDERING =
{ Group => { name: [:asc] }, AuditEvent => { id: [:desc] }, User => { id: [:asc, :desc], name: [:asc, :desc], username: [:asc, :desc], created_at: [:asc, :desc], updated_at: [:asc, :desc] }, ::Ci::Build => { id: [:desc] }, ::Packages::BuildInfo => { id: [:desc] } }.freeze
- ENFORCED_TYPES =
Relation types that are enforced in this list enforce the use of keyset pagination, thus erroring out requests made with offset pagination above a certain limit.
In many cases this could introduce a breaking change so enforcement is optional.
[Group].freeze
Class Method Summary collapse
- .available?(cursor_based_request_context, relation) ⇒ Boolean
- .available_for_type?(relation) ⇒ Boolean
- .enforced_for_type?(relation) ⇒ Boolean
Class Method Details
.available?(cursor_based_request_context, relation) ⇒ Boolean
43 44 45 46 |
# File 'lib/gitlab/pagination/cursor_based_keyset.rb', line 43 def self.available?(cursor_based_request_context, relation) available_for_type?(relation) && order_satisfied?(relation, cursor_based_request_context) end |
.available_for_type?(relation) ⇒ Boolean
35 36 37 38 39 40 41 |
# File 'lib/gitlab/pagination/cursor_based_keyset.rb', line 35 def self.available_for_type?(relation) if Feature.enabled?(:api_keyset_pagination_multi_order) SUPPORTED_MULTI_ORDERING.key?(relation.klass) else SUPPORTED_ORDERING.key?(relation.klass) end end |
.enforced_for_type?(relation) ⇒ Boolean
48 49 50 |
# File 'lib/gitlab/pagination/cursor_based_keyset.rb', line 48 def self.enforced_for_type?(relation) ENFORCED_TYPES.include?(relation.klass) end |