なるようになるブログ

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

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

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

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

activestorage/CHANGELOG.md


Merge pull request #32986 from kevgathuku/patch-1

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

Providing engine functionalityの項に、このセクションではengineのディレクトリ配下でコマンドを実行することを想定している旨説明を追加しています。


Fix that models can clobber each others' attachment reflections

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

異なるmodelで同じattachement nameを使用していた場合に(下記のようなケース)、add_attachment_reflectionメソッドでreflectionを指定した場合に、異なるmodelのattachmen reflectionが変更されてしまう(User.add_attachment_reflectionメソッドを呼び出したのに、Groupのreflectionが変更されてしまう)バグがあったのを修正しています。

class User < ApplicationRecord
  has_one_attached :avatar
end

class Group < ApplicationRecord
  has_one_attached :avatar
end

Store newly-uploaded files on save rather than assignment

Active Storageの修正です。

新規にアップロードしたファイルが、オブジェクトにアサインされた際に即座に保存されていたのを、そのアサインしたオブジェクトがsaveされた後に保存するよう修正しています。

@user.avatar = params[:avatar]

上記のようなコードだった場合、Rails 5.2ではアサインされた際に即座にファイルが保存されてしましたが、6.0では@userのsaveが成功した後にファイルが保存されるようになっています。


has_secure_password: use recovery_password instead of activation_token

Active Modelの修正です。

has_secure_passwordで任意のattribute名を指定する場合のexampleやテストで、activation_tokenというattributeを使用していたのを、recovery_passwordというattributeを使用するよう修正しています。

has_secure_tokenというメソッドがある為、exampleにxx_tokenという名前のattributeを使用するのは紛らわしい為、というのが理由のようです。


added tests for assert_no_difference with multiple expressions

activesupport/lib/active_support/testing/assertions.rbactivesupport/test/test_case_test.rbの修正です。

assert_no_differenceのdocに複数のexpressionを指定した場合のexample、及び、テストを追加しています。

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

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

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


Update has_secure_password info in the guide

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

SecurePasswordの項に、has_secure_passwordに任意のattributeが指定出来る旨説明、及び、指定した場合のexampleを追加しています。


Improve SecurePasswordTest#test_authenticate

activemodel/test/cases/secure_password_test.rbの修正です。

SecurePasswordTest#test_authenticateの改善として、authenticateauthenticate_XXXメソッドの戻り値が期待通りになっているかテストするよう修正、及び、authenticate_passwordメソッドのテストを追加しています。


Use only snake cased symbols in commands.

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

dev_cachingオプションを指定するのにスネークケースを使用するよう修正しています。

-      class_option "dev-caching", aliases: "-C", type: :boolean, default: nil,
+      class_option :dev_caching, aliases: "-C", type: :boolean, default: nil,

他のオプションは全てスネークケースで扱うようにしていたので、それらと合わせる為。なお、内部的にはスネークケースで扱われるのですが、実際にrails serverに指定する場合は、今までと変わらず--dev-cachingで指定出来ます。


Remove restart_command leftover from switching to Thor options.

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

Rails::Server#restart_commandメソッドを削除しています。

名前の通りrestart時に実行するコマンドを定義していたのですが、ServerCommandクラスにもrestart_commandコマンドがあり、そちらを使用するようにする為、Rails::Serverクラスのrestart_commandメソッドは削除しています。


Don't show unneeded deprecation warning on server restart.

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

rails serverコマンドにRack server nameをオプションなしで指定した際に表示されるdeprecateメッセージが、serverのrestartの際には表示されないよう修正しています。


Don't balloon @original_options with --restart on restart.

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

rails serverを複数回restartした際に、--restartオプションが複数回指定されてしまっていたのを、一度だけ指定されるよう修正しています。

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

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

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

actionpack/CHANGELOG.md


Merge pull request #33297 from claudiob/shorter-attribute_previous_change

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

ActiveModel::Dirty#attribute_previous_changeメソッドで、previous_changesメソッドを呼び出す前にattribute_previously_changed?でattrが変更されているかどうかチェックしていたのを、チェックしないよう修正しています。

今のコードだとチェックしないでも性能に問題無い(previous_changesメソッドではメモ化したHashWithIndifferentAccessで値を保持している)為。


Merge pull request #32776 from Edouard-chin/ec-as-hooks

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

テスト用のクラスにmoduleのincludeや値の指定を行うのに、lazy load hooksを使用して、対象のクラスがloadされた際に処理を行うよう修正しています。


Pass along arguments to underlying get method in follow_redirect! (#33299)

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

follow_redirect!メソッドに、getメソッドに渡す為の引数を指定出来るよう修正しています。

メソッドに指定された引数は、そのままgetメソッドの引数として渡されるようになっています。

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

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

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


A Class is a Module so we remove one conditional

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

LazyLoadHooks#execute_hookメソッドでbaseClassModuleかチェックするのに、ClassModuleそれぞれに対してis_a?チェックしていたのを、Moduleに対してだけチェックするよう修正しています。

-            if base.is_a?(Class) || base.is_a?(Module)
+            if base.is_a?(Module)

ClassModuleの為。


Remove vestigial require on ActiveStorage GCSService

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

不要なactive_storage/filenameのrequireを削除しています。


Merge pull request #33220 from anniecodes/notes-command

railtiesの修正です。

rake taskとして実装されていたrails notesrails command(普通のRubyのクラス)として実装しています。

これにより、annotation対象のタグを環境変数ではなくコマンドの引数として指定出来るようになっています。

$ ./bin/rails notes --help
Usage:
  bin/rails notes [options]

Options:
  -a, [--annotations=one two three]  # Filter by specific annotations, e.g. Foobar TODO
                                     # Default: ["OPTIMIZE", "FIXME", "TODO"]

Make NotesCommand tests more performant by getting rid of unecessary map

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

notes コマンドのテストで不要なダミーデータを作成しないよう修正しています。

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

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

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

actionview/CHANGELOG.md


Add safe html support to arrays of translations

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

TranslationHelper#translateメソッドでI18n.translateで取得した結果がArray、かつ、HTMLだった場合に、html_safeメソッドが呼ばれていなかったのを、結果がArrayだった場合もhtml_safeメソッドを呼び出す(値全てに対してhtml_safeメソッドを呼び出す)よう修正しています。


Merge pull request #33054 from jboler/master

Action Pack、railtiesの修正です。

routesをeager loadする際に、正しくeager load処理が行われず、ActionDispatch::Journey::Pattern::MatchDataNoMethodErrorが発生してしまうバグがあったのを修正しています。

eager loadのタイミングを修正(RoutesReloaderの初期化処理で必ず行うよう修正)し対応しています。


Add changelog entry for 42c3537 [ci skip]

actionview/CHANGELOG.mdの修正です。

Add safe html support to arrays of translationsの対応についてCHANGELOGにエントリーを追加しています。


Remove old TODO comment

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

Rails::ActionMethods#method_missingにあったコメントを削除しています。

-      # TODO: Remove once this is fully in place
       def method_missing(meth, *args, &block)
         @generator.send(meth, *args, &block)

コメントが書かれたのが7年以上前で、現状このmethod_missingを消すのは難しい状態なので、コメントを消してしまって良いのでは、という事で削除されています。


Better compatibility with SPEC.

actioncable/lib/action_cable/connection/stream.rbの修正です。

Connection::Stream#hijack_rack_socketメソッドでHijacking APIを使用する際に、rack.hijack envをcallした値を使用するよう修正しています。

-        @socket_object.env["rack.hijack"].call
-        @rack_hijack_io = @socket_object.env["rack.hijack_io"]
+        # This should return the underlying io according to the SPEC:
+        @rack_hijack_io = @socket_object.env["rack.hijack"].call
+        # Retain existing behaviour if required:
+        @rack_hijack_io ||= @socket_object.env["rack.hijack_io"]

RackのSPECによると、rack.hijack envをcallした結果はrack.hijack_ioを返すよう推奨されており、別途rack.hijack_io envを参照する必要は無い為。

参考:https://github.com/rack/rack/blob/eb040cf1bbb1b2dacd496ab0aa549de8408d8a27/SPEC#L89-L93


Use class_eval or instance_eval when triggering lazy load hooks:

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

lazy load hookを実行する際に、実行する対象がClass or Moduleの場合、instance_evalではなく、class_evalを使用するよう修正しています。

class_evalを使用しないとrun_load_hooksbaseにClass or Moduleが使用された場合に、hookに指定されたメソッドが呼び出せない為。

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

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

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


Merge pull request #33242 from brasic/sqlite-readonly

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

SQLite3AdapterでSQLite3::Databasereadonlyオプションを渡せるよう修正しています。


Merge pull request #32987 from kevgathuku/patch-2

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

Engine setupの項、engineのinstall:migrationsコマンドを実行する場所の説明に誤りがあったのを修正していまs.


Don't share seen object cache between different join nodes in eager loading

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

eager loadingで、target classが同じ場合に異なるjoin nodesのcacheを共有するようにしていたのを、共有しないよう修正しています。

target classが同じでもインスタンスの状態が違う(片方は普通にread出来るインスタンスで、もう片方はreadonlyが指定されている等)可能性がある為。


Don't extract readonly_value each time

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

readonly_valueを必要な時に毎回値を取得していたのを、一度値を取得したらその値をキャッシュするよう修正しています。


Use construct_join_dependency in all places

Active Recordの修正です。

JoinDependencyを生成するのにActiveRecord::Associations::JoinDependency.newを直接呼び出している箇所があったのを、construct_join_dependencyメソッドを使用するよう統一しています。


ActiveJob::Base no longer dependents on Serializers

activejob/lib/active_job/base.rbactivejob/lib/active_job/serializers.rbの修正です。

ActiveJob::Base、及び、ActiveJob::Serializersから不要なincludeextendを削除しています。


Merge pull request #33208 from utilum/bump_sprockets

Gemfile.lockの修正です。

sprocketsのバージョンを3.7.2に更新しています。

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

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

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


Merge pull request #32706 from yhirano55/fix-app-update-when-hyphenated-name-is-given

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

AppGenerator#app_nameメソッドでアプリ名を生成する際に、-_に変換しています。

-はDBの設定ファイルに使えない等の問題がある、かつ、生成済みのアプリケーションからアプリ名を生成する際に-を正しく扱えない、等の問題があった為。


fix error of a file name

rails guideのThe Rails Initialization Processの修正です。

railties/exe/railsの項で、説明しているファイル名をタイポしている箇所があったのを修正しています。