なるようになるブログ

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

rails commit log流し読み(2018/05/22)

2018/05/22分のコミットです。

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

activesupport/CHANGELOG.md

ctivestorage/CHANGELOG.md


Merge pull request #32523 from kaspth/enumerable-index-with-extension

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

Enumerable moduleにindex_withメソッドを追加しています。

index_withはenumerableの値をkeyとしたHashを生成する事が出来ます。Hashのkeyはblockで指定、又は、メソッドの引数で指定出来ます。

post = Post.new(title: "hey there", body: "what's up?")
%i( title body ).index_with { |attr_name| post.public_send(attr_name) }
# => { title: "hey there", body: "what's up?" }

%i( title body ).index_with(nil)
# => { title: nil, body: nil }

Merge pull request #32936 from jacobsmith/image-variant-allow-disabling-options

activestorage/app/models/active_storage/variation.rbの修正です。

variantに渡す引数にfalse、または、nilを指定した場合、そのオプションをprocessorに渡さないよう修正しています。

例えば、avatar.variant(monochrome: false)とした場合、monochromeオプションは渡されなくなります。


Disable foreign keys during alter_table for sqlite3 adapter

activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rbの修正です。

sqlite3 adapterでalter_tableを実行する際に外部キー制約を無効化するよう修正しています。

sqlite3ではalter_tableを実行する際、変更後のschema及び元のデータをコピーし一時テーブルを作成、そして元のテーブルを削除し、最後に一時テーブルを元のテーブルにリネーム、というような流れで処理が行われます。

で、外部キー制約が設定されたままだと、そのテーブルの削除処理でエラーになってしまう為、処理中は外部キー制約を無効化するよう修正しています。


Allow Range#=== and Range#cover? on Range

Active Supportの修正です。

元々Range#===はRange#include?メソッドを使ってチェックを行っていたのですが、これをcover?`を使うようRuby側で変更が行われました(コミット)。

で、この影響でRuby 2.6でRange#===の挙動が変わってしまっていたのを修正しています(Range#cover?を追加して対応しています)。

参考:Feature #14575: Switch Range#=== to use cover? instead of include?


add CHANGELOG/Doc

activesupport/CHANGELOG.md、及び、Rails guideのActive Support Core Extensionsの修正です。

先のRangeの対応についてCHANGELOGにエントリーを追加、及び、guideに説明を追加しています。