なるようになるブログ

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

rails commit log流し読み(2020/01/12)

2020/01/12分のコミットです。

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

activerecord/CHANGELOG.md


Merge pull request #34727 from higher-pixels/add_missing_to_where_chain

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

関連付けが無くなっているレコードを取得する為のmissingメソッドを追加しています。

Post.where.missing(:user)
#=>  Post Load (0.2ms)  SELECT "posts".* FROM "posts" LEFT OUTER JOIN "users" ON "users"."id" = "posts"."user_id" WHERE "users"."id" IS NULL LIMIT ?  [["LIMIT", 11]]
#=> #<ActiveRecord::Relation []>

Update image_processing to avoid Ruby 2.7 warnings

Gemfile.lockの修正です。

image_processing gemのバージョンを1.2.0に更新しています。Ruby 2.7でwarningが表示されるのを避ける為。


Fix CI failure due to renamed #exception= to #error= in minitest 5.14.0

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

UnexpectedError#exception=を使用してexceptionを指定し直している箇所を、initialize経由でexceptionを設定するよう修正しています。

minitest 5.14.0でUnexpectedError#exceptionUnexpectedError#errorにリネームされており、minitest 5.14.0より後と前のバージョン、両方サポートする為。


rack 2.1.1 has released

Gemfileの修正です。

rack 2.1.1がリリースされた為、gemを使用するのにGitHubのコミットを指定していたのを、リリース済みのgemを使用するよう修正しています。

rails commit log流し読み(2020/01/11)

2020/01/11分のコミットです。

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

activerecord/CHANGELOG.md


Merge pull request #38193 from Edouard-chin/ec-fix-numericality-on-abstract-class

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

abstract classにnumericality validatorを定義した際に、その子クラスでvalidatorを使用した際にActiveRecord::TableNotSpecifiedが発生してしまっていたのを修正しています。


Merge pull request #38204 from eileencodes/fix-reading-conn-so-text-fixtures-raise-when-writing-on-replica

Active Recordの修正です。

:reading(という名前のroleの) connectionに対して書き込み処理を行った場合、必ずActiveRecord::ReadOnlyErrorがおきるよう修正しています。

test fixturesでreplicaでもwriterのconnectionを使用している為、replicaに対して書き込み処理を行った場合にActiveRecord::ReadonlyErrorが発生する事、を確認するテストが出来ない、という問題があり、その対応の為。


Merge pull request #38197 from apauly/feature/as_json-reduce-allocations

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

Hash#as_jsonメソッドでオブジェクト生成数を減らすようリファクタリングしています。


Fix NumericalityValidator when precision is too high:

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

numericality validatorで使用するprecisionのデフォルト値にFloat::DIGを使用していたのをBigDecimal.double_figを使用するよう修正しています。

Float::DIGだとクラスが保持できる有効数字を取得出来ない為。


Fix ActionController::TestSession#id to return Rack::Session::SessionId instance (#38063)

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

ActionController::TestSession#idの戻り値をRack::Session::SessionIdに変更しています。

rack v2.0.8からsessionの戻り値がRack::Session::SessionIdになっており、その挙動と合わせる為。


Do not re-parse PATH_INFO when validating authenticity token

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

authenticity tokenのチェック時にPATH_INFOのパース処理を行わないよう修正しています。

PATH_INFOにはquery parametersが含まれていない(はず)で、パース処理は不要な為。


[ci skip] Brazilian portuguese translation effort (#38200)

rails guideのContributing to Ruby on Railsの修正です。

Translating Rails Guidesの項に、ブラジルポルトガル語版(https://github.com/campuscode/rails-guides-pt-BR )を追加しています。


Merge pull request #38203 from jonathanhefner/plugin-put-dev-deps-in-gemfile

railties/lib/rails/generators/rails/plugin/templates/%name%.gemspec.ttrailties/lib/rails/generators/rails/plugin/templates/Gemfile.ttの修正です。

rails pluginでdev用のdependenciesをgemspecのadd_development_dependencyで定義していたのを、Gemfileで定義するよう修正しています。

bundlerで新しいgemを生成する際にGemfileを使用するようになっており、その参考と合わせる為。

参考: Remove add_development_dependency from new gems


rack 2.1.0 changed expires date format from rfc2822 to httpdate

Gemfile、及びAction Packのテストの修正です。

rack 2.1.0でexpires dateのformatが変更になり(RFC 7231に準拠するようになりました)、その影響でAction Packのテストが失敗するようなっていたのを修正しています。

また、それ以外にもActive Storageのテストが失敗するようになっていたのですが、こちらはrack側で対応された為、一時的にrackのmasterを参照するようにしています。

参考: Use .httpdate for expires date formatting


Reduce number of created objects in Hash#to_json

activesupport/lib/active_support/json/encoding.rbの修正です。

Hash#as_jsonメソッドでオブジェクト生成数を減らすようリファクタリングしています。

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

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

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

activerecord/CHANGELOG.md

actionview/CHANGELOG.md


Address Ruby 2.7 kwargs warning in ActionDispatch::SystemTesting::Driver

actionpack/lib/action_dispatch/system_testing/driver.rbの修正です。

ActionDispatch::SystemTesting::Driverでキーワード引数に関するwarningが表示されないよう対応しています。


Merge pull request #38190 from seejohnrun/deprecate-primary-as-connection_specification_name

activerecord/lib/active_record/connection_adapters/abstract/connection_pool.rbactiverecord/lib/active_record/connection_handling.rbの修正です。

connection_specification_nameとしてprimaryを使用するのがdeprecateになりまsた。

この影響で、ActiveRecord::Base.connection_handler.retrieve_connectionActiveRecord::Base.connection_handler.remove_connectionの引数にprimaryを使用するのがdeprecateになっています。今後は、(文字列の)ActiveRecord::Baseを使用する必要があります。

役割が異なるconnection_specification_namespec_nameがどちらもデフォルトとしてprimaryを使うのが紛らわしい、かつ、connection_specification_nameApplicationRecordを継承したmodelではそのmodelのclass名が使われる為、connection_specification_nameのデフォルトはActiveRecord::Baseの方が良いのでは、という事で変更されています。


Merge branch 'fix_template_resolving_sort'

actionview/lib/action_view/template/resolver.rbの修正です。

OptimizedFileSystemResolverでテンプレートを検索する際に、locale、formats、variants、handlersを指定された順に検索するよう修正しています。


Fix the reading can write resolver test

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

resolverのread処理中の接続先を確認するテストで、接続先を確認するroleが誤っていたのを修正しています。


Typo fix of visbility.

actioncable/app/assets/javascripts/action_cable.jsactioncable/app/javascript/action_cable/connection_monitor.jsの修正です。

visibilityvisbilityにタイポしていたのを修正しています。

rails commit log流し読み(2020/01/09)

2020/01/09分のコミットです。

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


Revert "Merge pull request #38053 from Shopify/actionmailer-6-0-stable-ruby-2.7-warnings"

Active JobのRuby 2.7のwarning対応を行った、Merge pull request #38053 from Shopify/actionmailer-6-0-stable-ruby-2.7-warningsをRevertしています。

perform実行時にextract_options!オプションを使用するようにした影響で、jobの引数にkeyがStringのHashを渡した場合にエラーになってしまうようになった為。


Merge pull request #38169 from gsamokovarov/rails-middleware-move-before-after

actionpack/lib/action_dispatch/middleware/stack.rbの修正です。

middlewareの順序を移動するためのmove(move_before) / move_afterメソッドを追加しています。


Fix deprecation warnings in Active Support tests

activesupport/test/core_ext/range_ext_test.rbの修正です。

Range#include?に関するdeprecation warningが出ていたのを対応しています。


Do not define instance predicate if the instance reader isn't as well

activesupport/lib/active_support/core_ext/class/attribute.rbの修正です。

class_attribute instance accessorsの性能改善を行った、Optimize class_attribute instance accessorsの対応で、instance_readerがfalseの場合にもpredicateメソッドが定義されてしまうリグレッションが発生してしまっていたのを修正しています。

rails commit log流し読み(2020/01/08)

2020/01/08分のコミットです。

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

activesupport/CHANGELOG.md


Fix railties changelog indent / code blocks [ci skip]

railties/CHANGELOG.mdの修正です。

各エントリーのインデントの修正、exampleコードのcode blockにlangの指定等を行っています。


Merge pull request #37955 from Manfred/named-routes-metal-integration

actionpack/lib/action_dispatch/testing/integration.rbの修正です。

integration testsでActionController::Metalを継承したcontrollerにアクセスした場合にNoMethodErrorで落ちてしまっていたのを修正しています。


Defaults content_type to application/octet-stream

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

Active Storageのdirect uploadでデフォルトのcontent typeとしてapplication/octet-streamを指定するよう修正しています。content typeが取得出来なかった場合にもupload処理が行えるようにする為。


restores the ability to manually eager load applications

railties/lib/rails/application.rbrailties/lib/rails/engine.rbの修正です。

zeitwerkを使用している場合、Rails::Application#eager_load!明示的呼び出しても、eager loadがされないようになっていたのを、Rails 5.2まで同様にeager loadされるよう修正しています。

config.eager_loadの設定がfalseでも、gem等で強制的にeager loadを実行したい、というユースケースがある為、5.2までと同様に動作するようにしています。


Bump image_processing gem version since it fixes ruby 2.7 warnings

Gemfile.lockの修正です。

image_processing gemを1.10.1に更新しています。Ruby 2.7でwarningが表示されるのを避ける為。


addresses RuboCop feedback

railties/test/application/zeitwerk_integration_test.rbの修正です。

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


Restore previous behavior of parallel test databases

Active Recordの修正です。

Pass env_name as a string in test databasesでtest用DBのセットアップをする際にnon-replicaの設定をconfigurationsの最後に追加するようにしたのですが、establish_connectionは引数指定なしで呼び出した場合configurationsの最初の値を使用する為、結果テスト時に予期せずreplicatの設定が使用されてしまう、という問題が発生していた為、configurationsの設定の変更は行わないよう修正しています。


Add AC::TestSession#dig method like AD::Request::Session

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

ActionDispatch::Request::Session#digと同様に、ActionController::TestSessiondigメソッドを追加しています。


Memoize regex when checking missing route keys

actionpack/lib/action_dispatch/journey/formatter.rbactionpack/lib/action_dispatch/journey/path/pattern.rbの修正です。

route keysの不足をチェックするための正規表現のオブジェクトがパラメータ毎に生成されていたのを、一度生成した値を保持してそれを使いまわすよう修正しています。


Merge pull request #38118 from mkrfowler/reduce_preloaded_records

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

has_one 経由でpreloadを行った場合に、後から破棄される不要なレコードまでロードされてしまっていたのを、不要なレコードはロードしないよう修正しています。


Remove method encode from url_test in Actionmailer:

actionmailer/test/url_test.rbの修正です。

使用されていないencodeメソッドを削除しています。


Deprecate using Range#include? to check the inclusion of a value in a date time range

activesupport/lib/active_support/core_ext/range/include_time_with_zone.rbの修正です。

date time rangeに値が含まれているかをチェックするのにRange#include?を使用するのがdeprecateになりました。今後はRange#cover?を使用する必要があります。

Range#include?では、値をただしくチェック出来ない(include?はrangeのメンバーであるかどうかをチェックするためのメソッドで、値が指定された範囲内かどうかをチェックするにはcover?を使用する必要がある為)。

rails commit log流し読み(2020/01/07)

2020/01/07分のコミットです。

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

activerecord/CHANGELOG.md

railties/CHANGELOG.md


Merge pull request #38144 from jhawthorn/mattr_location

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

mattr_* methodsで定義されたメソッドのsource_locationが、mattr_* methods自体のlocationになっていたのを、mattr_* methodsで定義した箇所になるよう修正しています。attr_*メソッド等と振る舞いを合わせる為。


Merge pull request #38167 from semaperepelitsa/postgres-flags

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

psql / pg_dumpにオプションを指定する際に、short nameを使用していたのを、long nameを使用するよう修正しています(e.g. -s -> --schema-only)

long nameの方がわかりやすいだろう、との事です。


Merge pull request #38166 from jules2689/master

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

子associationのcallback処理で親modelのattributeを更新した場合に、他の子associationのautosaveが動作しないバグがあったのを修正しています。


Add ActiveRecord::Validations::NumericalityValidator

Active Record、Active Modelの修正です。

カラムのprecision値を使用してcast処理を行った値でvalidationを行う、ActiveRecord::Validations::NumericalityValidator validatorを追加しています。


Merge pull request #37404 from joshmn/respect_the_force

railties/lib/rails/generators/base.rbの修正です。

generatorにforceオプションを指定している場合、既に存在しているクラスと同じ名前かどうかのチェック処理を行わないよう修正しています。


Move nil? check to open_ended? method

activerecord/lib/arel/predications.rbの修正です。

open_ended?メソッドで値のnilチェックも行うよう修正しています。


Merge pull request #38163 from roramirez/match-302-redirect

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

redirect_toメソッドのテストで、http statusについても確認するよう修正しています。


Merge pull request #38131 from kddeisz/nulls

arelの修正です。

PostgreSQLNULLS FIRSTNULLS LASTを指定するためのメソッドを追加しています。

rails commit log流し読み(2020/01/06)

2020/01/06分のコミットです。

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

activesupport/CHANGELOG.md


Add :round_mode parameter support to number helpers

Active Supportの修正です。

number helpersに丸め処理を指定するための:round_modeオプションを追加しています。BigDecimal::modeと同様のflagを指定出来るようになっています。

number_to_currency(1234567890.50, precision: 0, round_mode: :half_down) # => "$1,234,567,890"
number_to_percentage(302.24398923423, precision: 5, round_mode: :down) # => "302.24398%"
number_to_rounded(389.32314, precision: 0, round_mode: :ceil) # => "390"
number_to_human_size(483989, precision: 2, round_mode: :up) # => "480 KB"
number_to_human(489939, precision: 2, round_mode: :floor) # => "480 Thousand"

Fix the broken anchor of link [ci skip]

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

pgcrypto generator functionへのリンクに指定されたアンカーが、既にページ内に存在しなくなってしまっていた為削除しています。


Merge pull request #38099 from alipman88/avoid_unecessary_query_if_cache_versioning_enabled

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

cache_keyメソッド実行時に、collection_cache_versioningが有効な場合に不要なqueryを実行しないよう修正しています。