Я использую полосу в качестве процессора платежей.DRYing повторные отчеты о спасении
В приложении я отправляю запрос на Stripe для выполнения зарядки или для других типов процессов и в основном использует тот же шаблон обработки ошибок, что и ниже.
rescue Stripe::InvalidRequestError => e,
# do something
rescue Stripe::AuthenticationError => e,
# do something
rescue Stripe::APIConnectionError => e,
# do something
rescue Stripe::StripeError => e
# do something
rescue => e
# do something
end
В то время как я мог определенно rescue
каждый из этих типов ошибок в каждом вызове API, что много шаблонного кода, я хотел бы просто rescue
на всех из них, а затем построить метод делать такие вещи как ведение журнала, отправка уведомления.
Как я могу связать их в один обработчик исключений более чистым способом (сухие вещи), как показано ниже?
def call
plan = Plan.new(attrs)
return plan unless plan.valid?
begin
external_card_plan_service.create(api_attrs)
rescue Exceptions::Stripe => e
plan.errors[:base] << e.message
return plan
end
plan.save
plan.update(is_active: true, activated_at: Time.now.utc)
plan
end
Если Stripe принадлежит вам, вы можете иметь эти исключения наследовать общее исключение. Это? –