概要
原著者の許諾を得て翻訳・公開いたします。
- 英語記事: Idiosyncratic Ruby: Warning: The Module
- 原文公開日: 2018/05/15
- 著者: Jan Lelis
- サイト: Idiosyncratic Ruby
Ruby 2.5のカスタマイズ可能なWarningモジュール(翻訳)
Ruby 2.51から、Warning
モジュールを用いてKernel#warnの振る舞いをカスタマイズできるようになりました。やり方をご説明します。
def Warning.warn(w)
# superは元の振る舞い(#stderrへの出力)を呼び出す
super "\e[31;1mRUBY WARNING: \e[22m#{w.sub(/warning: /, '')}\e[0m"
end
# # #
# 例
warn "test"
# => RUBY WARNING: test
{ a: 1, a: 2 }
# => RUBY WARNING: (irb):4: key :a is duplicated and overwritten on line 4
$VERBOSE = true # level 2 warningsを表示
def a() end
def a() end
# => RUBY WARNING: (irb):8: method redefined; discarding old a
# => RUBY WARNING: (irb):6: previous definition of a was here
Jeremy Evans氏作の ruby-warning gemを使うと、さらにいくつかのwarning機能を解き放てます。
require "warning"
Warning.ignore /duplicated and overwritten/
{ a: 1, a: 2 }
# => なんも出ない
$VERBOSE = true
Warning.ignore :method_redefined
def a() end
def a() end
# => なんも出ない
参考
関連記事
-
Warning
モジュールそのものは既にRuby 2.4からありますが、Kernel#warn
では利用していませんでした。 ↩