mirror of
https://github.com/we-promise/sure.git
synced 2026-05-29 23:39:03 +00:00
fix(goals): reconciler logs to Sentry + rename :extend route to :renew
Two Ruby idiom audit fixes. The Reconciler's outer `rescue StandardError` was logging at error level and moving on. Pipeline-protective (we don't want a Goal reconcile failure to break the Plaid/SimpleFIN/etc importer it's hooked into) but invisible — real bugs hid behind a warn log forever. Add `Sentry.capture_exception(e) if defined?(Sentry)` alongside the log, matching the pattern in `Account::Syncer`, `Sync`, `PlaidItem`, and the chart-series rescues this branch already added. Keep the rescue's protective function. `member do patch :extend end` shadows `Module#extend` — the controller action name competes with Ruby's most-common mixin entry point. `before_action :foo, only: %i[extend destroy]` reads as "extend this controller with :foo, only: …" to a casual reader, and stack traces against `def extend` look misleading. Rename to `:renew` (matches the existing copy: the button says "Extend 7 days," but the API verb is "renew the watching window"): - config/routes.rb: `patch :renew` - GoalPledgesController#extend → #renew - locale `goal_pledges.extend` → `goal_pledges.renew` - banner `extend_goal_pledge_path` → `renew_goal_pledge_path` - test refs updated The user-facing button text is unchanged.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
class GoalPledgesController < ApplicationController
|
||||
before_action :set_goal
|
||||
before_action :set_pledge, only: %i[extend destroy]
|
||||
before_action :set_pledge, only: %i[renew destroy]
|
||||
rescue_from ActiveRecord::RecordNotFound, with: :record_not_found
|
||||
|
||||
def new
|
||||
@@ -32,7 +32,7 @@ class GoalPledgesController < ApplicationController
|
||||
end
|
||||
end
|
||||
|
||||
def extend
|
||||
def renew
|
||||
@pledge.extend!
|
||||
redirect_to goal_path(@goal), notice: t(".success")
|
||||
rescue GoalPledge::NotOpenError
|
||||
|
||||
@@ -32,7 +32,13 @@ class GoalPledge::Reconciler
|
||||
end
|
||||
end
|
||||
rescue StandardError => e
|
||||
# Don't let an unexpected reconcile failure break the importer pipeline
|
||||
# we're hooked into (ProviderImportAdapter / ReconciliationManager).
|
||||
# Surface to Sentry so the actual bug doesn't hide behind a warn-level
|
||||
# log; the inner narrow rescue handles known races without coming
|
||||
# through here.
|
||||
Rails.logger.error("GoalPledge::Reconciler failed for entry ##{entry&.id}: #{e.class}: #{e.message}")
|
||||
Sentry.capture_exception(e) if defined?(Sentry)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<div class="mt-2 flex items-center gap-2 flex-wrap">
|
||||
<%= render DS::Button.new(
|
||||
text: t("goals.show.pending_pledge.extend"),
|
||||
href: extend_goal_pledge_path(pledge.goal, pledge),
|
||||
href: renew_goal_pledge_path(pledge.goal, pledge),
|
||||
method: :patch,
|
||||
variant: "outline",
|
||||
size: "sm"
|
||||
|
||||
@@ -12,7 +12,7 @@ en:
|
||||
preview_reached: "Hits your {target} target — goal reached."
|
||||
create:
|
||||
success: Pledge recorded. Sure will confirm it on the next sync.
|
||||
extend:
|
||||
renew:
|
||||
success: Pledge window extended 7 days.
|
||||
not_open: Only open pledges can be extended.
|
||||
destroy:
|
||||
|
||||
@@ -309,7 +309,7 @@ Rails.application.routes.draw do
|
||||
|
||||
resources :pledges, only: %i[new create destroy], controller: "goal_pledges" do
|
||||
member do
|
||||
patch :extend
|
||||
patch :renew
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -40,14 +40,14 @@ class GoalPledgesControllerTest < ActionDispatch::IntegrationTest
|
||||
|
||||
test "extend pushes expires_at forward" do
|
||||
before = @pledge.expires_at
|
||||
patch extend_goal_pledge_url(@goal, @pledge)
|
||||
patch renew_goal_pledge_url(@goal, @pledge)
|
||||
assert_redirected_to goal_path(@goal)
|
||||
assert @pledge.reload.expires_at > before
|
||||
end
|
||||
|
||||
test "extend on non-open pledge flashes alert" do
|
||||
pledge = goal_pledges(:matched_transfer)
|
||||
patch extend_goal_pledge_url(@goal, pledge)
|
||||
patch renew_goal_pledge_url(@goal, pledge)
|
||||
assert_redirected_to goal_path(@goal)
|
||||
assert flash[:alert].present?
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user