Ruby 2.5 での FileUtils.rmdir の挙動の変更

未明くらいに RuboCop の CI で ruby-head が落ちている問題を解決していたりした。

github.com

結論だけ書くと、FileUtils.rmdir の挙動が Ruby 2.5 で変更されるということに影響を受けていたのが原因だった。以下 Issue から少しアレンジして抜粋。

サンプルコード (example.rb)

require 'fileutils'

FileUtils.mkdir("/tmp/foo")
FileUtils.touch("/tmp/foo/bar.txt")
FileUtils.rmdir("/tmp/foo") # 確認したい箇所

Ruby 2.4.2

% rm -rf /tmp/foo
% ruby example.rb
% ls /tmp/foo
bar.txt

Ruby 2.5.0-dev (2017-10-30 trunk 60580)

% rm -rf /tmp/foo
% ruby example.rb
  Traceback (most recent call last):
        4: from -e:1:in `<main>'
        3: from /Users/koic/.rbenv/versions/2.5.0-dev/lib/ruby/2.5.0/fileutils.rb:247:in `rmdir'
        2: from /Users/koic/.rbenv/versions/2.5.0-dev/lib/ruby/2.5.0/fileutils.rb:247:in `each'
        1: from /Users/koic/.rbenv/versions/2.5.0-dev/lib/ruby/2.5.0/fileutils.rb:248:in `block in rmdir'

この辺りの経緯の bugs は以下。

bugs.ruby-lang.org

話ついでに RuboCop の CI で落ちている jruby-head の方は以前出した Issue が JRuby 9.2.0.0 マイルストーンに入ったようなので静観している。

github.com


あとこの日の大きなイベントとしては RWC 2017 のため東京から島根に移動してした。

Rails 5.0以降のfind_byは引数にIntegerオブジェクトを渡したらエラー

RuboCop の Issue を見ていて、Rails 4.2 と Rails 5.0 以降で振る舞いの変わった AR.find_by の引数についての Cop への提案があって、Rails 4.2 は EOL が近いので Issue をクローズすると良いと思うと書いていたりした。

https://github.com/bbatsov/rubocop/issues/3994#issuecomment-340433895

その念のための動作検証に手元の Rails 4.2 アプリケーションの rails console を久しぶりに起動したりもしていた。

Factory Girl から Factory Bot にした

当初ネタだと思ってスルーしていた (Bot は紛らわしいので、Factory Guy とかかなとか) 。

実際 Factory Bot として既にリリースもされているので、そろそろ 24 Pull Requests の時期が近づいていることから、そちらにパッチを送っておいたりしてた。

github.com

sue445 さんの便利スクリプトべんりでした。

RuboCop 0.51.0 での Style/MixinUsage cop の不具合

RuboCop 0.51.0 で Style/MixinUsage の不具合報告をいくつかもらっていた。

github.com

既存の問題の分には PR を出してはいるが、この Cop を追加したときの PR でのやりとりに残っている経緯のとおり、対象を Rails アプリケーションの app ディレクトリ限定で考えていた対応のままの実装としてたのが良くなかった (Style にするにあたり、その他のユースケースに対応していなかった) 。

RuboCop 0.51.0 では、初期の頃の実装のように対象を Rails アプリケーションの app ディレクトリに絞って使ってもらうよう、.rubocop.yml に指定した方が良いかもしれない。

Rails/TopLevelInclude:
  Include:
    - app/**/*.rb