なるようになるブログ

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

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

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

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

activejob/CHANGELOG.md


Allow queue option to assert_no_enqueued_jobs

activejob/lib/active_job/test_helper.rbの修正です。

assert_no_enqueued_jobsメソッドのqueueオプションを指定出来るよう修正しています。


Fix assignment of TESTOPTS in railties test task

railties/Rakefileの修正です。

railtiesのテストでテスト実行時にTESTOPTSにオプションを複数指定した場合に、オプションが正しく使用されないバグがあったのを修正しています。


Refactor #33254.

activesupport/lib/active_support/cache/redis_cache_store.rbの修正です。

RedisCacheStore#increment#decrementメソッドそれぞれで行っていたexpiryの書き込み処理のメソッドへの切り出し、optonsに不正な値が指定された場合の処理の削除、等のリファクタリングを行っています。


Revert "Merge pull request #33234 from alpaca-tc/autoload_activejob_arguments"

ActiveJob::Argumentsをautoloadするよう修正した、Merge pull request #33234 from alpaca-tc/autoload_activejob_argumentsをrevertしています。

単体で実行した場合にエラーになってしまうテストが発生してしまった為。

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

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

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


Remove erroneous remove_column option from example

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

remove_columnメソッドのexampleで指定出来ないindexオプションを使用している箇所があったのを削除しています。


Clarify activejob/lib/active_job/test_helper.rb

activejob/lib/active_job/test_helper.rbactivejob/test/cases/test_helper_test.rbの修正です。

assert_enqueued_withメソッドにatオプションを指定した場合のテストを追加、及び、テスト名や変数名をより適切な名前に修正、等を行っています。


Fix Cache :redis_store increment/decrement ttl check and add more tests.

activesupport/lib/active_support/cache/redis_cache_store.rbの修正です。

RedisCacheStoreincrement / decrementメソッドでttlメソッドの戻り値のチェックに誤りがあったのを修正しています。

             redis.with do |c|
               val = c.incrby key, amount
-              if expires_in > 0 && c.ttl(key) == -2
+              if expires_in > 0 && c.ttl(key) < 0
                 c.expire key, expires_in
               end

ttlメソッドはkeyが存在しないときは-2で、keyが存在する、かつ、有効期限が無い場合は-1を返すようになっており、-1の場合もexpireを呼ぶ必要がある為、上記のように0未満かどうかをチェックするよう修正を行っています。

参考:https://github.com/redis/redis-rb/blob/ddf058bfa03d8cdde492adeb59930dea831466e2/lib/redis.rb#L413-L429


Fix Ruby warnings tickled by the test suite

各テストでRubyのwarningが出ていた箇所があったのをまとめて修正しています。

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

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

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

activesupport/CHANGELOG.md

actionmailer/CHANGELOG.md

activejob/CHANGELOG.md


Tweak Previewer::PopplerPDFPreviewer#pdftoppm_exists?

activestorage/lib/active_storage/previewer/poppler_pdf_previewer.rbの修正です。

Previewer::PopplerPDFPreviewer#pdftoppm_exists?メソッドで@pdftoppm_existsが定義されているかをチェックするのに、nil?メソッドを使用していたのを、defined?を使用するよ修正しています。

@pdftoppm_existsは初期化がされていない為、nil?でチェックするとRubyのwarning(instance variable @pdftoppm_exists not initialized)が表示されてしまう為。


Add :expires_in option support for RedisCacheStore increment/decrement method.

activesupport/lib/active_support/cache/redis_cache_store.rbの修正です。

RedisCacheStoreincrement / decrementメソッドにexpires_inオプションを指定出来るよう修正しています。

指定されたcounterが存在しない時(新規に作成したcounterの場合)のみ、expires_inオプションに指定された値がRedis EXPIREとして指定されるようになっています。


Incompatibility of Direct Uploads & Mirror Service

rails guideのActive Storage Overviewの修正です。

Mirror Serviceの項に、Mirror Serviceを指定している場合Direct Uploadsは使えない旨注記を追加しています。


Merge pull request #33238 from dikond/explicit_action_mailer_deliver_later_queue_name

rails guideのAction Mailer Basicsの修正です。

Calling the Mailerの項に、Action Mailerがデフォルトで使用するqueueについての説明、及び、そのqueueを変更する方法についての説明を追加しています。


Allow call assert_enqueued_with and assert_enqueued_email_with with no block

activejob/lib/active_job/test_helper.rbの修正です。

assert_enqueued_email_withassert_enqueued_withメソッドが、blockを指定しないでも正しく動作するよう修正しています。

Fix ActionMailer assert_enqueued_email_withの対応と異なり、blockの指定が無い場合はenqueueされているjobを即座に取得するようにし、assertionが通るように対応しています。


Fix docs of assert_no_emails [ci skip]

actionmailer/lib/action_mailer/test_helper.rbのdocの修正です。

assert_no_emailsのdoc内、assert_no_emailsがショートカットとなるメソッドについて説明している箇所で、引数の指定が不足していたのを修正しています。

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

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

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

activemodel/CHANGELOG.md


Merge pull request #33217 from eugeneius/test_duration_preserve_parts

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

Durationの乗算、除算についてのテストを追加しています。


Fix ActionMailer assert_enqueued_email_with

activejob/lib/active_job/test_helper.rbの修正です。

assert_enqueued_withメソッドでblockが指定された時だけyieldを実行するよう修正しています。

assert_enqueued_withメソッドはassert_enqueued_email_withから呼ばれるのですが、assert_enqueued_email_withメソッドはblockを指定しないでも動作する旨docにて記載されていました。

しかし実際はassert_enqueued_withのyield実行時エラーになってしまっていたので、docの説明の通り、assert_enqueued_email_withにblockを指定しなかった場合にも動作するよう、修正を行っています。

が、これはdocが誤りで、blockは必ず指定する必要がある(blockの指定が無いと、assertionが必ず失敗する)為、後ほどrevertされています。


Break guides menu 'Digging Deeper' section in two

guides/source/documents.yamlの修正です。

Digging Deeperセクション配下にあったコンテンツのうち、コンポーネントに関するコンテンツを新規に追加したOther Componentsセクション配下に移動しています。


Merge pull request #26764 from choncou/improve_has_secure_password

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

has_secure_passwordメソッドが定義するattribute名をオプションで指定出来るよう修正しています。

class User < ActiveRecord::Base
    has_secure_password :activation_token, validations: false
end

user = User.new
user.activation_token = "a_new_token"
user.activation_token_digest                        # => "$2a$10$0Budk0Fi/k2CDm2PEwa3Be..."
user.authenticate_activation_token("a_new_token")   # => user

Improve wording for form_with in Getting Started Guide

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

Updating Articlesの項、form_withについて説明している箇所の言い回しを修正しています。


Revert "Merge pull request #33243 from evopark/fix/action-mailer-test-helper-no-block"

assert_enqueued_withメソッドでblockが指定された時だけyieldを実行するよう修正した、Fix ActionMailer assert_enqueued_email_withをrevertしています。理由は上記参照。

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

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

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


Call initialize after allocate

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

ActiveRecord::Core#allocateメソッドを削除しています。

元々define_attribute_methodsメソッドを呼び出ていただけで、初期化処理全て行っていたわけではない、かつ、instantiateメソッド等を経由してオブジェクトを生成した場合、define_attribute_methodsメソッドが2回呼ばれてしまう、という問題もあった為、削除しています。


Merge pull request #33223 from rails/homogeneous-allocation

Active Recordの修正です。

Active Recordのオブジェクトの初期化前に、STI用のカラムが含まれているかチェックし、含まれていない場合、不要なクラスの初期化処理を行わないよう(作成済みのデータを使い回す)修正しています。これにより、オブジェクトの生成処理が減少し、結果処理性能が改善しています。


Add changelog entry for 3110cae [ci skip]

activejob/CHANGELOG.mdの修正です。

retry_ondiscard_onメソッドに複数のExceptionを指定出来るよう修正した、Allow passing multiple exceptions to retry_on/discard_onの対応についてCHANGELOGにエントリーを追加しています。


Merge pull request #33234 from alpaca-tc/autoload_activejob_arguments

Active Jobの修正です。

明示的にrequireせずに使えるようにする為に、ActiveJob::Argumentsをautoloadするよう修正しています。

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

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

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


Use reflection.alias_candidate in table_alias_for

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

JoinDependency::Aliases#table_alias_forメソッドでaliasを生成する際に、独自に文字列を生成していたのを、reflection.alias_candidateメソッドを使用するよう修正しています。


references(:developers_projects_join) isn't needed if using where with hash condition

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

joinのテストから不要なreferencesの呼び出しを削除しています。


Lazily add Aggregations to composed_of models

activerecord/lib/active_record/aggregations.rbactiverecord/lib/active_record/base.rbの修正です。

ActiveRecord::BaseAggregations moduleをincludeしていたのを、composed_ofメソッド呼び出し時にAggregations moduleをincludeするよう修正しています。

Aggregations moduleはcomposed_ofを使用するときだけ必要、かつ、composed_ofメソッドを使用するのはかなりまれ、かつ、Aggregations moduleをincludeするとcomposed_ofメソッドを使用しない場合には不要なaggregation_cache hashが必ず生成されてしまう為、不要なオブジェクトの生成を減らせるようする為に上記修正を行っています。


Allow passing multiple exceptions to retry_on/discard_on

activejob/lib/active_job/exceptions.rbの修正です。

retry_ondiscard_onメソッドに複数のExceptionを指定出来るよう修正しています。


Generate a new key for each service test

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

各serviceのテストで使用するkeyに固定の値を使用していたのを、テスト毎にkeyを生成するよう修正しています。

同じkeyを使いまわすと、Google Cloud Storageの制限(Google::Cloud::ResourceExhaustedError: rateLimitExceeded: The total number of changes to the object rails-ci-activestorage/xx exceeds the rate limit. Please reduce the rate of create, update, and delete requests.)に引っかかってしまう事がある為。


Add example for no_touching? in active_record/no_touching for api docs [ci skip]

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

ActiveRecord::NoTouching#no_touching?にdocを追加しています。


Remove ActiveSupport::Concern from ActiveRecord::Aggregations

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

Lazily add Aggregations to composed_of modelsの対応により不要になったActiveSupport::Concernのextendを削除しています。


Enable TESTOPTS in railties tests

railties/Rakefileの修正です。

railtiesのテストでテスト実行時に指定したTESTOPTSが有効になるよう修正しています。

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

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

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


Merge pull request #33191 from bogdanvlviv/change-rails_welcome-image-on-localhost3000

railties/lib/rails/templates/rails/welcome/index.html.erbの修正です。

welcomeページで表示される画像を、guideで表示されているのと同じ画像(Update 'rails_welcome.png' to reflect a more diverse populationで更新された画像)を使用するよう修正しています。


Revert "Avoid Node.js v10.4.0 for now"

CIで使用するNode.jsのバージョンをv10.4.0に固定した、Avoid Node.js v10.4.0 for nowをrevertしています。

Node.js v10.5.0がリリース済み、かつ、10.5.0でrails-ujsのbuildが壊れる、という問題がfix済みのため。