Skip to content
Snippets Groups Projects
project_search_results.rb 2.03 KiB
Newer Older
  • Learn to ignore specific revisions
  • module Gitlab
      class ProjectSearchResults < SearchResults
        attr_reader :project, :repository_ref
    
    
        def initialize(project_id, query, repository_ref = nil)
    
          @project = Project.find(project_id)
    
          @repository_ref = if repository_ref.present?
                              repository_ref
                            else
                              nil
                            end
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
        def objects(scope, page = nil)
    
          case scope
          when 'notes'
            notes.page(page).per(per_page)
          when 'blobs'
            Kaminari.paginate_array(blobs).page(page).per(per_page)
    
    Ralf Seidler's avatar
    Ralf Seidler committed
          when 'wiki_blobs'
            Kaminari.paginate_array(wiki_blobs).page(page).per(per_page)
    
          when 'commits'
            Kaminari.paginate_array(commits).page(page).per(per_page)
    
          else
            super
          end
        end
    
        def total_count
    
    Ralf Seidler's avatar
    Ralf Seidler committed
          @total_count ||= issues_count + merge_requests_count + blobs_count +
    
                           notes_count + wiki_blobs_count + commits_count
    
        end
    
        def blobs_count
          @blobs_count ||= blobs.count
        end
    
        def notes_count
          @notes_count ||= notes.count
        end
    
    
    Ralf Seidler's avatar
    Ralf Seidler committed
        def wiki_blobs_count
          @wiki_blobs_count ||= wiki_blobs.count
        end
    
    
        def commits_count
          @commits_count ||= commits.count
        end
    
    
        private
    
        def blobs
    
          if project.empty_repo? || query.blank?
    
            []
          else
            project.repository.search_files(query, repository_ref)
          end
        end
    
    
    Ralf Seidler's avatar
    Ralf Seidler committed
        def wiki_blobs
    
          if project.wiki_enabled? && query.present?
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
            project_wiki = ProjectWiki.new(project)
    
    Dmitriy Zaporozhets's avatar
    Dmitriy Zaporozhets committed
            unless project_wiki.empty?
              project_wiki.search_files(query)
    
    Ralf Seidler's avatar
    Ralf Seidler committed
          else
    
          Note.where(project_id: limit_project_ids).user.search(query).order('updated_at DESC')
    
          if project.empty_repo? || query.blank?
            []
          else
            project.repository.find_commits_by_message(query).compact
          end
    
        def limit_project_ids
          [project.id]
        end
      end
    end