Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-01-10 18:07:47 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-01-10 18:07:47 +0300
commit8b1228b0d409d7751f01d9fb72ebfbbf62399486 (patch)
tree1b4126fe48d7666a90c0d7ee26230cf8379b6410 /lib/gitlab/pagination
parent96b0c1245c93585a8b0fe23e22306d32ff4e4905 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'lib/gitlab/pagination')
-rw-r--r--lib/gitlab/pagination/base.rb8
-rw-r--r--lib/gitlab/pagination/keyset.rb4
-rw-r--r--lib/gitlab/pagination/keyset/page.rb13
-rw-r--r--lib/gitlab/pagination/keyset/pager.rb23
-rw-r--r--lib/gitlab/pagination/keyset/request_context.rb2
5 files changed, 19 insertions, 31 deletions
diff --git a/lib/gitlab/pagination/base.rb b/lib/gitlab/pagination/base.rb
index 90fa1f8d1ec..6402b9c0f76 100644
--- a/lib/gitlab/pagination/base.rb
+++ b/lib/gitlab/pagination/base.rb
@@ -3,6 +3,14 @@
module Gitlab
module Pagination
class Base
+ def paginate(relation)
+ raise NotImplementedError
+ end
+
+ def finalize(records)
+ # Optional: Called with the actual set of records
+ end
+
private
def per_page
diff --git a/lib/gitlab/pagination/keyset.rb b/lib/gitlab/pagination/keyset.rb
index 5bd45fa9b56..8692f30e165 100644
--- a/lib/gitlab/pagination/keyset.rb
+++ b/lib/gitlab/pagination/keyset.rb
@@ -3,10 +3,6 @@
module Gitlab
module Pagination
module Keyset
- def self.paginate(request_context, relation)
- Gitlab::Pagination::Keyset::Pager.new(request_context).paginate(relation)
- end
-
def self.available?(request_context, relation)
order_by = request_context.page.order_by
diff --git a/lib/gitlab/pagination/keyset/page.rb b/lib/gitlab/pagination/keyset/page.rb
index 735f54faf0f..8070512f973 100644
--- a/lib/gitlab/pagination/keyset/page.rb
+++ b/lib/gitlab/pagination/keyset/page.rb
@@ -11,14 +11,13 @@ module Gitlab
# Maximum number of records for a page
MAXIMUM_PAGE_SIZE = 100
- attr_accessor :lower_bounds, :end_reached
+ attr_accessor :lower_bounds
attr_reader :order_by
- def initialize(order_by: {}, lower_bounds: nil, per_page: DEFAULT_PAGE_SIZE, end_reached: false)
+ def initialize(order_by: {}, lower_bounds: nil, per_page: DEFAULT_PAGE_SIZE)
@order_by = order_by.symbolize_keys
@lower_bounds = lower_bounds&.symbolize_keys
@per_page = per_page
- @end_reached = end_reached
end
# Number of records to return per page
@@ -28,17 +27,11 @@ module Gitlab
[@per_page, MAXIMUM_PAGE_SIZE].min
end
- # Determine whether this page indicates the end of the collection
- def end_reached?
- @end_reached
- end
-
# Construct a Page for the next page
# Uses identical order_by/per_page information for the next page
- def next(lower_bounds, end_reached)
+ def next(lower_bounds)
dup.tap do |next_page|
next_page.lower_bounds = lower_bounds&.symbolize_keys
- next_page.end_reached = end_reached
end
end
end
diff --git a/lib/gitlab/pagination/keyset/pager.rb b/lib/gitlab/pagination/keyset/pager.rb
index 99b125cc2a0..6eaa7f3ba87 100644
--- a/lib/gitlab/pagination/keyset/pager.rb
+++ b/lib/gitlab/pagination/keyset/pager.rb
@@ -14,27 +14,20 @@ module Gitlab
# Validate assumption: The last two columns must match the page order_by
validate_order!(relation)
- # This performs the database query and retrieves records
- # We retrieve one record more to check if we have data beyond this page
- all_records = relation.limit(page.per_page + 1).to_a # rubocop: disable CodeReuse/ActiveRecord
-
- records_for_page = all_records.first(page.per_page)
-
- # If we retrieved more records than belong on this page,
- # we know there's a next page
- there_is_more = all_records.size > records_for_page.size
- apply_headers(records_for_page.last, there_is_more)
+ relation.limit(page.per_page) # rubocop: disable CodeReuse/ActiveRecord
+ end
- records_for_page
+ def finalize(records)
+ apply_headers(records.last)
end
private
- def apply_headers(last_record_in_page, there_is_more)
- end_reached = last_record_in_page.nil? || !there_is_more
- lower_bounds = last_record_in_page&.slice(page.order_by.keys)
+ def apply_headers(last_record_in_page)
+ return unless last_record_in_page
- next_page = page.next(lower_bounds, end_reached)
+ lower_bounds = last_record_in_page&.slice(page.order_by.keys)
+ next_page = page.next(lower_bounds)
request.apply_headers(next_page)
end
diff --git a/lib/gitlab/pagination/keyset/request_context.rb b/lib/gitlab/pagination/keyset/request_context.rb
index aeaed7587b3..8c8138b3076 100644
--- a/lib/gitlab/pagination/keyset/request_context.rb
+++ b/lib/gitlab/pagination/keyset/request_context.rb
@@ -68,8 +68,6 @@ module Gitlab
end
def pagination_links(next_page)
- return if next_page.end_reached?
-
%(<#{page_href(next_page)}>; rel="next")
end