핵심 문제점과 해결 과정:
PresenceValidator
를 해시에 적용했을 때, 해시에 errors
, read_attribute_for_validation
, model_name
등 Active Record 관련 메서드 부재로 오류가 발생했습니다. 이를 극복하기 위해, 필요한 메서드를 정의하는 익명 래퍼 클래스를 만들고, Rails의 ActiveModel::Naming
및 ActiveModel::Translation
모듈을 활용하여 문제를 해결했습니다.
유효성 검사 옵션 및 조건부 로직 지원:
allow_nil
같은 옵션과 if
/unless
조건부 유효성 검사를 지원하기 위해, 유효성 검사기의 상위 메서드를 호출하도록 변경하고, 래퍼 클래스에 ActiveModel::Validations
모듈을 포함시켜 Rails 유효성 검사 기능을 온전히 활용할 수 있도록 했습니다. 유효성 검사 클래스는 Active Record 모델과 유사하게 클래스 및 인스턴스 메서드를 래퍼에 위임하도록 설계되었습니다.
동적 속성 접근 및 데이터 변경 처리:
if other_attribute
와 같이 종속적인 유효성 검사는 해시 키를 메서드처럼 호출해야 하는 문제를 야기했습니다. 초기 SimpleDelegator
방식은 원본 해시 변경 시 동기화 문제를 발생시켰고, 이를 해결하기 위해 method_missing
을 사용하여 래퍼가 해시의 키를 동적으로 메서드처럼 호출하도록 구현하여 데이터 변경에 유연하게 대응했습니다.
확장성 및 추가 고려 사항:
발표자는 키 부재 시 처리, 다른 클래스 유효성 검사 지원, validate
메서드 이름 충돌 해결, 사용자 정의 유효성 검사기 지원, 특정 유효성 검사기(ConfirmationValidator
) 처리, 그리고 shoulda-matchers
통합 등 개발된 유효성 검사 클래스의 범용성과 견고성을 높이는 다양한 추가 개선 사항을 제시했습니다.