Релиз 2.2
Были подготовлены и реализованы следующие изменения.
Атрибуты
Internal атрибут
- Добавлена поддержка опции
inclusion; - Добавлена поддержка опции
must; - Добавлена поддержка хелперов.
Output атрибут
- Добавлена поддержка опции
inclusion; - Добавлена поддержка опции
must; - Добавлена поддержка хелперов.
Опции
- Для опции
consists_ofдобавлена проверка вложенных значений.
Методы
Метод success!
Добавлен метод success! для ручного раннего завершения сервиса успехом.
ruby
class UsersService::Confirmation::Send < ApplicationService::Base
input :user, type: User
make :skip_if_already_sent!
# ...
def skip_if_already_sent!
return if user.need_confirmation?
success!
end
# ...
endМетод fail!
Для метода fail! был добавлен атрибут type. По умолчанию атрибут имеет значение :base. Вы можете указывать любое наименование, а затем использовать его при обработке Failure.
ruby
class UsersService::Confirmation::Send < ApplicationService::Base
input :user, type: User
make :skip_if_already_sent!
# ...
def skip_if_already_sent!
return if user.need_confirmation?
fail!(:soft, message: "The confirmation has already been sent")
end
# ...
endРезультат сервиса
Хуки
Это релиз добавляет еще один подход к обработке результата работы сервиса. Для Result была добавлена поддержка двух хуков.
Хук on_success
ruby
UsersService::Confirmation::Send
.call(user:)
.on_success do |outputs:|
redirect_to outputs.notification
endХук on_failure
ruby
UsersService::Confirmation::Send
.call(user:)
.on_failure(:all) do |exception:|
flash.now[:message] = exception.message
render :new
endПрочее
Релиз также содержит прочие исправления и улучшения.