Warning
Warning
Warning 모듈은 warn이라는 메서드 하나를 담고 있고, 모듈이 자기 자신을 extend 해서 Warning.warn을 사용할 수 있게 해줘요. Ruby가 내는 모든 경고에 대해 Warning.warn이 호출돼요. 기본적으로 경고는 $stderr에 출력되죠.
Warning.warn의 동작을 바꾸면 Ruby가 경고를 다루는 방식을 바꿀 수 있어요. 예를 들어 일부 경고를 걸러내거나, $stderr가 아닌 다른 곳으로 경고를 보낼 수 있죠.
Warning.warn의 동작을 바꾸려면 Warning.extend(MyNewModuleWithWarnMethod)를 사용하면 돼요. 그리고 super를 사용하면 경고를 $stderr에 출력하는 기본 동작을 이어받을 수 있어요.
module MyWarningFilter
def warn(message, category: nil, **kwargs)
if /some warning I want to ignore/.match?(message)
# ignore
else
super
end
end
end
Warning.extend MyWarningFilter
Warning#warn(인스턴스 메서드)을 재정의하는 것은 절대 하지 마세요. 그러면 기본 동작을 사용할 방법이 사라져 버려요. warning 젬은 Warning.warn을 편리하게 커스터마이즈하는 방법을 제공해요.
출처: Ruby 3.3 API
본문
Warning[category] → true or false
category에 대한 경고 메시지를 표시할지 여부를 나타내는 플래그를 돌려줘요. 지원되는 카테고리는 다음과 같아요.
Warning[category] = flag → flag
category에 대한 경고 플래그를 설정해요. 카테고리는 Warning.[]을 참고하세요.
warn(msg, category: nil) → nil
경고 메시지 msg를 $stderr에 써요. 이 메서드는 Ruby가 모든 경고를 낼 때 호출돼요. 경고에 카테고리가 포함될 수도 있어요. 커스터마이즈 방법은 Warning 모듈의 문서를 참고하세요.