Конфигурация
Сервисы конфигурируются через configuration
метод, который может быть расположен, например, в базовом классе.
Примеры конфигурации
Для исключений
ruby
module ApplicationService
class Base < Servactory::Base
configuration do
input_error_class ApplicationService::Errors::InputError
output_error_class ApplicationService::Errors::OutputError
internal_error_class ApplicationService::Errors::InternalError
failure_class ApplicationService::Errors::Failure
end
end
end
ruby
module ApplicationService
module Errors
class InputError < Servactory::Errors::InputError; end
class OutputError < Servactory::Errors::OutputError; end
class InternalError < Servactory::Errors::InternalError; end
class Failure < Servactory::Errors::Failure; end
end
end
Режим коллекции
ruby
module ApplicationService
class Base < Servactory::Base
configuration do
collection_mode_class_names([ActiveRecord::Relation])
end
end
end
Режим хеша
ruby
module ApplicationService
class Base < Servactory::Base
configuration do
hash_mode_class_names([CustomHash])
end
end
end
Хелперы для input
Пользовательские хелперы для input
основываются на опциях must
и prepare
.
Пример с must
ruby
module ApplicationService
class Base < Servactory::Base
configuration do
input_option_helpers(
[
Servactory::Inputs::OptionHelper.new(
name: :must_be_6_characters,
equivalent: {
must: {
be_6_characters: {
is: ->(value:) { value.all? { |id| id.size == 6 } },
message: lambda do |input:, **|
"Wrong IDs in `#{input.name}`"
end
}
}
}
)
]
)
end
end
end
Пример с prepare
ruby
module ApplicationService
class Base < Servactory::Base
configuration do
input_option_helpers(
[
Servactory::Inputs::OptionHelper.new(
name: :to_money,
equivalent: {
prepare: ->(value:) { Money.from_cents(value, :USD) }
}
)
]
)
end
end
end
Алиасы для make
ruby
configuration do
action_aliases %i[execute]
end
Сокращения для make
ruby
module ApplicationService
class Base < Servactory::Base
configuration do
action_shortcuts %i[assign perform]
end
end
end