なるようになるブログ

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

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

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

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


Remove blank Content-Type from GCS direct upload headers

activestorage/lib/active_storage/service/gcs_service.rbの修正です。

GCSにdirect uploadする際に、Content-Type headerに空を明示的に指定していたのを、指定しないよう修正しています。

JS側で不要なContent-Type headerを送信しないよう、Clear Blob's type before sending itで修正済みで、サーバ側で対応する必要はなくなった為。


Allow selectively purging attached blobs

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

blobを複数attachしている際に、一つblobをpurgeすると他のblobもまとめてpurgeされてしまっていたのを、選択したblobのみpurgeするよう修正しています。


Update test to reflect GCS direct upload header change

activestorage/test/controllers/direct_uploads_controller_test.rbの修正です。

先のContent Type headerの修正の際にテストの修正が漏れていたのを対応しています。


Provide an alternative PDF previewer based on Poppler

Active Storageの修正です。

PDFのpreviewに使用出来るライブラリがmupdfだけだったのを、Popplerも使用出来るようサポートを追加しています。

mutoolはライセンスがAGPLになっており、使えない環境もある為、ライセンスがGPLのPopplerも使用出来るようにしたとの事です。PR、Herokuの中の人からきていたので、HerokuだとライセンスがAGPLのライブラリが使えないとかですかねえ。


Revert "PERF: Recover changes_applied performance (#31698)"

changesメソッドは使用せず、mutation trackerによって管理されている値を使用するよう修正した、PERF: Recover `changes_applied` performanceをRevertしています。

性能改善の対応だったのですが、次のコミットで違うアプローチで対応されています。


Don't call changes in changes_applied unless required

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

Dirty#changes_appliedメソッドで@attributesが定義されていない場合はchangesメソッドを使用しいないよう修正しています。

元々、changesメソッドが遅いことによりsaveの性能が劣化してしまっていた為、不要な際にchangeを呼ばないようにすれば十分だろう、という事で修正されています。


[ci skip] Hide internal docs from root AS module

activesupport/lib/active_support/core_ext/object/json.rbのdocの修正です。

api docのActiveSupport moduleのトップページにlib/active_support/core_ext/object/json.rbに記載されているdocが誤って表示されてしまっていたのを、表示されないよう修正しています。

rails commit log流し読み(2018/03/06)

2018/03/06分のコミットです。

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


Generate root-relative paths in Active Storage disk service URL methods

Active Storageの修正です。

disk serviceでfileのURLを生成する際に、host名を含む絶対パスでURLを生成ていたのを、host名を含まない相対パスで生成するよう修正しています。

host名はconfigで指定出来るようになっていたのですが、それだと複数サブドメインを使用しているアプリの場合に問題になる為、host名はURLに含まないようにしたとの事です。


Fix that after commit callbacks on update does not triggered when optimistic locking is enabled

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

optimistic lockingを使用している場合に、update処理後にafter commit callbackが実行されないバグがあったのを修正しています。


Correct the ActiveStorage::Service#download_chunk docs [ci skip]

activestorage/lib/active_storage/service.rbのdocの修正です。

ActiveStorage::Service#download_chunkメソッドのdocに記載されている引数が実際の引数と異なっていたのを修正しています。


Update skip_after_callbacks_if_terminated documentation

activesupport/lib/active_support/callbacks.rbのdocの修正です。

define_callbacksメソッドのdoc内、skip_after_callbacks_if_terminatedオプションについて説明している箇所にterminatorオプションが指定された場合のみterminate処理が行われる旨説明が記載されていたのですが、今はデフォルトでterminatorが指定されており、terminatorオプションが指定されなくてもterminate処理は実行される為、その旨説明を修正しています。


Delete dependent attachments with record

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

recordを削除した際にattachmentsも削除されるよう、associationの定義にdependentオプションを追加しています。

が、これは直後のコミットで修正されています。


Fix purging dependent blobs when attachments aren't loaded

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

attachmentsをdependentで削除していたのをやめて、callbackで明示的にdetachを呼び出して削除するようにしています。

attachmentがロードされていない場合にも正しく削除されるようにする為、のようです。


whitelist NULLS { FIRST | LAST } in order clauses

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

ORDERに指定できる安全なSQLホワイトリストにNULLS FIRST、及び、NULLS LASTを追加しています。asc / desc同様に、orderに普通に指定する事があるqueryの為。


Allow Capybara 3.x (#32151)

Gemfileactionpack/lib/action_dispatch/system_test_case.rbrailties/lib/rails/generators/rails/app/templates/Gemfile.ttの修正です。

System testで使用出来るCapybaraのバージョンが2系に固定されていたのを、3系も使用出来るよう修正しています。

Capybara 3.0.0のrc1が出た為。参考:https://github.com/teamcapybara/capybara/blob/master/History.md#version-300rc1


update comment to reflect new supported patterns [ci skip]

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

COLUMN_NAME_ORDER_WHITELIST定数についてのコメントに記載されているサポートしているパターンの一覧に、NULLS FIRST、NULLS LASTを使用した場合のパターンを追加しています。


Update Gemfile.lock to reflect Capybara 3.x

Gemfile.lockの修正です。

先のCapybara 3系を使用出来るようにした対応でGemfile.lockの更新が漏れていたのを修正しています。


Fix dependence on has_one/belongs_to relationships

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

has_one / belongs_to associationを使用して、dependentdestroyを指定している場合、元々はassociationの削除結果をチェックしておらず、associationの削除に失敗しても自身の削除は実行されていました。

これを、associationの削除結果をチェックし、削除に失敗した場合、自身の削除処理を行わないよう修正しています。

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

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

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

railties/CHANGELOG.md


Fix actionview tests execution

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

テスト内で使用しているcontrollerの親クラスをActionController::Baseに統一しています。

元々はテスト内で定義していたApplicationControllerを親クラスにしていました(ApplicationControllerの親クラスがActionController::Baseになっていた)。

が、他のテスト内で定義されているcontrollerではActionController::Baseが親になっており、合わせないとbin/testでテストを実行した際にTypeError(superclass mismatch for class TestController (TypeError))になってしまう為、合わせるよう修正しています。


Fix occurrences Fixnum|Bignum

Fixnum / Bignumについて参照している箇所をIntegerに修正しています。


Fix routes command tests broken in e137831726.

railties/test/commands/routes_test.rbの修正です。

Merge Previews/Variants controller into one Representations controller.の対応の影響でroutesのテストがエラーになっていたのを修正しています。


Merge pull request #32058 from gsamokovarov/rails-server-x-option

railtiesの修正です。

rails serverコマンドにRack server nameをオプションなしで渡すのがdeprecateになりました。今後は-uオプションを指定する必要があります。

$ ./bin/rails s puma
DEPRECATION WARNING: Passing the Rack server name as a regular argument is deprecated and will be removed in the next Rails version. Please, use the -u option instead. (called from new at /home/yaginuma/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/thor-0.20.0/lib/thor.rb:383)

オプション無しの場合、Rack serverではなくenvironmentを渡せる、と勘違いしてエラーになってしまう事があったらしく、紛らわしいのでオプション指定を必須にしよう、という事で修正されました。

合わせて、Rack server nameをタイポした場合にサジェストがされるようになりました。

$ ./bin/rails s -u pum
Could not find server "pum". Maybe you meant "puma" or "cgi"?
Run `rails server --help` for more options.

[ci skip] Fix grammar in delegate, private: true docs.

activesupport/lib/active_support/core_ext/module/delegation.rbのdocの修正です。

delegateメソッド内のprivateオプションについて説明している箇所のグラマーの修正、及び、不要なexampleの削除等を行っています。


Avoid purging attached blob when replacing it with itself

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

blobのreplace処理で、replaceするアタッチメントが元々保持していたblobと同じだった場合に、そのblobのpurge処理が行われないよう修正しています。


Fix "NameError: undefined local variable or method `host'"

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

Rails::Server#served_urlメソッドで存在しないメソッドを参照していたのを修正しています。


Handle another case where a blob might be erroneously purged

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

blobのreplace処理で、アタッチメントをblobに変換してから元のblobと同じか比較するよう修正しています。アタッチメントがStringの場合等に正しくreplace処理が行われるようにする為。


id_in_database should be respected as primary key value for persisted records

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

Locking::Optimistic moduleのrecord更新処理で使用するprimary keyの値に、オブジェクトで保持していた値を使用していたのを、DBで保持している値を使用するよう修正しています。primary keyの値を意図的に書き換えた場合に、オブジェクトで保持している値を使用すると意図しない動作になるため。


Refactor _substitute_values to be passed attribute names and values

Active Recordの修正です。

_substitute_valuesメソッドにattributeのnameとvalueを渡せるようリファクタリングしていいます。後々のコミットで必要な為、のようです。


Prefer _update_record than update_all for updating a record

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

recordの更新処理にupdate_allメソッドを使っている箇所があったのを、_update_recordメソッドを使用するよう修正しています。


Introduce _delete_record and use it for deleting a record

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

際にrecordの削除処理を行う為の_delete_recordメソッドを追加し、各moduleで左記メソッドを使うよう修正しています


Introduce _update_row to decouple optimistic locking concern from Persistence module

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

レコード更新の為の_update_rowメソッドを追加し、各moduleで左記メソッドを使うよう修正しています。

元々Persistence moduleの更新処理でOptimistic Lockingが使用されている場合の考慮まで行っていたのですが、メソッドを切り出す事により、Optimistic Lockingを使用している場合の処理をLocking moduleで定義出来るようにしています。


Deprecate safe_level of ERB.new in Ruby 2.6

railties/lib/rails/generators/migration.rbtasks/release.rbの修正です。

ERB.newの引数に非キーワード引数を使用するのがRuby 2.6でdeprecateになった為、Ruby 2.6以上ではERB.newの引数にキーワード引数を使用するよう修正しています。

参考:ruby/NEWS

Merge pull request #32170 from koic/deprecate_safe_level_of_erb_new_in_ruby_2_6


Remove extra arg passed to Rails::Command::RoutesTest#run_routes_command

railties/test/commands/routes_test.rbの修正です。

routesコマンドのテストでコマンドに不要な引数を渡していた箇所があったのを修正しています。

rails commit log流し読み(2018/03/04)

2018/03/04分のコミットです。

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


Extract all base_class.name as polymorphic_name

Active Recordの修正です。

polymorphic nameを取得する為のpolymorphic_nameメソッドをInheritance moduleに追加しています。

元々はbase_class.nameから取得するようになっていたのですが、polymorphic nameを変更したい場合に、まとめて修正出来るようにする為にメソッドに切り出したようです。


Eager loading with polymorphic associations should behave consistently

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

eager loadの際にpolymorphic associationsのloadエラーを無視するようになっていたのを、エラー(EagerLoadPolymorphicError)をraiseするよう修正しています。

元々は、associationが必要かどうかに関わらずloadしたい際にエラーにならないようにする為に無視するようにしていたのですが、それは別の修正で対応済みの為、処理の一貫性を保つ為、エラーをraiseするよう戻しています。


id_in_database do not return nil value for persisted record

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

UniquenessValidator#validate_eachメソッドでrecordのid_in_databaseメソッドを呼び出した際に結果がnilの場合にrecordのidを返すようにしていたのを削除しています。今はid_in_databasenilを返す事は無い為。


Merge Previews/Variants controller into one Representations controller.

Active Storageの修正です。

Previews/Variants controllerをRepresentations controllerにマージしています。

modelはそういう設計になっていた(Representable moduleがvariantpreviewメソッドを提供している)為、controllerもそれに合わせる為修正しています。


Fix links in the psql guide [ci skip]

rails guideのActive Record and PostgreSQLの修正です。

functions and operators及びpgcrypto generator functionへのリンクが変わっていたのを修正しています。

rails commit log流し読み(2018/03/03)

2018/03/03分のコミットです。

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


Deprecate active_support/core_ext/hash/compact

Hash#compactHash#compact!メソッドの実装を削除し、active_support/core_ext/hash/compactをrequireするのをdeprecateにしています。

同等のメソッドがRuby標準で提供されており、Active Supportでメソッドを提供する必要が無くなった為。


Deprecate "active_support/core_ext/numeric/inquiry"

Numeric#positive?Numeric#negative?メソッドの実装を削除し、active_support/core_ext/numeric/inquiryをrequireするのをdeprecateにしています。

同等のメソッドがRuby標準で提供されており、Active Supportでメソッドを提供する必要が無くなった為。


Fix RDoc formatting [ci skip]

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

javascript_tagメソッドのdoc内nonceオプションについて説明している箇所のフォーマットが崩れていたのを修正しています。

rails commit log流し読み(2018/03/02)

2018/03/02分のコミットです。

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


ConsoleFormatter is no longer used as a class

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

ConsoleFormatterをclassからmoduleに変更しています。今はnamespaceとしてだけ使われており、classとしては使われていない為。


Use delegate private: true for SchemaCreation

activerecord/lib/active_record/connection_adapters/abstract/schema_creation.rbactiverecord/lib/active_record/connection_adapters/mysql/schema_creation.rbの修正です。

可視性をprivateにしたいメソッドをdelegateにするのに、delegateメソッドのprivate: trueオプションを使用するよう修正しています。


Don't expose verbose? helper method

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

内部でだけ使用するverbose?メソッドの可視性をprivateに変更しています。


Remove staled comment for JoinDependency#initialize

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

JoinDependency#initializeメソッドのdocを削除しています。

doc内に説明されている引数と実際の引数が異なっているのと、そもそもJoinDependencyクラスは内部用クラスな為。


PostgreSQL adapter also supports bulk alter since #31331 [ci skip]

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

change_tableメソッドのbulkオプションについて説明している箇所に、MySQL adapterでのみサポートしている旨説明が記載されていたのですが、Add bulk alter support for PostgreSQLPostgreSQL adapterでもサポートされたので、その旨説明を修正しています。


Ruby 2.4: take advantage of String#unpack1

unpackした値を取得するににunpack + first(または[0])を使用していたのを、String#unpack1メソッドを使用するよう修正しています。

参考:Feature #12752: Unpacking a value from a binary requires additional '.first'


Remove unnecessary respond_to?(:report_on_exception) checking

各テストでThread.report_on_exceptionの値を変更する前にreport_on_exceptionが定義されているかチェックしていたのを、チェックしないよう修正しています。masterはRuby 2.4以上をサポートする為、必ずreport_on_exceptionは定義されている為。

rails commit log流し読み(2018/03/01)

2018/03/01分のコミットです。

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

railties/CHANGELOG.md


Handle file checksumming errors

activestorage/app/javascript/activestorage/direct_upload.jsの修正です。

FileChecksum.createでエラーがおきた際にそのエラーを無視していたのを、callbackを呼び出すよう修正しています。


Rebuild activestorage.js

activestorage/app/assets/javascripts/activestorage.jsの修正です。

先の対応の際にactivestorage.jsの作り直しが漏れていたのを行っています。


Add --expanded option to "rails routes"

Action Pack、railtiesの修正です。

rails routesコマンドに結果を縦に表示する為の--expandedオプションを追加しています。psql--expandedと同じ形です。

./bin/rails routes --expanded
--[ Route 1 ]------------------------------------------------------------
Prefix            | users
Verb              | GET
URI               | /users(.:format)
Controller#Action | users#index
--[ Route 2 ]------------------------------------------------------------
Prefix            |
Verb              | POST
URI               | /users(.:format)
Controller#Action | users#create
--[ Route 3 ]------------------------------------------------------------
Prefix            | new_user
Verb              | GET
URI               | /users/new(.:format)
Controller#Action | users#new
--[ Route 4 ]------------------------------------------------------------
Prefix            | edit_user
Verb              | GET
URI               | /users/:id/edit(.:format)
Controller#Action | users#edit
--[ Route 5 ]------------------------------------------------------------
Prefix            | user
Verb              | GET
URI               | /users/:id(.:format)
Controller#Action | users#show
--[ Route 6 ]------------------------------------------------------------
Prefix            |
Verb              | PATCH
URI               | /users/:id(.:format)
Controller#Action | users#update
--[ Route 7 ]------------------------------------------------------------
Prefix            |
Verb              | PUT
URI               | /users/:id(.:format)
Controller#Action | users#update
--[ Route 8 ]------------------------------------------------------------
Prefix            |
Verb              | DELETE
URI               | /users/:id(.:format)
Controller#Action | users#destroy

Clean up RoutesTest a bit

railties/test/commands/routes_test.rbの修正です。

RoutesTestから不要なrequireを削除、重複していたtest prefixの削除等を行っています。