NoMethodError: undefined method `to_i' for an instance of ActionController::Parameters
Validation: a21860c9-bf2b-4601-8047-ad862280f91b
Verdict: APPROVED#
Completeness#
| Plan Item | Status | Evidence |
|---|---|---|
1. client_error_controller.rb에 rescue_from NoMethodError, with: :invalid_parameter_type_400_error 추가 + 핸들러 정의 |
PASS | client_error_controller.rb +31 rescue_from NoMethodError, with: :invalid_parameter_type_400_error; 핸들러 def invalid_parameter_type_400_error(exception) 정의됨 (+50~53) |
1a. 핸들러가 ActionController::Parameters 메시지에만 raise_error(400, ..., ARG10000, Cupix::Errors::Parameter, 'Invalid parameter') 매핑 |
PASS | raise_error(400, exception, code: 'ARG10000', type: Cupix::Errors::Parameter, reason: 'Invalid parameter', message: exception.message) (+53), 앞줄 가드 raise exception unless exception.message.to_s.include?('ActionController::Parameters') (+51) |
1b. 매칭 안 되는 NoMethodError는 raise exception으로 재발생 |
PASS | raise exception unless exception.message.to_s.include?('ActionController::Parameters') (+51) |
2. spec에 invalid_parameter_type_400_error describe 블록 추가 (match→400, non-match→re-raise) |
PASS | client_error_controller_spec.rb describe 'invalid_parameter_type_400_error' (+48), match 케이스 400/ARG10000 (+49 |
Acceptance Criteria#
| Criterion | Status | Evidence |
|---|---|---|
client_error_controller.rb에 정확히 하나의 rescue_from NoMethodError, 핸들러는 ActionController::Parameters에만 400 반환 |
PASS | 단일 rescue_from NoMethodError (+31); 핸들러 가드 include?('ActionController::Parameters') (+51)로 그 경우만 400 |
비매칭 NoMethodError는 raise exception으로 재발생 (broad swallow 아님) |
PASS | raise exception unless ... (+51) — 삼키지 않고 재발생 |
| 두 개의 신규 spec 케이스(match→400, non-match→re-raise) 존재 | PASS | 400/ARG10000 검증 (+56~60), expect { get :index }.to raise_error(NoMethodError, /undefined method .foo. for nil/) (+70) |
ruby -c 문법 통과 |
NOTE | diff만으로는 검증 불가. 명백한 문법 오류 없음 — def/end 균형, rescue_from 심볼 문법 정상 |
| 기존 핸들러 동작 변경 없음 (diff는 rescue_from 추가 + 신규 메서드 + 신규 spec 블록으로 한정) | PASS | 기존 라인 수정 없음. client_error_controller.rb는 추가만(+31 rescue_from, +47~56 신규 메서드), spec은 신규 describe 블록만 추가 |
Issues Found#
차단 이슈 없음.
Observations#
- 핸들러의
raise_error(...)는 이미 존재하던 다른 400 핸들러(예:unauthorized_integration_400_error부근, +44)와 동일한 시그니처 패턴을 따르고 있어 in-repo 관례와 일치한다. exception.message.to_s로 nil 방어까지 되어 있어 메시지가 nil인 엣지 케이스에서도 안전하다.- 보안 이슈 없음: 클라이언트 잘못된 입력을 400으로 매핑하고 진짜 nil-reference 버그는 500으로 재노출하는 방식이라 실제 서버 결함을 은폐하지 않는다.
- plan 범위를 벗어난 불필요한 코드 추가 없음.