У меня есть модель Transaction
и метод external_evaluation
. external_evaluation
проходит вниз по стеку и в конечном итоге вызывает лямбду AWS. Если ответ плохой, возникает исключение BadResponse
.
В кодовой базе есть шаблон, который часто используется, например,
def get_some_transactions()
Transaction.where(some_column: some_expression)
end
def do_some_stuff()
get_some_transactions.each do |transaction|
do_something(transaction.external_evaluation)
rescue BadResponse => e
log(e)
next
end
end
def do_some_other_stuff()
get_some_transactions.each_with_object({}) do |transaction, transaction_hash|
transaction_hash[transaction] = do_something_else(transaction.external_evaluation)
rescue BadResponse => e
log(e)
next
end
end
Мне очень не нравится дублирование кода обработки ошибок в этом шаблоне, и я хотел бы иметь возможность для добавления обработки ошибок по умолчанию в get_some_transactions
, которая будет применяться независимо от того, какая итерационная функция вызывается (each
, each_with_object
, each_with_index
, ...). Есть ли идиоматический c способ сделать это в Ruby?