actor
actor copied to clipboard
Add custom classes support for `raise`
This PR adds support for custom classes for use in raise
.
This is necessary, for example, when you want to use the Actor gem to implement services, forms, or something else.
Base class examples:
class ApplicationService
include ServiceActor::Base
argument_error_class(MyCustomErrorForService::ArgumentError)
failure_class(MyCustomErrorForService::Failure)
end
class ApplicationForm
include ServiceActor::Base
argument_error_class(MyCustomErrorForForm::ArgumentError)
failure_class(MyCustomErrorForForm::Failure)
end
Usage example:
module MyCustomErrorForService
class ArgumentError < ServiceActor::ArgumentError; end
class Failure < ServiceActor::Failure; end
end
class ApplicationService
include ServiceActor::Base
define_argument_error_class(MyCustomErrorForService::ArgumentError)
define_failure_class(MyCustomErrorForService::Failure)
end
class PayService < ApplicationService
input :order, type: String, allow_nil: false
play :pay_order
private
def pay_order
fail!("Can't pay for an order!")
end
end
PayService.call(order: nil)
MyCustomErrorForService::ArgumentError: The "order" input on "PayService" does not allow nil values