Introduce ServiceResponse to replace success/error methods in BaseService
This is extracted from https://gitlab.com/gitlab-org/gitlab-ce/issues/56767#note_162465903 so we use something like this:
def execute
if rand(2) == 0
ServiceResponse.success
else
ServiceResponse.error('This is bad')
end
end
def run
status = execute
if status.success?
# ...
else
# ...
end
end
class ServiceResponse < Struct.new(:status, :message, keyword_init: true)
def self.success
new(status: :success)
end
def self.error(message)
new(status: :error, message: message)
end
def success?
status == :success
end
def error?
status == :error
end
end
To replace:
def execute
if rand(2) == 0
success
else
error('This is bad')
end
end
def run
status = execute
if status[:status] == :success
# ...
else
# ...
end
end
class BaseService
private
def error(message, http_status = nil)
result = {
message: message,
status: :error
}
result[:http_status] = http_status if http_status
result
end
def success(pass_back = {})
pass_back[:status] = :success
pass_back
end
end