我使用stripe作爲付款處理器。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
如果條紋是你的,你可以讓這些異常繼承一個普通的異常。是嗎? –