Неудачи сервиса
При простом сценарии использования все неудачи (или падения) сервиса будут возникать из input, output или internal. Это все будет считаться неожиданным поведением в работе сервиса.
Но помимо этого можно также описать ожидаемые падения в работе сервиса. Для этого предусмотрены методы, представленные ниже.
Fail
Базовый метод .fail!
позволяет передать текст в виде сообщения, а также дополнительную информацию через атрибут meta
.
При вызове сервиса через метод .call!
будет вызываться exception с классом Servactory::Errors::Failure
.
make :check!
def check!
return if inputs.invoice_number.start_with?("AA")
fail!(message: "Invalid invoice number")
end
fail!(
message: "Invalid invoice number",
meta: {
invoice_number: inputs.invoice_number
}
)
exception.detailed_message # => Invalid invoice number (ApplicationService::Errors::Failure)
exception.message # => Invalid invoice number
exception.type # => :fail
exception.meta # => {:invoice_number=>"BB-7650AE"}
Fail для input
Отличается от .fail!
обязательным указыванием имени input-аргумента.
При вызове сервиса через метод .call!
будет явзяться exception с классом Servactory::Errors::InputError
.
make :check!
def check!
return if inputs.invoice_number.start_with?("AA")
fail_input!(:invoice_number, message: "Invalid invoice number")
end