なるようになるブログ

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

rails commit log流し読み(2019/07/22)

2019/07/22分のコミットです。

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


Merge pull request #36721 from Edouard-chin/ec-errors-each

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

ActiveModel::Errors#eachメソッドのblockの引数チェック処理に誤りがあり、eachを直接使用していない場合(mapfirst等で使用)に不要なdeprecateメッセージが表示されてしまう、というバグがあったのを修正しています。


create a newline between blocks when gem_group, github and add_source was called.

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

groupsourcegithubメソッドで行を追加する前に、改行を入れるよう修正しています。


Move the deprecation call after the new class has been defined:

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

SourceAnnotationExtractor classに対するdeprecateの指定を実際のclass定義前に行っていたのを、class定義後に行うよう修正しています。

class定義前に行っていると、TracePointを使用してreturn_valueの値を取得している場合にエラーになってしまう(初期化されていないクラスを参照してしまう)為。

rails commit log流し読み(2019/07/21)

2019/07/21分のコミットです。

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


Merge pull request #35285 from masakazutakewaka/fix_railtie_add_newline_to_gemfile_insertion

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

gem / gem_group / github メソッドでGemfileに行を追加する際に、最後の行が改行で終わっていない場合にのみ改行を追加するよう修正しています。

rails commit log流し読み(2019/07/20)

2019/07/20分のコミットです。

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


Merge pull request #36511 from aantix/sms_link_helper

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

sms linkを作成する為のsms_toメソッドを追加しています。

sms_to("15155555785", "Jim Jones")
#=> <a href="sms:15155555785;">15155555785</a>

Fix argument in doc sample of new sms_to helper [ci skip]

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

先ほど追加されたsms_toメソッドのdoc内のexampleコードで、引数名をタイポしている箇所があったのを修正しています。


Preserve existing attachment assignment behavior for upgraded apps

Active Storage、railtiesの修正です。

Rails 6.0で、has_many_attachedで宣言されたatatchments collectionへのassign処理が、attachmentの追加から置き換え(元のファイルは削除)に変更になっていました。

が、一つのバージョンアップで完全に非互換な変更が発生してしまうのはよくない、という事で、configでassign処理の挙動を制御出来るよう修正しています。config.active_storage.replace_on_assign_to_manyにtrueを指定した場合は置き換え、falseを指定した場合は5.2までと同様に追加処理になっています。

まだdepreacateメッセージは出ないようになっていますが、基本的には置き換え処理を使用する事を推奨しており、追加処理はいずれdeprecateにする予定、との事です。

rails commit log流し読み(2019/07/19)

2019/07/19分のコミットです。

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


Merge pull request #36703 from y-yagi/script-src-xxx_and_style-src-xxx

actionpack/lib/action_dispatch/http/content_security_policy.rbの修正です。

Content Security Policyでscript-src-attrscript-src-elemstyle-src-attrstyle-src-elem directivesを使用出来るよう修正しています。


[ActionController] Fix send_file example for 404

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

send_fileのdoc内の404ページを表示するexampleでdispositionの指定が不足していたのを修正しています。


[ActiveRecord] Deduplicate optimizer hints

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

relationをmergeした時等に同じoptimizer hintsが表示されてしまうケースがあったのを、同じoptimizer hintsは表示されないよう修正しています。


Include common commands in rails help output

activerecord/lib/active_record/railties/databases.rakeの修正です。

migrate:upmigrate:downmigrate:redodb:restdescコメントアウトされていたのを、コメントを外してヘルプに左記タスクが表示されるよう修正しています。

比較的よく使うタスクなのでヘルプに表示されていてもよいのではないか、というのが理由。


Fix a minor typo in ActionView::UnboundTemplate

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

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

rails commit log流し読み(2019/07/18)

2019/07/18分のコミットです。

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


Revert "Make UTF-8 string requirement explicit for ActiveSupport::Inflector.transliterate"

ActiveSupport::Inflector.transliterateメソッドの先頭で引数に指定されたStringがUTF-8じゃない場合ArgumentErrorをraiseするよう修正した、Merge pull request #36690 from cpruitt/make-parameterize-requires-utf-8-explicitをRevertしています。

元々UTF-8以外のStringを指定した場合エラーになってしまう為上記対応を行ったのですが、UTF-8以外のStringを指定した場合エラーになる、が勘違いだった為Revertしています。


Merge pull request #36691 from Edouard-chin/ec-system-test-route

actionpack/lib/action_dispatch/railtie.rbactionpack/lib/action_dispatch/system_test_case.rbの修正です。

System test classでroute helperを直接includeしないよう修正しています。

Permit running jobs in system testsでroute helperをincludeするようになったのですが、route helperにtest_ではじまるrouteがあった場合に、それがテスト用のメソッドとminitestに判定されてしまい、結果エラーになる、という問題があった為includeしないよう修正しています。

代わりにroute helperをincludeしたクラスをSystemTestCaseクラス内で保持 + method_missingでそのクラスで使用し、route helperメソッドを使用出来るよう対応しています。


Merge pull request #36603 from y-yagi/add_skip_collision_check_option

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

generatorに、既に存在しているクラスと同じ名前かどうかをチェックする処理をスキップする為の、skip_collision_checkオプションを追加しています。


Merge pull request #36695 from kamipo/revert_unnecessary_change

activestorage/test/analyzer/video_analyzer_test.rbの修正です。

durationのチェック処理を修正したMerge pull request #36676 from wjessop/change_activestorage_metadata_duration_to_boundをRevertしています。そもそも不要な対応だった為。

rails commit log流し読み(2019/07/17)

2019/07/17分のコミットです。

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

activerecord/CHANGELOG.md


Merge pull request #36667 from gmcgibbon/clarify_logger_set_in_log_subscriber_docs

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

ActiveSupport::LogSubscriberクラスのdocに、ActiveSupport::LogSubscriberを使用するにはActiveRecord::LogSubscriber.logger=の設定が必要(Rails内で使用する場合は自動で設定される)である旨説明を追加しています。


Merge pull request #36648 from louim/patch-1

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

ActiveSupport::MessageVerifier#generateメソッドのdoc内の戻り値についての説明を、実際の内容と合うよう修正しています。


Raise specific exception on Mysql2::Error::TimeoutError

activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rbactiverecord/lib/active_record/errors.rbの修正です。

timeoutが発生した時に使用する為のActiveRecord::AdapterTimeoutクラスを追加ています。元々MySQLでtimeoutが発生した場合、Mysql2::Error::TimeoutErrorがraiseされていたのですが、今後はActiveRecord::AdapterTimeoutがraiseされるようになります。


Add missing period [ci skip]

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

ActiveRecord::AdapterTimeoutクラスのdocの末尾にピリオドを追加しています。


[ActiveRecord] Superclass for aborted queries

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

queryが中断された事を意味するエラークラス(QueryAborted)を追加し、timeout等でqueryが中断された場合に使用されるStatementTimeoutQueryCanceledAdapterTimeoutの親クラスをQueryAborted`に変更しています。queryが中断された場合のエラーハンドリングをしやすくる為。


Merge pull request #36635 from abhaynikam/36332-fix-engine-documentation-to-remove-js-directory-mention

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

engineが生成するディレクトリについて説明している箇所に、既に生成しないようになっているディレクトリ(app/assets/javascripts)が含まれていたのを削除しています。


Support beginless ranges in hash conditions.

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

Active RecordにRuby 2.7で追加されたbeginless rangesのサポートを追加しています。

User.where(created_at: ..1.year.ago)
# User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."created_at" <= ? LIMIT ?  [["created_at", "2018-07-17 08:49:18.150570"], ["LIMIT", 11]]

みたいに書けるようになっています。


Merge pull request #36690 from cpruitt/make-parameterize-requires-utf-8-explicit

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

ActiveSupport::Inflector.transliterateメソッドの先頭で引数に指定されたStringがUTF-8じゃない場合、ArgumentErrorをraiseするよう修正しています。

元々transliterateUTF-8以外のStringを指定した場合にエラーになる(Encoding::CompatibilityErrorがraiseされる)ようになっており、UTF-8以外はサポートしていない事が明示的にわかるようする為にArgumentErrorをraiseするように修正したとの事です。

が、UTF-8以外のStringを指定した場合にエラーになる、に勘違いあったようで、後ほどRevertされています。

rails commit log流し読み(2019/07/16)

2019/07/16分のコミットです。

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

actionview/CHANGELOG.md

actionpack/CHANGELOG.md


Inline anemic log guard

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

一箇所でしか使用されていないlogメソッドを削除し、使用している箇所で直接処理を行うよう修正しています。


Merge pull request #36532 from itsWill/add_to_a_to_annotated_source_code

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

Template::Error#source_extractメソッドがバックトレースからファイル名を見つけられなかった場合に空の配列を返すよう修正しています。

元々は上記のケースではnilが返っていたのですが、source_extractを使用しているメソッドはArrayが来ることを期待しており、nilが来るとエラーになってしまう為。


Remove caveat for older Ruby's dup behavior [ci skip]

rails guideのActive Support Core Extensionsの修正です。

duplicable?の項にあった古いRubyでの挙動についての説明を削除しています。


Merge pull request #36640 from Edouard-chin/ec-uniq-validation-fix

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

ActiveModel::Errorで同じエラーかどうかをチェックする際に、callback optionは無視してチェックするよう修正しています。


Merge pull request #36649 from Edouard-chin/ec-errors-strit-match-collection

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

ActiveModel::Error#strict_match?メソッドで実際にエラーメッセージを生成して一致するかチェックしていたのを、オプションの値で一致するかどうかをチェックするよう修正しています。

attributeにassocation名 + attributeのフォーマットで指定された場合(e.g. :"family_members.name")に正しくエラーメッセージの生成が出来ない為。


Merge pull request #36654 from Edouard-chin/ec-errors-delete

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

ActiveModel::Errors#deleteメソッドが、何も削除しなかった場合はnilを返すよう修正しています。


active_support/core_ext/object/duplicable is not in use here

activerecord/lib/active_record/base.rbactivesupport/lib/active_support/cache/strategy/local_cache.rbの修正です。

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


Merge pull request #36656 from Edouard-chin/ec-local-cache-reference

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

fetch_entryメソッドでlocal cacheから値を返す時に、値の参照が返っていたのを、値のコピーを返すよう修正しています。誤って元の値を変更してしまうのを避ける為。


Merge pull request #36676 from wjessop/change_activestorage_metadata_duration_to_bound

activestorage/test/analyzer/video_analyzer_test.rbの修正です。

Fix activestorage CI failure due to ffprove version differeceでOSのバージョンが変わった事により影響があったdurationのチェックを削除したのですが、その他影響が無かったdurationのチェックはそのままになっていました。

で、このPRではそのままになっていた(修正する必要が無い)durationのチェック処理を、値を厳密にチェックするのではなく、特定の範囲内に収まっているかチェックするようにしています。


Merge pull request #36672 from jbaranov/strong-params-hash

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

ActionController::Parameters#hashメソッドを追加しています。値は@parametershash@permittedを入れたArrayの`hash。

Array#uniqSetを使用した場合に、正しく重複データが削除されるようにする為。

params1 = ActionController::Parameters.new(a: 1)
params2 = ActionController::Parameters.new(a: 1)

[params1, params2].uniq
# => [<ActionController::Parameters {"a"=>1} permitted: false>

set = Set.new()
set.add(params1)
set.add(params2)

set
# => #<Set: {<ActionController::Parameters {"a"=>1} permitted: false>}>

Merge pull request #36557 from sikachu/fix-source-annotation-extractor-annotation

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

ActiveSupport::Deprecation::DeprecatedConstantProxyでdeprecateにしたクラスのサブクラスにアクセス出来ない(e.g. SourceAnnotationExtractorをdeprecateにした場合、SourceAnnotationExtractor::Annotation)という問題があったのを、通常のクラス同様サブクラスにアクセス出来るよう修正しています。


Fix Loadable.exclude_from to also reset Kernel#require

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

Loadable.exclude_fromで、Kernel#load同様にKernel#requireの呼び出し処理のリセットを行うよう修正しています。不要なメソッド呼び出しを減らせるようにする為。


Merge pull request #31634 from afcapel/reduce-routing-error-log-noise

actionpack/lib/action_dispatch/middleware/debug_exceptions.rbactionpack/lib/action_dispatch/middleware/exception_wrapper.rbの修正です。

ActionController::RoutingErrorが発生した際にバックトレースが全て表示されていたのを、アプリ部分のトレースだけ表示するよう修正しています。

今までだとバックトレースが数十行になってしまっていたのですが、ActionController::RoutingErrorsが発生した場合、ライブラリのトレースは不要な事が殆ど(必要なのはトレースではなくパスの情報だけ)必要無い為。


Make the selent exceptions configurable on the exception wrapper

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

バックトレースの表示を、アプリのトレースだけに制限するエラーをconfig(silent_exceptions)で管理するよう修正しています。


Reuse the exception class name in all places in the wrapper

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

各箇所で使用しているexception class nameを変数で保持するよう修正しています。


Merge pull request #36639 from Edouard-chin/ec-am-errors-fullmessages

Active Modelの修正です。

ActiveModel::Errors#full_messageメソッドをActiveModel::Errorクラスに移動しています。

元々の実装だとActiveModel::Errorsのコンストラクタに渡すbaseオブジェクトに定義されている必要があったのですが、これはRails 6.0までは不要な制限だった、かつ、そもそもメソッドの呼び出し的にErrorsにメソッドが定義されている必要が無かった為、Errorに移動するようにしています。