なるようになるブログ

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

rails commit log流し読み(2017/08/18)

2017/08/18分のコミットです。

CHANGELOGへの追加はありませんでした。


Add missing test for Blob#purge

activestorage/test/models/blob_test.rbの修正です。

不足していたBlob#purgeメソッドについてのテストを追加しています。


Add note about JSON/JSONB serialization changes

rails guideのA Guide for Upgrading Ruby on Railsの修正です。

Upgrading from Rails 4.2 to Rails 5.0JSON/JSONBのserialize処理の変更内容についての説明を記載したChanges with JSON/JSONB serializationの項を追加しています。

4.2系までは値をStringで持っていた場合、それがHashに変換されるようになっていたのですが、5.0以降はStringのまま扱われるようになりました。これ自体は意図的な挙動なのですが、この挙動変更に関するissueが多くあった為、Upgrading Guideに説明を追加するようにしています。

詳細はPostgres JSONB column is returned as string instead of hash in Rails 5 RC2 辺りを参照。


Merge pull request #30275 from msimonborg/deep_merge_patch

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

Hash#deep_merge!のりファクリングを行っています。

keyの重複チェックを独自ロジックで行っていたのを、Ruby標準のHash#merge!にblockを渡す形で行うよう修正しています。


Add test cases for where.not with polymorphic association

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

where.notのpolymorphic associationを指定した場合のテストを追加しています。

元々は動作していなかったのですが、Refactor Active Record to let Arel manage bind paramsの対応の影響で動作するようになったので、テストだけを追加しています。


Restore to_sql to return only SQL (#29945)

Active Recordの修正です。

Refactor Active Record to let Arel manage bind paramsto_sqlのメソッドの挙動が変わった(sqlだけでなくbindsを返すようになった)のを、sqlだけを返すよう修正しています。

to_sqlはpublic APIなので、互換性の為。合わせてto_sql_and_bindsメソッドを追加し、bindsが必要な場合は左記メソッドを使用するようにしています。


Add test cases that class level destroy, delete, and update are affected by scoping (#29997)

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

class revelのdestroydelete、及び、updateメソッドが`scopingの影響を受ける事を確認するテストを追加しています。

現状は上記挙動が仕様の為、挙動が意図せず変わってしまうのを防ぐ為にテストを追加しています。


Restore the ability that SQL with binds for insert, update, and delete (#29944)

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

insertupdatedeleteメソッドの引数にbindsを追加しています。

Refactor Active Record to let Arel manage bind paramsの対応でbinds引数が削除されたのですが、上記メソッドはpublic APIの為、下位互換の為に引数を戻しています。


Add deterministic sorting order for test_taking_with_a_number

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

test_taking_with_a_numberでassociationを取得する際に、idでsortするよう修正しています。

sortしないと結果が不定になり、seedによってはテストが失敗してしまう為。


Improve migration/column_attributes_test.rb (#25286)

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

test_unabstracted_database_dependent_typesがPostgresSQLの場合も実行されるよう修正、及び、SQLite3 でchange_columnに元のカラムと異なるprecisionscaleを指定した場合のテストを追加しています。


Simplify ActiveModel::Errors#generate_message

activemodel/lib/active_model/errors.rbの修正です。

ActiveModel::Errors#generate_messageメソッドのりファクリングとして、下記を行っています。

  • @base.class.respond_to?(:i18n_scope)を一度だけ呼ぶよう修正
  • @base.class.i18n_scopeが一度だけ呼ばれるよう修正
  • 不要なflatten!compactの呼び出しを削除