はじめに
Rails 6 に追加された新機能を試す第125段。 今回は、endless range bug fix
編です。
Rails 6.0.0 では、 (1..)
などのエンドレスな Range で include?
メソッドを呼ぶと RangeError
が発生するバグがありました。
Rails 6.0.1 以降では修正されています。
Ruby 2.6.5, Rails 6.0.1, Rails 6.0.0 で確認しました。
$ rails --version
Rails 6.0.1
今回は、 rails new
して、 app
ディレクトリの下にファイルを作って確認してみます。
Rails プロジェクトを作る
Rails プロジェクトを新たに作成します。
$ rails new rails_sandbox
$ cd rails_sandbox
スクリプトを作成する
Range#include?
を実行するスクリプトを作成します。
scripts/endless_range.rb
p (1..).include?(2)
Ruby 2.6.5 では
エラーになりません。
$ ruby -v scripts/endless_range.rb
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux-musl]
true
Rails 6.0.1 では
Rails 6.0.1 (以降) では、エラーになりません。
$ bin/rails runner scripts/endless_range.rb
Running via Spring preloader in process 263
true
Rails 6.0.0 では
RangeError
が発生します。
$ bin/rails runner scripts/endless_range.rb
...
2: from scripts/endless_range.rb:1:in `<main>'
1: from /usr/local/bundle/gems/activesupport-6.0.0/lib/active_support/core_ext/range/include_time_with_zone.rb:14:in `include?'
/usr/local/bundle/gems/activesupport-6.0.0/lib/active_support/core_ext/range/include_time_with_zone.rb:14:in `last': cannot get the last element of endless range (RangeError)
試したソース