なるようになるブログ

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

rails commit log流し読み(2017/09/20)

2017/09/20分のコミットです。

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


Add :comment option for add_column [ci skip]

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

add_columnメソッドのdocに:commentオプションについての説明を追加しています。


Use credentials, not secrets, for Active Storage (#30650)

railties/lib/rails/generators/rails/app/templates/config/storage.ymlrailties/lib/rails/generators/rails/credentials/credentials_generator.rbの修正です。

Active Storage用のデフォルトの設定ファイルで、secretsを使うようdocに説明が記載されいたいたのを、credentialsを使うよう説明を修正しています。


Use credentials in storage.yml template

railties/lib/rails/generators/rails/app/templates/config/storage.ymlの修正です。

先のcredentialsを使うようにした対応で、対応が漏れていた箇所があったのを修正しています。


make create_join_table compatible.

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

Rails 4.2、又は、5.0で作られたmigrationファイルでcreate_join_tableメソッドを使用した場合に、primary keyにintegerが使われるべきが、bigintが使われてしまうバグがあったのを修正しています。


Merge pull request #30657 from yhirano55/fix_restful_wording

railties/lib/rails/generators/rails/resource/USAGEの修正です。

resource generatorのUSAGE内のrestfulRESTfulに修正しています。


Fix error message documentation

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

OrderedOptions#method_missingで存在しないkeyをbangつきで呼び出した場合(e.g. h.dog!)のエラーメッセージのkey名にコロンを追加、及び、doc内のexampleコードの結果が実際の結果と異なっていたのを修正しています。

rails commit log流し読み(2017/09/19)

2017/09/19分のコミットです。

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

actionpack/CHANGELOG.md


Use the default Capybara registered puma server configuration

Action Packの修正です。

system testで使うようのPumaの設定をSystemTesting::Serverクラスで独自に行っていたのを、Capybaraに登録されている:puma serverの設定を使うよう修正しています。

Capybaraでの設定は下記の通り。

https://github.com/teamcapybara/capybara/blob/4fcc4a982254427a4578bc7ac582755c30e7bfe0/lib/capybara.rb#L449..L452

Rails側で独自に設定していたPumaの設定はではworker数を制限しておらず、config/puma.rbの設定内容によってはテストの際もCluster modeで動作していました。

ただ、テストの際はCluster modeで実行すべきではない(コネクション共有やリクエストのハンドリングの都合上)というのと、そもそもRails内部で独自に設定を持つ必要は無いのでは、という事でCapybaraに登録されている設定を使うようになりました。


Remove unused NumberToRoundedConverter#digits_and_rounded_number

activesupport/lib/active_support/number_helper/number_to_rounded_converter.rbの修正です。

使用していないNumberToRoundedConverter#digits_and_rounded_numberメソッドを削除しています。


Merge pull request #30648 from ydakuka/patch-1

rails guideの修正です。

guideのグラマー、リンク、exampleコードのフォーマットの修正等を行っています。

rails commit log流し読み(2017/09/18)

2017/09/18分のコミットです。

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


Add missing round bracket in “Ruby on Rails 5.1 Release Notes” guide

rails guideのRuby on Rails 5.1 Release Notesの修正です。

“Deprecated passing string to :if and :unless conditional options on set_callback and skip_callback"の対応へのコミットのリンクに閉じ括弧が不足していたのを修正しています。


Remove useless condition in reset_association

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

ThroughAssociation#reset_associationメソッドのresetすべきかどうかの判定処理から、不要なoptionのチェック処理を削除しています。

-            should_reset = (through_scope != through_reflection.klass.unscoped) ||
-               (options[:source_type] && through_reflection.collection?)
+            should_reset = through_scope != through_reflection.klass.unscoped

options[:source_type]が設定されている場合、必ずthrough_scopeが設定されており、through_scopeだけをチェックすれば良い為。


Return through_scope only if the scope is not empty scope

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

ThroughAssociation#reset_associationメソッドでscopeがempty scopeじゃない場合のみ値を返すよう修正しています。empty scopeの場合scopeのmerge処理が不要な為。


Don’t pass reflection_scope to preload_scope if reflection.scope isn’t given

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

ThroughAssociation#associated_records_by_ownerメソッドでreflection.scopenilの場合、不要なorderのmerge処理は行わないよう修正しています。


Early return if records.empty? in Preloader#preload

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

Preloader#preloadメソッドでrecordsが空の場合不要なArrayの生成処理を行わいよう修正しています。


Place class level update, destroy, and delete in Persistence::ClassMethods https://github.com/rails/rails/commit/9ac7dd47c5e847f7dbfb8d527ee2b917fa9fcd38

Active Recordの修正です。

activerecord::Relationクラスに定義されていたclass levelのupdatedestroydeleteメソッドをPersistenc::ClassMethodsに移動しています。

そもそもRelationに依存しているメソッドではないので、Persistence::ClassMethodsに定義されている方が適切な為との事です。


Ensure returning affected objects for class level update and destroy

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

class levetのupdatedestroyが更新・削除されたオブジェクトのみ返すよう修正しています。

      def update(id = :all, attributes)
         if id.is_a?(Array)
-          id.map.with_index { |one_id, idx| update(one_id, attributes[idx]) }
+          id.map.with_index { |one_id, idx| update(one_id, attributes[idx]) }.compact
         elsif id == :all
           all.each { |record| record.update(attributes) }
         else
@@ -112,6 +112,7 @@ def update(id = :all, attributes)
           object.update(attributes)
           object
         end
+      rescue RecordNotFound
       end

合わせて、RecordNotFoundをrescueするようにしています。これはupdatedestroyは内部的にfindを使用しており、不正なidが指定された場合にRecordNotFoundがraiseされてしまう事があるため。


id (primary key) is not only an integer [ci skip]

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

class levelのdestroyメソッドのdocに、引数のidに指定出来るのはIntegerまたはIntegerのArrayであるむね説明が記載されていたのですが、実際はidはIntegerとは限らない為、説明を修正しています。


Remove the code that swapping scope and options

activerecord/lib/active_record/associations.rbactiverecord/lib/active_record/associations/builder/association.rb

Association.create_reflectionメソッドでscope引数がHashだった場合、それをoptionsに設定していた処理があったのを削除しています。

scopeoptionsが設定される事があった為そのような処理にしていたようなのですが、現状そのような状態になる事はない為削除したようです。


Fix collided sequence name detection

activerecord/lib/active_record/connection_adapters/postgresql/column.rbの修正です。

sequence nameの検出処理に誤りがあり、sequence nameが衝突した場合にserialの判定が正しく行えないバグがあったのを修正しています。


Remove unused require in ActiveStorage::Variation

activestorage/app/models/active_storage/variation.rbの修正です。

使用していないactive_support/core_ext/object/inclusionのrequireを削除しています。


Extract associate_records_to_owner to refactor Preloader::Association

Active Recordの修正です。

Preloader::Association#preloadで行っていたassociationの関連付けをPreloader::Association#associate_records_to_ownerメソッドで行うようリファクタリングしています。

PreloaderPreloader::Associationにそれぞれpreloadメソッドがあるのがわかりずらいのと、preloadというメソッド名で中でassociated_records_by_ownerを呼んでいるのがわかりずらい為、上記のようなリファクタを行ったようです。


The name of the key on the owner is abstracted as reflection.join_foreign_key

Active Recordの修正です。

Preloader::Association#owner_key_nameメソッドでreflection.join_foreign_keyの結果を返すよう修正、及び、この対応により不要になったAssociationの子クラスのowner_key_nameメソッドを削除しています。


The name of the key on the associated record is abstracted as reflection.join_primary_key

Active Recordの修正です。

Preloader::Association#association_key_nameメソッドでreflection.join_primary_keyの結果を返すよう修正、及び、この対応により不要になったAssociationの子クラスのowner_key_nameメソッドを削除しています。


Remove unused delegation to reflection.options in Preloader::Association

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

使用していないPreloader::Association#optionsメソッドを削除しています。


Merge pull request #26707 from jcoleman/add_attribute_names_cache_busting_spec

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

Model.columnsの値が変わった時にModel.attribute_namesのキャッシュが破棄される事を確認するテストを追加しています。


Remove “the” [ci skip]

rails guideのRuby on Rails Security Guideの修正です。

Custom credentialsの項のグラマーの修正を行っています。


Upcase js [ci skip]

rails guideのCaching with Rails: An Overviewの修正です。

Javascript -> JavaScriptに修正しています。


Fix quotes [ci skip]

docの修正です。

“’” -> “‘” に修正しています。


add section to guides for discarding and retrying active jobs [ci skip]

rails guideのActive Job Basicsの修正です。

Retrying or Discarding failed jobsの項を追加し、retry_on及びdiscard_onを使用した場合のexampleコードを追加しています。


Use ApplicationJob instead of ActiveJob::Base in guide [ci skip]

rails guideのActive Job Basicsの修正です。

exampleコードの親クラスをActiveJob::BaseからApplicationJobに修正しています。

rails commit log流し読み(2017/09/17)

2017/09/17分のコミットです。

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

railties/CHANGELOG.md


Merge pull request #30617 from y-yagi/dont_expose_activestorage_routes

activestorage/config/routes.rbの修正です。

Active Storageで定義されているroutesをユーザに表示しないよう修正しています。

これらのroutesはActive Storageが内部で使用する為のroutesで、ユーザが直接使用するroutesではない為。


Remove frozen_string_literal magic comment from templates

railtiesの修正です。

各templateファイルからfrozen_string_literal: trueを削除しています。 Remove frozen_string_literal magic comment from templatesのフォローアップ対応。


Add local option to Message form [ci skip]

activestorage/README.mdの修正です。

Active Storageのexample内のform_withメソッドの引数にlocal: trueを指定しています。XHRで処理を行う想定のexampleでは無い為。


Fix file missing in activestorage’s example code [ci skip]

Active Storageのdocの修正です。

ファイルを直接オープンする場合のexampleの、ファイルパスを絶対パスで指定するよう修正しています。


Update plugins.md [ci skip]

rails guideのThe Basics of Creating Rails pluginsの修正です。

Add a Class Methodの項、test/dummyをバッククォートで囲むよう修正しています。


Fix docs describing rollback [ci skip]

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

doc内のrollback処理について説明している箇所でmigratetaskを使用していたのを、rollback taskを使用するよう修正しています。


Add mini_magick to default Gemfile as comment

railties/lib/rails/generators/rails/app/templates/Gemfileの修正です。

デフォルトで生成されるGemfileにmini_magickを追加しています。

Active Storageで画像のtransformを使用する際に必要な為。

Provide initialization of Active Storageの方の対応に含まれてるかと思ったのですが、こっちはGemfileの修正は入って無いのかー。

rails commit log流し読み(2017/09/16)

2017/09/16分のコミットです。

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


Fix typo: credentails -> credentials [ci skip]

rails guideのRuby on Rails Security Guideの修正です。

credentialscredentailsにタイポしている箇所があったのを修正しています。

rails commit log流し読み(2017/09/15)

2017/09/15分のコミットです。

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


Merge pull request #30581 from y-yagi/do_not_add_master_key_twice_to_gitignore

railtiesの修正です。

rails newで新規にアプリを作成後に、credentials:editコマンドを実行した場合、gitignoreにconfig/master.keyが複数回記載されてしまっていたのを修正しています。


Merge pull request #30582 from y-yagi/do_no_add_master_key_and_credentials

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

rails newpretendオプションを指定した場合、master.key及びcredentials.yml.encの生成処理を行わないよう修正しています。


Inline the lone add_master_key_file_silently use.

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

master.keyの作成処理をメソッドにしていたのを、add_master_key_fileメソッド内で処理を行うよう修正しています。他から作成処理が呼ばれない為ですかねえ。


Bump Travis to new Ruby releases

.travis.ymlの修正です。

Travisで使用するRubyのバージョンをまとめて更新しています。


Stick with the RUBY_VERSION check on stopgap_13632

Gemfileの修正です。

stopgap_13632 gemをインストールする条件にRubyのバージョンを指定しています。

-gem "stopgap_13632", platforms: :mri_22
+gem "stopgap_13632", platforms: :mri if RUBY_VERSION == "2.2.8"

が、stopgap_13632Ruby 2.2.8では動作しない為、後ほど削除しています。


Remove stopgap_13632 entirely for now: it doesn’t support 2.2.8

Gemfileの修正です。

Gemの一覧からstopgap_13632を削除しています。stopgap_13632Ruby 2.2.8では動作しない為。


Update Getting Started with Rails [ci skip]

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

guide内のform_withメソッドのexamleコードにlocal: trueオプションを指定するよう修正しています。

guide内のexampleコードはXHRで処理を扱う前提のコードになっておらず、local: trueを指定しないと正しく動作しない事がある為。

rails commit log流し読み(2017/09/14)

2017/09/14分のコミットです。

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


Update Getting Started with Rails [ci skip]

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

Creating the Blog Applicationの項にあるRailsがデフォルトで生成するファイルの一覧に、package.json.ruby-versionを追加しています。


[ci skip] Prefer credentials to secrets in docs.

各docの修正です。

secretsについて言及している箇所を、まとめてcredentialsについて言及するよう修正しています。


Make in_batches queries to preparable

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

in_batchesメソッドが生成queryでプリペアドステートメントを使用するよう修正しています。

コミットより。

Before:

SELECT  "posts".* FROM "posts" ORDER BY "posts"."id" ASC LIMIT ?  [["LIMIT", 2]]
SELECT  "posts".* FROM "posts" WHERE "posts"."id" > 2 ORDER BY "posts"."id" ASC LIMIT ?  [["LIMIT", 2]]
SELECT  "posts".* FROM "posts" WHERE "posts"."id" > 4 ORDER BY "posts"."id" ASC LIMIT ?  [["LIMIT", 2]]
SELECT  "posts".* FROM "posts" WHERE "posts"."id" > 6 ORDER BY "posts"."id" ASC LIMIT ?  [["LIMIT", 2]]
SELECT  "posts".* FROM "posts" WHERE "posts"."id" > 8 ORDER BY "posts"."id" ASC LIMIT ?  [["LIMIT", 2]]
SELECT  "posts".* FROM "posts" WHERE "posts"."id" > 10 ORDER BY "posts"."id" ASC LIMIT ?  [["LIMIT", 2]]

After:

SELECT  "posts".* FROM "posts" ORDER BY "posts"."id" ASC LIMIT ?  [["LIMIT", 2]]
SELECT  "posts".* FROM "posts" WHERE "posts"."id" > ? ORDER BY "posts"."id" ASC LIMIT ?  [["id", 2], ["LIMIT", 2]]
SELECT  "posts".* FROM "posts" WHERE "posts"."id" > ? ORDER BY "posts"."id" ASC LIMIT ?  [["id", 4], ["LIMIT", 2]]
SELECT  "posts".* FROM "posts" WHERE "posts"."id" > ? ORDER BY "posts"."id" ASC LIMIT ?  [["id", 6], ["LIMIT", 2]]
SELECT  "posts".* FROM "posts" WHERE "posts"."id" > ? ORDER BY "posts"."id" ASC LIMIT ?  [["id", 8], ["LIMIT", 2]]
SELECT  "posts".* FROM "posts" WHERE "posts"."id" > ? ORDER BY "posts"."id" ASC LIMIT ?  [["id", 10], ["LIMIT", 2]]

quoted_table_name doesn’t respect table alias

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

ActiveRecord::Batches#batch_orderメソッドでprimary keyを取得するのにarel_attributeを使用するよう修正しています。

      def batch_order
-        "#{quoted_table_name}.#{quoted_primary_key} ASC"
+        arel_attribute(primary_key).asc
       end

quoted_table_nameメソッドだとtable aliasが正しく扱えない為。


Address random test_or_with_bind_params failures

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

test_or_with_bind_paramsでassertionを実行する際に、idでsortした値を使用するよう修正しています。sortした値を使用しないと取得出来る値が不定になり、seedによってはテストが失敗してしまう為。


Update Active Job Basics [ci skip]

rails guideのActive Job Basicsの修正です。

Starting the Backendの一覧にSneakersを追加しています。


Don’t use quoted_table_name in limited_ids_for

activerecord/lib/active_record/connection_adapters/abstract_adapter.rbactiverecord/lib/active_record/relation/finder_methods.rbの修正です。

ActiveRecord::FinderMethods#quoted_table_nameメソッドでprimary keyを取得するのにquoted_table_nameメソッドを使用していたのを、arel_attributeを使用するよう修正しています。 quoted_table_nameメソッドだとtable aliasが正しく扱えない為。


Don’t use collection.table_name in collection_cache_key

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

ActiveRecord::CollectionCacheKey#collection_cache_keyメソッドでtimestampのcolumnを取得するのにcollection.table_nameを使用していたのを、arel_attributeを使用するよう修正しています。 quoted_table_nameメソッドだとtable aliasが正しく扱えない為。


Remove unused explicit delegation to klass in relation

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

klassdelegateするメソッドの一覧に実際は使用していないメソッドが含まれていたのを削除しています。


Avoid making HTTP requests to generate signed URLs for GCS objects

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

File objectを生成する際に、skip_lookupオプションを指定するよう修正しています。object生成時点でHTTP requestsが発生してしまうのを避ける為、との事です。

参考:Add skip_lookup to Storage