Poltergeistで`CoreText performance note:`などウザいwarningsを消すgem

Rubyの話。MavericksでCapybara::Poltergeistを使ってるとやたらとphantomjsに意味不明なwarningsを吐かれる。

こういう感じ。

% rspec ./spec/example_spec.rb
Run options: include {:locations=>{"./spec/requests/images_spec.rb"=>[152]}}
2014-05-01 06:59:42.547 phantomjs[9352:507] *** WARNING: Method userSpaceScaleFactor in class NSView is deprecated on 10.7 and later. It should not be used in new applications. Use convertRectToBacking: instead. 
2014-05-01 06:59:43.118 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Helvetica Neue" and got font with PostScript name "HelveticaNeue". For best performance, only use PostScript names when calling this API.
2014-05-01 06:59:43.118 phantomjs[9352:507] CoreText performance note: Set a breakpoint on CTFontLogSuboptimalRequest to debug.
2014-05-01 06:59:43.123 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Lucida Grande" and got font with PostScript name "LucidaGrande". For best performance, only use PostScript names when calling this API.
2014-05-01 06:59:43.124 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Lucida Grande" and got font with PostScript name "LucidaGrande". For best performance, only use PostScript names when calling this API.
2014-05-01 06:59:43.126 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Lucida Grande" and got font with PostScript name "LucidaGrande". For best performance, only use PostScript names when calling this API.
2014-05-01 06:59:43.126 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Lucida Grande" and got font with PostScript name "LucidaGrande". For best performance, only use PostScript names when calling this API.
2014-05-01 06:59:43.127 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Lucida Grande" and got font with PostScript name "LucidaGrande". For best performance, only use PostScript names when calling this API.
2014-05-01 06:59:43.338 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Lucida Grande" and got font with PostScript name "LucidaGrande". For best performance, only use PostScript names when calling this API.
2014-05-01 06:59:43.339 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Lucida Grande" and got font with PostScript name "LucidaGrande". For best performance, only use PostScript names when calling this API.
2014-05-01 06:59:43.339 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Lucida Grande" and got font with PostScript name "LucidaGrande". For best performance, only use PostScript names when calling this API.
2014-05-01 06:59:43.630 phantomjs[9352:507] CoreText performance note: Client called CTFontCreateWithName() using name "Helvetica Neue" and got font with PostScript name "HelveticaNeue". For best performance, only use PostScript names when calling this API.
.

Finished in 4.02 seconds
1 example, 0 failures

こんなのをずっと見てると大切な人の目が傷ついてしまう。網膜が傷ついた人たちは眼科に通うことになり、その医療費は国家の財政を圧迫する。財政危機に陥った政府は増税を決行し、国民を不幸に陥れる。こうして子供たちから笑顔が失われた。もう彼らはうまい棒を10円で買うことができないのだ。

無意味なメッセージを垂れ流したままにすることは大きなリスクが潜んでいる。

このくらいなら適当にモンキーパッチを当てとけばいいんだけれど、遊びがてらgemにしてみた。

https://github.com/uiureo/poltergeist-suppressor

こうGemfileに書けば使えます。

gem 'poltergeist-suppressor'

spec_helper.rbにこう書かなきゃいけないかも。

require 'capybara/poltergeist'
require 'poltergeist/suppressor'

こんな感じで使える。

suppressor = Capybara::Poltergeist::Suppressor.new(patterns: [
  /spam spam spam spam/,
  /spamspamspamspam/
])

Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app, phantomjs_logger: suppressor)
end