Не надо везде лепить восклицательные знаки!
Вижу такое:
def finish!
update(status: :finished)
end
В Руби принято добавлять восклицательный знак к «небезопасным» методам, которые модифицируют оригинальный объект, а не возращают новый:
email = "foo@bar.com"
email.gsub(/foo/, "baz") # вернет новую строку, email останется тем же
email.gsub!(/foo/, "baz") # поменяет email и вернет его
В Рельсах восклицательный знак добавляют к методам ActiveRecord, которые могут выкинуть исключение при ошибках валидации:
user.save # при ошибках вернет false
user.save! # при ошибках выкинет ActiveRecord::RecordInvalid
Оттого, что мы добавили восклицательный знак к finish
, лучше АПИ не стало. Наоборот, мы запутали сами себя: безопасного finish
не существует, а finish!
вряд ли выкинет исключение. Соответственно, метод лучше переименовать тупо в finish
.
P. S. Ещё больше постов о программировании, тестах и культуре разработки у меня в Телеграме.