저자는 Teacher 모델의 available_places에 따라 배경색을 지정하는 colour_coded_availability 메서드를 예시로 들며, 이 뷰 로직을 데코레이터에서 처리해야 한다고 제안합니다. 초기 TeacherDecorator는 Teacher 인스턴스를 감싸지만, 뷰에서 모델의 다른 메서드를 호출할 때 NoMethodError가 발생합니다.
이 문제를 해결하기 위해 Ruby의 method_missing과 respond_to_missing?을 활용합니다. method_missing을 재정의하여 데코레이터에 정의되지 않은 메서드 호출을 내부 teacher 객체로 public_send를 통해 전달함으로써, 데코레이터가 자신의 메서드와 기본 모델의 공용 메서드를 모두 처리할 수 있게 합니다.
나아가, 이러한 공통 위임 로직을 재사용하기 위해 ApplicationDecorator라는 상위 클래스를 도입합니다. ApplicationDecorator는 객체 초기화 및 method_missing을 통한 메서드 위임 로직을 캡슐화하며, TeacherDecorator는 이를 상속받아 뷰에 특화된 로직만을 구현합니다. alias_method를 사용하여 내부 객체를 teacher로 참조할 수 있게 하여 가독성을 높입니다.
또한, edit_teacher_path(@teacher)와 같은 Rails 헬퍼가 데코레이터 인스턴스를 올바르게 처리하지 못하는 문제를 다룹니다. to_param 메서드를 기본 모델로 위임하여 해결할 수 있지만, 모든 Rails 기본 동작을 수동으로 위임하는 것은 복잡성을 증가시킨다고 지적합니다.
최종적으로 저자는 Ruby 표준 라이브러리의 SimpleDelegator를 활용하는 가장 간결하고 효율적인 방법을 제안합니다. SimpleDelegator는 생성자에 전달된 객체의 모든 공용 메서드 호출을 자동으로 위임하므로, ApplicationDecorator는 복잡한 초기화 및 method_missing 로직 없이 단순히 SimpleDelegator를 상속받는 것만으로 충분해집니다. 이로써 데코레이터 구현이 극적으로 간결해지며, __getobj__ 메서드를 통해 내부 객체에 접근할 수 있습니다.