diff options
Diffstat (limited to 'lib/gitlab/project_search_results.rb')
-rw-r--r-- | lib/gitlab/project_search_results.rb | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/lib/gitlab/project_search_results.rb b/lib/gitlab/project_search_results.rb index eb7ca80dd60..fbdfe166645 100644 --- a/lib/gitlab/project_search_results.rb +++ b/lib/gitlab/project_search_results.rb @@ -2,30 +2,29 @@ module Gitlab class ProjectSearchResults < SearchResults - attr_reader :project, :repository_ref, :per_page + attr_reader :project, :repository_ref - def initialize(current_user, project, query, repository_ref = nil, per_page: 20) + def initialize(current_user, project, query, repository_ref = nil) @current_user = current_user @project = project @repository_ref = repository_ref.presence @query = query - @per_page = per_page end - def objects(scope, page = nil) + def objects(scope, page: nil, per_page: DEFAULT_PER_PAGE) case scope when 'notes' notes.page(page).per(per_page) when 'blobs' - paginated_blobs(blobs(page), page) + paginated_blobs(blobs(limit: limit_up_to_page(page, per_page)), page, per_page) when 'wiki_blobs' - paginated_blobs(wiki_blobs, page) + paginated_wiki_blobs(wiki_blobs(limit: limit_up_to_page(page, per_page)), page, per_page) when 'commits' Kaminari.paginate_array(commits).page(page).per(per_page) when 'users' users.page(page).per(per_page) else - super(scope, page, false) + super(scope, page: page, per_page: per_page, without_count: false) end end @@ -49,7 +48,7 @@ module Gitlab end def limited_blobs_count - @limited_blobs_count ||= blobs.count + @limited_blobs_count ||= blobs(limit: count_limit).count end # rubocop: disable CodeReuse/ActiveRecord @@ -69,7 +68,7 @@ module Gitlab # rubocop: enable CodeReuse/ActiveRecord def wiki_blobs_count - @wiki_blobs_count ||= wiki_blobs.count + @wiki_blobs_count ||= wiki_blobs(limit: count_limit).count end def commits_count @@ -87,7 +86,7 @@ module Gitlab private - def paginated_blobs(blobs, page) + def paginated_blobs(blobs, page, per_page) results = Kaminari.paginate_array(blobs).page(page).per(per_page) Gitlab::Search::FoundBlob.preload_blobs(results) @@ -95,19 +94,26 @@ module Gitlab results end - def limit_up_to_page(page) + def paginated_wiki_blobs(blobs, page, per_page) + blob_array = paginated_blobs(blobs, page, per_page) + blob_array.map! do |blob| + Gitlab::Search::FoundWikiPage.new(blob) + end + end + + def limit_up_to_page(page, per_page) current_page = page&.to_i || 1 offset = per_page * (current_page - 1) count_limit + offset end - def blobs(page = 1) + def blobs(limit: count_limit) return [] unless Ability.allowed?(@current_user, :download_code, @project) - @blobs ||= Gitlab::FileFinder.new(project, repository_project_ref).find(query, content_match_cutoff: limit_up_to_page(page)) + @blobs ||= Gitlab::FileFinder.new(project, repository_project_ref).find(query, content_match_cutoff: limit) end - def wiki_blobs + def wiki_blobs(limit: count_limit) return [] unless Ability.allowed?(@current_user, :read_wiki, @project) @wiki_blobs ||= begin @@ -115,7 +121,7 @@ module Gitlab if project.wiki.empty? [] else - Gitlab::WikiFileFinder.new(project, repository_wiki_ref).find(query) + Gitlab::WikiFileFinder.new(project, repository_wiki_ref).find(query, content_match_cutoff: limit) end else [] |