6f3c490107
This refactors the AutocompleteController according to the guidelines and boundaries discussed in https://gitlab.com/gitlab-org/gitlab-ce/issues/49653. Specifically, ActiveRecord logic is moved to different finders, which are then used in the controller. View logic in turn is moved to presenters, instead of directly using ActiveRecord's "to_json" method. The finder MoveToProjectFinder is also adjusted according to the abstraction guidelines and boundaries, resulting in a much more simple finder. By using finders (and other abstractions) more actively, we can push a lot of logic out of the controller. We also remove the need for various "before_action" hooks, though this could be achieved without using finders as well. The various finders related to AutcompleteController have also been moved into a namespace. This removes the need for calling everything "AutocompleteSmurfFinder", instead you can use "Autocomplete::SmurfFinder".
26 lines
741 B
Ruby
26 lines
741 B
Ruby
# frozen_string_literal: true
|
|
|
|
# A simple finding for obtaining a single User.
|
|
#
|
|
# While using `User.find_by` directly is straightforward, it can lead to a lot
|
|
# of code duplication. Sometimes we just want to find a user by an ID, other
|
|
# times we may want to exclude blocked user. By using this finder (and extending
|
|
# it whenever necessary) we can keep this logic in one place.
|
|
class UserFinder
|
|
attr_reader :params
|
|
|
|
def initialize(params)
|
|
@params = params
|
|
end
|
|
|
|
# Tries to find a User, returning nil if none could be found.
|
|
def execute
|
|
User.find_by(id: params[:id])
|
|
end
|
|
|
|
# Tries to find a User, raising a `ActiveRecord::RecordNotFound` if it could
|
|
# not be found.
|
|
def execute!
|
|
User.find(params[:id])
|
|
end
|
|
end
|