Configuration
Services are configured through the configuration
method, which can be placed, for example, in the base class.
Configuration examples
For exceptions
ruby
module ApplicationService
class Base < Servactory::Base
configuration do
input_exception_class ApplicationService::Exceptions::Input
internal_exception_class ApplicationService::Exceptions::Internal
output_exception_class ApplicationService::Exceptions::Output
failure_class ApplicationService::Exceptions::Failure
end
end
end
ruby
module ApplicationService
module Exceptions
class Input < Servactory::Exceptions::Input; end
class Output < Servactory::Exceptions::Output; end
class Internal < Servactory::Exceptions::Internal; end
class Failure < Servactory::Exceptions::Failure; end
end
end
For result Since 2.5.0
ruby
module ApplicationService
class Base < Servactory::Base
configuration do
# ...
result_class ApplicationService::Result
end
end
end
ruby
module ApplicationService
class Result < Servactory::Result; end
end
Collection mode
ruby
module ApplicationService
class Base < Servactory::Base
configuration do
collection_mode_class_names([ActiveRecord::Relation])
end
end
end
Hash mode
ruby
module ApplicationService
class Base < Servactory::Base
configuration do
hash_mode_class_names([CustomHash])
end
end
end
Helpers for input
Custom helpers for input
can be based on the must
and prepare
options.
Example with must
ruby
module ApplicationService
class Base < Servactory::Base
configuration do
input_option_helpers(
[
Servactory::Maintenance::Attributes::OptionHelper.new(
name: :must_be_6_characters,
equivalent: {
must: {
be_6_characters: {
is: ->(value:, input:) { value.all? { |id| id.size == 6 } },
message: lambda do |input:, **|
"Wrong IDs in `#{input.name}`"
end
}
}
}
)
]
)
end
end
end
Example with prepare
ruby
module ApplicationService
class Base < Servactory::Base
configuration do
input_option_helpers(
[
Servactory::Maintenance::Attributes::OptionHelper.new(
name: :to_money,
equivalent: {
prepare: ->(value:) { Money.from_cents(value, :USD) }
}
)
]
)
end
end
end
Helpers for internal
Custom helpers for output
can be based on the must
option.
Example with must
ruby
module ApplicationService
class Base < Servactory::Base
configuration do
internal_option_helpers(
[
Servactory::Maintenance::Attributes::OptionHelper.new(
name: :must_be_6_characters,
equivalent: {
must: {
be_6_characters: {
is: ->(value:, internal:) { value.all? { |id| id.size == 6 } },
message: lambda do |internal:, **|
"Wrong IDs in `#{internal.name}`"
end
}
}
}
)
]
)
end
end
end
Helpers for output
Custom helpers for output
can be based on the must
option.
Example with must
ruby
module ApplicationService
class Base < Servactory::Base
configuration do
output_option_helpers(
[
Servactory::Maintenance::Attributes::OptionHelper.new(
name: :must_be_6_characters,
equivalent: {
must: {
be_6_characters: {
is: ->(value:, output:) { value.all? { |id| id.size == 6 } },
message: lambda do |output:, **|
"Wrong IDs in `#{output.name}`"
end
}
}
}
)
]
)
end
end
end
Aliases for make
ruby
configuration do
action_aliases %i[execute]
end
Shortcuts for make
ruby
module ApplicationService
class Base < Servactory::Base
configuration do
action_shortcuts %i[assign perform]
end
end
end
Predicate methods Since 2.5.0
By default, predicate methods for all attributes are enabled. You can turn them off if necessary.
ruby
module ApplicationService
class Base < Servactory::Base
configuration do
predicate_methods_enabled false
end
end
end