ruby-oci8 の Issue でやりとりしたり、前の3連休で見ていた Cop の仕上げをしたりしていた (実際に PR を出したのは翌10月12日) 。
JRuby 9.2.0.0-SNAPSHOTの調査
RuboCop の Travis CI で jruby-head が落ちているのが気に掛かっていたので、少し調べようと思った。まずは環境が必要。
現在 zip のダウンロードができない問題から、普段使いの rbenv では jruby-head がインストールできないため、Travis CI のログをもとに RVM を使ってインストールする。
% rvm get stable % rvm remove ${ruby_alias:-jruby-head} --gems % rvm remove jruby-head --gems --fuzzy % rvm install jruby-head --binary
絞り込んでみた Excepted と Actual は以下。後述の Issue から抜粋した振る舞いの違いとなる。
Expected Behavior
JRuby 9.1.13.0 and MRI 2.4.2 の振る舞い。
% rvm use jruby-9.1.13.0 Using /home/vagrant/.rvm/gems/jruby-9.1.13.0 % rake --version rake, version 12.1.0 % ruby -e 'system("rake --version")' rake, version 12.1.0
Actual Behavior
JRuby 9.2.0.0-SNAPSHOT の振る舞い。
% rvm use jruby-head Using /home/vagrant/.rvm/gems/jruby-head % rake --version rake, version 12.1.0 % ruby -e 'system("rake --version")' # Do not return `rake` version
どうも system
まわりが問題だと特定はできたもののよく分からない。とりあえず Issue にてレポートをした。
3連休
だいたい RuboCop 引きこもりだった。レビューしてもらっている PR がいくつかある状態で PR を増やしたくなかったので、手元にだけある wip ブランチが 3 つほど増えたのが成果。ものとしては概ね出来ているので順々に出して行く予定。
あと Heaven's Feel が始まる前に、見ようと思って届いていた SOA オーディナル・スケールを英語字幕を付けて見ていたりした。
今日の Cop 業
なんだっけ? (この日記は 10/9 に書いている)
Lint/ShadowedException
cop へのレアケースな Issue を Fix した PR に、バグレポーターからまだ対応が足りていなかったフィードバックをもらったのでパッチを足したり、Ruby 1.9 のコードが残っていたので消 (すのに複数 Ruby 環境で確認) したり、テッドさんから提案してもらった内部業務の Cop を作ったりしていた。
Lint/ShadowedException
cop のフィードバックは再現ケースがついていたので、かなり助かった。再現ケースほんとうに重要。
あとは Heaven's Feel が今週末の開演だったのでチケットを買ったりしてた。
stub_constで少しハマった話
具体的には以下のコードを書くのに、おや?となっていた。Errno
は環境依存の話になる (ので stub_const
している) 、いちおう手元の MacOS X 10.9 (古い!) での話となる。
it 'accepts rescuing multiple same error code exceptions' do # System dependent error code depends on runtime environment. stub_const('Errno::EAGAIN::Errno', 35) stub_const('Errno::EWOULDBLOCK::Errno', 35) expect_no_offenses(<<-RUBY.strip_indent) begin something rescue Errno::EAGAIN, Errno::EWOULDBLOCK handle_exception end RUBY end
例えば以下のように Errno::EAGAIN::Errno
の値のみ 34
にしようしたら、Errno::EWOULDBLOCK::Errno
まで 34
になる。
stub_const('Errno::EAGAIN::Errno', 34)
stub_const
の使い方を間違っていたかなと、しばし逡巡してログを仕込んだりでもしやと思ったら以下が理由だった。
> Errno::EAGAIN.object_id == Errno::EWOULDBLOCK.object_id => true
もっと書くとこう。
> Errno::EWOULDBLOCK => Errno::EAGAIN
なるほどなあ。
Rails/TopLevelInclude cop を提案した
以下の PR となる。
この Cop を提案した経緯なんかは、今日申し込んだ福岡Ruby会議02の前夜祭 LT で話そうかなと思っている (ので今日の日記には書きません) 。
1回休み
表参道.rb がおもしろそうな題材を扱っていて興味が惹かれたけれど、移動する体力はなかったので帰宅してた。