Skip to main content
Version: 1.9


In a simple use case, all service failures will come from input, output or internal attributes. That would be considered as unexpected behavior in service operation.

In order to describe expected service crashes, the following methods were prepared.


Base method that allows to pass text as message and additional information via meta attribute.

When the service is called via the .call! method, there will be called an exception with the class Servactory::Errors::Failure.

make :check!

def check!
return if inputs.invoice_number.start_with?("AA")

fail!(message: "Invalid invoice number")
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 for input

This method differs from .fail! by obligatory indication of input-argument name.

If service is called through .call! method, it will cause exception with class Servactory::Errors::InputError.

make :check!

def check!
return if inputs.invoice_number.start_with?("AA")

fail_input!(:invoice_number, message: "Invalid invoice number")