なるようになるブログ

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

rails commit log流し読み(2018/07/15)

2018/07/15分のコミットです。

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


Ensure attribute is a symbol in the added? method

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

ActiveModel::Errors#added?で指定されたattributeが追加されているかチェックする前に、値をSymbolに変換するよう修正しています。

added?attributeにStringが指定された場合にも正しくチェック出来るようにする為。


Stub with Minitest instead of Mocha

Active Recordのテストの修正です。

mock処理に、mochaではなくMinitestのMockを使用するよう修正しています。


Fix document issue in active record callback about after_touch hook.

rails guideのActive Record Callbacksの修正です。

after_touchの項にあるexampleで、記載されていた実行結果と実際の内容が異なっていた(callbackの実行順が異なっていた)のを修正しています。


test_should_impose_childless_html_tags_in_html failure with JRuby

actionpack/test/controller/test_case_test.rbの修正です。

test_should_impose_childless_html_tags_in_htmlJRubyとCRubyとでcss selectorの指定をわけています。

+    if defined?(JRUBY_VERSION)
+      # https://github.com/sparklemotion/nokogiri/issues/1653
+      # HTML parser "fixes" "broken" markup in slightly different ways
+      assert_select "root > map > area + p"
+    else
+      assert_select "root > area + p"
+    end

assert対象のHTMLはタグの構成が正しくないHTML(areaタグの親がいない)なのですが、このHTMLをnokogiriでparseした場合の結果が、CRubyとJRubyで異なる結果になる為。

具体的には、<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><area><p>content</p></area></root>というようなHTMLをパースした場合、

# jruby / nekohtml
<html>
  <head></head>
  <body>
    <root><map><area><p>content</p></map></root>
  </body>
</html>
# mri / libxml2
<html>
  <body>
    <root><area><p>content</p></root>
  </body>
</html>

となるとの事です。

参考:Selector inconsistency between MRI and JRuby

rails commit log流し読み(2018/07/14)

2018/07/14分のコミットです。

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


Fix that detaching could purge

activestorage/lib/active_storage/attached/many.rbactivestorage/lib/active_storage/attached/one.rbの修正です。

ActiveStorage::Attached::{One,Many}#detachメソッドでattachmentsを削除するのにdestroy_all / destroyを使用していたのを、delete_all / deleteを使用するよう修正しています。

detachした際にblobは削除されないようにする為(削除用のcallbackが実行されないようにする為)のようです。


Implement ActiveStorage::Attached::{One,Many}#attach in terms of changes

Active Storageの修正です。

ActiveStorage::Attached::{One,Many}#attachメソッドで、既に存在しているrecordに存在しているblobを指定、かつrecordが変更されいないケース等でattach処理が正しく動作しないバグがあったのを修正しています。


Clear attachment changes on reload

activestorage/lib/active_storage/attached/model.rbの修正です。

Attached::Model#reloadメソッドを定義し、modelをreloadした際にattachmentが変更されかどうかの情報(@attachment_changes)をクリアするよう修正しています。


Update documentation for #pluck method [ci skip]

rails guideのActive Record Query Interfaceの修正です。

pluckメソッドについて説明している箇所に、複数テーブルからfieldsを取得出来る旨説明を追加しています。

rails commit log流し読み(2018/07/13)

2018/07/13分のコミットです。

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


e4e1b62 broke to_param handling:

actionpack/lib/action_controller/test_case.rbactivesupport/lib/active_support/core_ext/object/to_query.rbの修正です。

Merge pull request #33093 from rails/use-rack-to-dump-queryで、ActionController::TestRequestクラスでqueryを生成するのにHash#to_queryメソッドを使用していたのをRack::Utils.build_nested_queryを使用するよう修正したのですが、これを再度to_queryメソッドを使用するよう修正しています。

Rack::Utils.build_nested_queryを使用する事により、paramsのvalueにActive Recordのオブジェクトを指定した場合の結果が変わってしまった(post :foo, params: { user: User.first }を指定した場合、元々は{ "user" => "1" }になっていたのが{ "user": "#<User: ...>" }になってしまった)為。

代わりに、Hash#to_queryでArray([])を含まない場合にのみソートを行うようにして対応しています。


Merge pull request #33340 from ttanimichi/patch-1

actionview/lib/action_view/helpers/sanitize_helper.rbのdocの修正です。

SanitizeHelper.sanitizer_vendorメソッドのdocに、互換性のために残しておりRails 5.1で削除する旨コメントがされていたのですが、現状まだメソッドが残っているため、コメント内の削除予定Railsのバージョンを5.1から6に更新しています。


Fix analyzing new blobs from uploaded files on attach

activestorage/lib/active_storage/attached/model.rbの修正です。

upload fileをattachした際に、blobのanalyze処理が正しく行われないバグがあったのを修正しています。

rails commit log流し読み(2018/07/12)

2018/07/12分のコミットです。

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

activerecord/CHANGELOG.md


Merge pull request #28327 from rngtng/add-seed-dependency

activerecord/lib/active_record/railties/databases.rakeの修正です。

db:seed taskのdependencyload_config、及び、environmentを追加しています。

Railsを使用せずにActive Recordを使用している、かつload_config task内で独自のDB設定を行っているような場合に、load_config taskが必ずよばれるようにする為、との事です。


Remove overly-broad retry in ActiveStorage::PurgeJob

activestorage/app/jobs/active_storage/purge_job.rbの修正です。

ActiveStorage::PurgeJobretry_on StandardErrorの指定があったのを削除しています。

このretryをproductionで使用した事がない(Basecampが)為、とのことです。


Discard ActiveStorage::PurgeJobs for missing blobs

activestorage/app/jobs/active_storage/purge_job.rbの修正です。

ActiveStorage::PurgeJobdiscard_on ActiveRecord::RecordNotFoundの指定を追加しています。blobの削除処理でrecordが既に無い場合にエラーが発生するのを抑止するよう。


Enable Layout/EmptyLinesAroundBlockBody to reduce review cost in the future

.rubocop.ymlLayout/EmptyLinesAroundBlockBody copを追加、及び、各ファイルにcopを適応しています。

rails commit log流し読み(2018/07/11)

2018/07/11分のコミットです。

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


Fix stubbed methods in test cases

activerecord/test/cases/fixtures_test.rbactiverecord/test/cases/tasks/mysql_rake_test.rbの修正です。

stub用のメソッドで、戻り値の指定が不要な箇所で、戻り値を指定していたのを修正しています。

rails commit log流し読み(2018/07/10)

2018/07/10分のコミットです。

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


Add deprecations related to rails notes command to Changelog

railties/CHANGELOG.mdの修正です。

rake taskとして実装されていたrails notesrails commandとして実装した、Merge pull request #33220 from anniecodes/notes-commandの対応によりdeprecateになった機能(rake notesSOURCE_ANNOTATION_DIRECTORIES env等々)についてCHANGELOGにエントリーを追加しています。


Merge pull request #33309 from utilum/remove_unnecessary_mocha_stubs

Active Recordのテストの修正です。

不要なMochaのstub処理を削除しています。


Reduce mocking by testing value instead of method call

Active Recordのテストの修正です。

テストでstderr / stdoutをmockしている箇所があったのを、stderr / stdoutをStringIOで置き換えて、mockせずに値のチェックを行うよう修正しています。


Avoid unneeded expanded column aliases array caching

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

JoinDependency::Aliases#initializeでcolumn cacheを作成する際に、column + aliasを保持していたのを、columnの値だけ保持するよう修正しています。aliasはcolumnから取得出来る為。


Replace shallow mocks with Ruby classes

Active Recordの修正です。

mockを使っていた箇所で、RubyClassで置き換えが可能な箇所を、Classで置き換えるよう修正しています。

rails commit log流し読み(2018/07/09)

2018/07/09分のコミットです。

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

activerecord/CHANGELOG.md


Allow to explicitly specify whether to output Rails' log to stdout

railties/lib/rails/commands/server/server_command.rbの修正です。

rails serverでlogをstdoutに出力するかどうかをrails serverコマンドの引数で指定出来るようにしています。

rails serverコマンドに--no-log-to-stdoutを引数に指定した場合、developmentでもlogがstdoutに出力されないようになっています。


Raise an ArgumentError instead of a RuntimeError

activestorage/lib/active_storage/attached/changes/create_one.rbの修正です。

Attached::Changes::CreateOne#find_or_build_blobメソッドで不正な引数が指定された場合にRuntimeErrorをraiseしていたのをArgumentErrorをraiseするよう修正しています。


Fix rubocop offense introduced in 161ed37

railties/lib/rails/commands/server/server_command.rbの修正です。

rubocopの規約に違反している箇所があったのを修正しています。


Merge pull request #33280 from nkondratyev/fix/mysql-time-default-values

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

migrationファイルでdefaultcurrent_timestampを使用している、かつ、precisionを指定している(e.g. default: -> { "current_timestamp(6)" })場合に、schema dumpそのdefaultが正しく出力されない(current_timestampの指定が無くなってしまう)バグがあったのを修正しています。


Subsecond precision is not supported until MySQL 5.6.4

activerecord/test/cases/defaults_test.rbactiverecord/test/schema/mysql2_specific_schema.rbの修正です。

subsecond precisionが使えるかどうかのチェック処理に誤りがあったのを修正しています。


SQLite: Don't leak internal schema objects

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

SQLiteindexesメソッドで、SQLiteが内部で使用するschema objects(sqlite_ではじまるobject)が含まれてしまっていたのを、含まれないよう修正しています。