なるようになるブログ

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

rails commit log流し読み(2019/04/12)

2019/04/12分のコミットです。

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

activerecord/CHANGELOG.md


Updated the description of add_development_dependency [skip ci]

rails guideのGetting Started with Enginesの修正です。

add_development_dependencyで指定したgemについて説明している箇所で、指定されたgemはtestでのみ使用される旨説明が記載されていたのを、developmentでも使われる旨説明を修正しています。


Code is enclosed by code block [skip ci]

rails guideのGetting Started with Enginesの修正です。

example codeのcode blockにlanguageが指定されていなかったのを修正しています。


Merge pull request #35932 from takakuda/feature/adjust_nodoc_style

Layout/SpaceBeforeComment copを指定、及び、各ファイルにcopを指定しています。


Merge pull request #35933 from kamipo/refactor_dirty_tracking

Active Modelの修正です。

dirty trackingにはivar backendとattributes backendという2つのtracking機能があり、どちらのtrackingも実行されるようになっており、結果dirty trackingの処理が遅くなっていました。

ただ、機能としては両方一緒に使用する事は出来ず、attributesのtrackingが実行されている場合、ivarによるtrackingは不要でした。そのため、ivarによる変更で、必要な処理だけを追跡する新規のtrackerを作成し、そちらを使用するようリファクタリングしています。これにより、dirty trackingが2x ~ 30x高速化されているとの事です。


Address new cop offence in railties

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

Layout/SpaceBeforeComment copを追加した際の対応で修正漏れがあったのを対応しています。


improves the reloading disabled error message

activesupport/lib/active_support/dependencies/zeitwerk_integration.rbの修正です。

Zeitwerkでreloadが無効化になっている(config.cache_classesがtrueになっている)場合にそれがわかるよう適切なエラーメッセージを表示するよう修正しています。


Merge pull request #35938 from soartec-lab/update_guide_engine_sample_code

rails guideのGetting Started with Enginesの修正です。

modelのexampleコードで、実際に生成されるコードと合わせてmoduleもコードに含むよう修正しています。


Merge pull request #35922 from michaelglass/move-sqlite-3-database-statements-into-database-statements

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

SQLite3のlast_inserted_idメソッドの可視性をprivateに変更、及び、SQLite3Adapterで定義されている各メソッドをSQLite3::DatabaseStatements`に移動しています。

MySQL adapterだとlast_inserted_idメソッドの可視性はprivateになっており、adapter間で振る舞いを合わせる為。


Merge pull request #35921 from Shopify/deduplicate-activerecord-strings

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

String#-@を使用して重複しているString objectを減らすよう修正しています。


Merge pull request #35838 from yahonda/more_than_1000_inlist

activerecord/lib/arel/visitors/oracle.rbactiverecord/lib/arel/visitors/oracle12.rbの修正です。

Oracleで、INの中の個数が1000を越えた場合にINを分割するよう修正しています。

OracleにはINの中の個数が1000までという制限があり、1001以上の値を指定した場合にエラーにならないようにする為。


Merge pull request #35919 from Shopify/simplify-define_url_helper

actionpack/lib/action_dispatch/routing/route_set.rbの修正です。

NamedRouteCollection#define_url_helperメソッドで、moduleにメソッドを定義するのにmodule_evalを使用しないようリファクタリングしています。処理高速化の為。


Merge pull request #35908 from soartec-lab/update_guide_engine_app_dir

rails guideのGetting Started with Enginesの修正です。

app Directoryの項、app配下の各ディレクトリについて詳細な説明を行うよう修正しています。


Auto-correct Style/RedundantBegin cop offences

activesupport/lib/active_support/dependencies/zeitwerk_integration.rbの修正です。

rubocopの設定に違反している箇所があったのをまとめて修正しています。


Merge pull request #35865 from jhawthorn/template_file_source

Action Viewの修正です。

テンプレートのソースを管理する為のActionView::Sources::Fileクラスを追加しています。

元々view テンプレートのソースはコンパイル後に削除されてしまっていました。再度ソースが必要な場合、再度テンプレートの検索&読み込みを行っていたのですが、これは上手くいかないケース(元のテンプレートが正しく取得出来ない)がありました。また、このせいでソースをミュータブルなデータとして扱う必要がありました。

で、これらの問題を解決するため、Merge pull request #35119 from rails/file-templateActionView::FileTemplate classというソースを保持したテンプレートクラスを別途追加し、そこでソースを管理するようにしました。

この対応はそのコミットの改善対応で、ソースをテンプレートではなく、"Template source"という別の概念で管理するように改善しています。これにより、ActionView::FileTemplateは削除され、ドライブから読み込んだソースを管理する為のActionView::Template::Sources::Fileクラスを追加し、そちらでソースの管理を行うようにしています。


Rename "method" to "matcher" in map block

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

ActiveModel::AttributeMethods::ClassMethods::AttributeMethodMatcherインスタンスを保持する変数名がmethodになっていたのを、matcherに修正しています。


Merge pull request #32541 from sergiogomez/remove-lock-from-params-wrapper

actionpack/lib/action_controller/metal/params_wrapper.rbの修正です。

ParamsWrapper::Options#modelメソッドでmodelロード時に排他ロックを入れていたのを削除しています。

modelのロードが複数回行われるのを避ける為のロックだったのですが、このロックのせいでデッドロックになってしまうという問題が発生した為削除しています。


Refactor around sql_type metadata and column

Active Recordの修正です。

sql_type metadataとcolumn関連のリファクタリングとして、不要なインスタンス変数の削除、compatibility codeをcolumnに移動、等を行っています。


Merge pull request #28830 from kamipo/dont_regard_extension_block_as_scope

activerecord/lib/active_record/associations/builder/association.rbactiverecord/lib/active_record/associations/builder/collection_association.rbの修正です。

associationにextension blockを指定している場合に、automatic_inverse_ofが無効化されてしまっていたのを無効化しないよう修正しています。

associationにscopeが指定された場合はautomatic_inverse_ofは無効化されるようになっており、その挙動と同様にしていたらしいのですが、extension blockはscopeではなくscopeと挙動を合わせる必要は無いため上記修正を行っています。


Merge pull request #35920 from kamipo/dont_call_commit_callbacks_for_invalid_record

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

validationエラー等でrecordが保存されてなかった場合もafter_commit / after_rollback callbacksが実行されていたのを、recordの保存に失敗した場合はそれらのcallbacksは実行しないよう修正しています。


Merge pull request #35918 from kamipo/lazy_sync_with_transaction_state_on_destroy

activerecord/lib/active_record/core.rbactiverecord/lib/active_record/persistence.rbの修正です。

削除処理で、他の処理同様にtransaction stateを遅延同期するよう修正してます。削除処理の途中でエラーになった場合等に、不要なrollback処理が呼ばれないようにする為。


Squash warning: instance variable @filename not initialized

actionview/lib/action_view/template/handlers/erb/erubi.rbの修正です。

instance variable @filename not initializedのwarningが出ていたのを修正しています。


Remove unused method_name from AttributeMethodMatch

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

AttributeMethodMatchから使用していない:method_nameを削除しています。