Class: Search::GlobalService

Inherits:
Object
  • Object
show all
Includes:
Gitlab::Utils::StrongMemoize, Filter
Defined in:
app/services/search/global_service.rb

Direct Known Subclasses

GroupService, SnippetService

Constant Summary collapse

DEFAULT_SCOPE =
'projects'
ALLOWED_SCOPES =
%w[projects issues merge_requests milestones users].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(user, params) ⇒ GlobalService

Returns a new instance of GlobalService.



13
14
15
16
# File 'app/services/search/global_service.rb', line 13

def initialize(user, params)
  @current_user = user
  @params = params.dup
end

Instance Attribute Details

#current_userObject

Returns the value of attribute current_user.



11
12
13
# File 'app/services/search/global_service.rb', line 11

def current_user
  @current_user
end

#paramsObject

Returns the value of attribute params.



11
12
13
# File 'app/services/search/global_service.rb', line 11

def params
  @params
end

Instance Method Details

#allowed_scopesObject



32
33
34
# File 'app/services/search/global_service.rb', line 32

def allowed_scopes
  ALLOWED_SCOPES
end

#executeObject



18
19
20
21
22
23
24
25
# File 'app/services/search/global_service.rb', line 18

def execute
  Gitlab::SearchResults.new(current_user,
                            params[:search],
                            projects,
                            order_by: params[:order_by],
                            sort: params[:sort],
                            filters: filters)
end

#projectsObject

rubocop: disable CodeReuse/ActiveRecord



28
29
30
# File 'app/services/search/global_service.rb', line 28

def projects
  @projects ||= ProjectsFinder.new(current_user: current_user).execute.preload(:topics, :project_topics)
end

#scopeObject



36
37
38
39
40
# File 'app/services/search/global_service.rb', line 36

def scope
  strong_memoize(:scope) do
    allowed_scopes.include?(params[:scope]) ? params[:scope] : DEFAULT_SCOPE
  end
end