Return only limited pagination headers for search API endpoints
This commit is contained in:
parent
7381944565
commit
1b2400b529
|
@ -43,7 +43,7 @@ class SearchService
|
|||
end
|
||||
|
||||
def search_objects
|
||||
@search_objects ||= search_results.objects(scope, params[:page], params[:without_counts])
|
||||
@search_objects ||= search_results.objects(scope, params[:page])
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -12,13 +12,16 @@ module API
|
|||
private
|
||||
|
||||
def add_pagination_headers(paginated_data)
|
||||
header 'X-Total', paginated_data.total_count.to_s
|
||||
header 'X-Total-Pages', total_pages(paginated_data).to_s
|
||||
header 'X-Per-Page', paginated_data.limit_value.to_s
|
||||
header 'X-Page', paginated_data.current_page.to_s
|
||||
header 'X-Next-Page', paginated_data.next_page.to_s
|
||||
header 'X-Prev-Page', paginated_data.prev_page.to_s
|
||||
header 'Link', pagination_links(paginated_data)
|
||||
|
||||
return if data_without_counts?(paginated_data)
|
||||
|
||||
header 'X-Total', paginated_data.total_count.to_s
|
||||
header 'X-Total-Pages', total_pages(paginated_data).to_s
|
||||
end
|
||||
|
||||
def pagination_links(paginated_data)
|
||||
|
@ -37,8 +40,10 @@ module API
|
|||
request_params[:page] = 1
|
||||
links << %(<#{request_url}?#{request_params.to_query}>; rel="first")
|
||||
|
||||
request_params[:page] = total_pages(paginated_data)
|
||||
links << %(<#{request_url}?#{request_params.to_query}>; rel="last")
|
||||
unless data_without_counts?(paginated_data)
|
||||
request_params[:page] = total_pages(paginated_data)
|
||||
links << %(<#{request_url}?#{request_params.to_query}>; rel="last")
|
||||
end
|
||||
|
||||
links.join(', ')
|
||||
end
|
||||
|
@ -55,6 +60,10 @@ module API
|
|||
|
||||
relation
|
||||
end
|
||||
|
||||
def data_without_counts?(paginated_data)
|
||||
paginated_data.is_a?(Kaminari::PaginatableWithoutCount)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -24,8 +24,7 @@ module API
|
|||
search: params[:search],
|
||||
snippets: snippets?,
|
||||
page: params[:page],
|
||||
per_page: params[:per_page],
|
||||
without_counts: false
|
||||
per_page: params[:per_page]
|
||||
}.merge(additional_params)
|
||||
|
||||
results = SearchService.new(current_user, search_params).search_objects
|
||||
|
|
|
@ -10,7 +10,7 @@ module Gitlab
|
|||
@per_page = per_page
|
||||
end
|
||||
|
||||
def objects(scope, page = nil, without_counts = true)
|
||||
def objects(scope, page = nil)
|
||||
case scope
|
||||
when 'notes'
|
||||
notes.page(page).per(per_page)
|
||||
|
@ -21,7 +21,7 @@ module Gitlab
|
|||
when 'commits'
|
||||
Kaminari.paginate_array(commits).page(page).per(per_page)
|
||||
else
|
||||
super(scope, page, without_counts)
|
||||
super(scope, page, false)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -9,14 +9,14 @@ module Gitlab
|
|||
@query = query
|
||||
end
|
||||
|
||||
def objects(scope, page = nil, without_counts = true)
|
||||
def objects(scope, page = nil)
|
||||
case scope
|
||||
when 'snippet_titles'
|
||||
snippet_titles.page(page).per(per_page)
|
||||
when 'snippet_blobs'
|
||||
snippet_blobs.page(page).per(per_page)
|
||||
else
|
||||
super(scope, nil, without_counts)
|
||||
super(scope, nil, false)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ describe API::Search do
|
|||
shared_examples 'response is correct' do |schema:, size: 1|
|
||||
it { expect(response).to have_gitlab_http_status(200) }
|
||||
it { expect(response).to match_response_schema(schema) }
|
||||
it { expect(response).to include_pagination_headers }
|
||||
it { expect(response).to include_limited_pagination_headers }
|
||||
it { expect(json_response.size).to eq(size) }
|
||||
end
|
||||
|
||||
|
|
|
@ -3,3 +3,9 @@ RSpec::Matchers.define :include_pagination_headers do |expected|
|
|||
expect(actual.headers).to include('X-Total', 'X-Total-Pages', 'X-Per-Page', 'X-Page', 'X-Next-Page', 'X-Prev-Page', 'Link')
|
||||
end
|
||||
end
|
||||
|
||||
RSpec::Matchers.define :include_limited_pagination_headers do |expected|
|
||||
match do |actual|
|
||||
expect(actual.headers).to include('X-Per-Page', 'X-Page', 'X-Next-Page', 'X-Prev-Page', 'Link')
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue