読者です 読者をやめる 読者になる 読者になる

なるようになるブログ

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

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

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

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

activerecord/CHANGELOG.md


Deprecate reflection class name to accept a class

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

reflectionのclass_nameオプションにClassを渡すのがdeprecateになりました。今後は必ずStringで渡す必要があります。

# NG
belongs_to :client, class_name: Company

# OK
belongs_to :client, class_name: 'Company'

Classを指定するとmodelのeager loadが発生してしまい、循環依存になってしまう可能性が高い為よくないだろう、という事でdeprecateになったようです。


Test --skip-git generator option

railties/test/generators/app_generator_test.rbの修正です。

rails newコマンドに--skip-gitオプションを指定した場合のテストを追加しています。

が、実は既に同じテストがあり、後ほどreverされています。


activerecord/test: Fix Mysql2ConnectionTest#test_execute_after_disconnect

activerecord/test/cases/adapters/mysql2/connection_test.rbの修正です。

disconnect実行後にSQLをexecuteした場合にエラーになる事を確認するテストで、エラーのクラスがMysql2::Errorである事を確認するようassertionを追加しています。


Suppress deprecation message to has_and_belongs_to_many only once

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

has_and_belongs_to_manyclass_nameオプションにClassを指定した場合、先ほど対応されたdeprecateメッセージが3回表示されてしまっていたので、一度だけ表示されるよう修正しています。


Improve deprecation message for deprecated reflection class name

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

reflectionのclass_nameオプションにClassを渡した際のdeprecationメッセージ内の、変更後の対応内容について記載している箇所にexampleが記載されていたのを、具体的な対応内容を表示するよう修正しています。

            Please pass the class name as a string:
-            `belongs_to :client, class_name: 'Company'`
+            `#{macro} :#{name}, class_name: '#{options[:class_name]}'`

sqlite3_mem tests are broken since 79887593c18919fed49f441d64236362cb755872

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

create_all taskのテストで、establish_connectionメソッドの呼び出しをstubするよう修正しています。

reestablish previous connection after creating all databasescreate_all taskでestablish_connectionメソッドを呼び出して元のconnectionの再接続を行うようにしたのですが、in_memory databaseを使用している場合再接続が出来ず(connectionが閉じた時点で最初に作成したin_memory dbが消えてしまう為。多分)エラーになっていた為、呼び出しをstubするようにしたようです。


Reconnecting AR::Base's connection breaks sqlite3_mem tests

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

connection接続に関するnotificationを確認するテストで、ActiveRecord::Baseのconnectionの再接続をしていたのを、テスト用のmodelを作成し、そちらで再接続処理を行うよう修正しています。

こちらも先ほどのコミット同様、in_memory databasesを使用している場合にActiveRecord::Baseのconnectionを切断してしまうと、DB自体が消えてしまうため。多分。


Use temporary connection pool for the tests clearing AR::Base's active_connections

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

query cacheのテストで、active connectionをclearする際に、元々保持していたconnectionとは別にtempraryのconnetion poolを作成し、そちらをclearするよう修正しています。そして、テスト終了後に元のconnectionを再度使用するようにしています。元のconnectionが失われてしまうと、in_memory databaseを使用している場合に最初に作成したDBに再接続出来ない為、のようです。


Make time travel work with subclasses of Time/Date/Datetime

activesupport/lib/active_support/testing/time_helpers.rbの修正です。

time travel使用後にTime/Date/Datetimeの子クラスでtravel対象のメソッドを呼び出した際に、その子クラスのインスタンスではなく、親クラスのインスタンスが返ってきてしまっていたのを、呼び出した子クラスのインスタンスを返すよう修正しています。

# before
Zip::DOSTime.now.class
# => Zip::DOSTime
travel_to 1.day.ago
Zip::DOSTime.now.class
# => Time

# after
Zip::DOSTime.now.class
# => Zip::DOSTime
travel_to 1.day.ago
Zip::DOSTime.now.class
# => Zip::DOSTime

oops! :scream_cat:

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

使用するpoolに誤りがあったのを修正しています。先ほどのquery cacheのテストの修正時のタイポ修正。


Merge pull request #27628 from y-yagi/revert_27619

rails newコマンドに--skip-gitオプションを指定した場合のテストを追加した、Test --skip-git generator optionをrevertしています。同様のテストが既にあった為。


Merge pull request #27613 from prathamesh-sonpatki/add-missing-entry-to-release-notes

rails guideのRuby on Rails 5.0 Release Notesの修正です。

renderメソッドにblockを渡せるようにした、Make possible to use blocks with short version of render partialについてのエントリーを追記しています。