なるようになるブログ

読書感想文かrailsについてかrubyについてか

rails commit log流し読み(2017/10/21)

2017/10/21分のコミットです。

CHANGELOGにのったコミットは以下の通りです。

activesupport/CHANGELOG.md


Add test cases for type and foreign_type in the reflections

activerecord/test/cases/reflection_test.rbの修正です。

reflectionsのtypeforeign_typeが正しく取得出来る事を確認するテストを追加しています。


Hash#slice is in Ruby 2.5+

activesupport/lib/active_support/core_ext/hash/slice.rbの修正です。

Hashsliceメソッドが定義されていない場合のみメソッドを定義するように修正しています。Ruby 2.5ではRuby本体にHash#sliceメソッドが定義されている為。

参考:hash.c: Add Hash#slice


Move HWIA specific logic for slice and slice! to HWIA class

activesupport/lib/active_support/core_ext/hash/slice.rbactivesupport/lib/active_support/hash_with_indifferent_access.rbの修正です。

Hash#slice#slice!メソッドにselfがHashWithIndifferentAccessの場合の対応が含まれていたのを削除し、代わりにHashWithIndifferentAccess#sliceHashWithIndifferentAccess#slice!メソッドを追加し、そちらで対応するよう修正しています。


Let Hash#slice return a Hash

activesupport/lib/active_support/core_ext/hash/slice.rbの修正です。

Hash#sliceメソッドが必ずHashクラスのインスタンスを返すよう修正しています。

-    keys.each_with_object(self.class.new) { |k, hash| hash[k] = self[k] if has_key?(k) }
+    keys.each_with_object(Hash.new) { |k, hash| hash[k] = self[k] if has_key?(k) }

元々はself.classを返すようになっていたのですが、Rubyに組み込みのHash#sliceと挙動を合わせる為との事です。挙動が非互換なのですが、恐らく問題になるであるHashWithIndifferentAccessについては対応がされている(先のコミットでメソッドが追加されている)ので、大丈夫だろうという事で対応されています。


[Railties] require_relative => require

railtiesの修正です。

コンポーネント内のファイルのロードにrequire_relativeを使用していたのを、requireを使用するよう修正しています。

requireよりrequire_relativeの方が高速な為、Using require_relative in the Rails codebaseで使える箇所は一通りrequire_relativeを使うよう対応がされました。ただ、2.4までのRubyだと、require_relativeシンボリックリンク先のファイルをロード出来ない(Rubyのインストール先がシンボリックリンクを使用している場合ファイルをロード出来ずエラーになる)、という問題があった為、require_relativeを使用するのをやめるようにしています。

なお、上記ファイルロードの問題はRuby 2.5で対応済みです。

参考:

以降各コンポーネントに対して同様の対応が行われています。


[Active Support] require_relative => require

Active Supportの修正です。

コンポーネント内のファイルのロードにrequire_relativeを使用していたのを、requireを使用するよう修正しています。


[Active Model] require => require_relative

Active Modelの修正です。

コンポーネント内のファイルのロードにrequire_relativeを使用していたのを、requireを使用するよう修正しています。


[Active Record] require => require_relative

Active Recordの修正です。

コンポーネント内のファイルのロードにrequire_relativeを使用していたのを、requireを使用するよう修正しています。


[Action Pack] require => require_relative

Action Packの修正です。

コンポーネント内のファイルのロードにrequire_relativeを使用していたのを、requireを使用するよう修正しています。


[Action View] require_relative => require

Action Viewの修正です。

コンポーネント内のファイルのロードにrequire_relativeを使用していたのを、requireを使用するよう修正しています。


[Action Mailer] require_relative => require

Action Mailerの修正です。

コンポーネント内のファイルのロードにrequire_relativeを使用していたのを、requireを使用するよう修正しています。


[Active Job] require_relative => require

Active Jobの修正です。

コンポーネント内のファイルのロードにrequire_relativeを使用していたのを、requireを使用するよう修正しています。


[Action Cable] require_relative => require

Action Cableの修正です。

コンポーネント内のファイルのロードにrequire_relativeを使用していたのを、requireを使用するよう修正しています。


[Active Storage] require_relative => require

Active Storageの修正です。

コンポーネント内のファイルのロードにrequire_relativeを使用していたのを、requireを使用するよう修正しています。