なるようになるブログ

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

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

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

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


Fix doc format for ActiveSupport::Testing::TimeHelpers [ci skip]

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

ActiveSupport::Testing::TimeHelpers moduleの各メソッドのdocのフォーマットの修正を行っています。


Remove useless aliased_table_name in JoinDependency

Active Recordの修正です。

JoinDependencyクラスから不要なaliased_table_nameメソッドを削除しています。 tableメソッドの方を使用すれば良い為、との事です。


Remove encoding utf-8 magic comment

activesupport/test/multibyte_grapheme_break_conformance_test.rbactivesupport/test/multibyte_normalization_conformance_test.rbの修正です。

ファイルのエンコーディング用マジックコメント(encoding: utf-8)を削除しています。

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

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

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


[ci skip]Remove options of javascript_link_tag and stylesheet_link_tag in guides

rails guideのAction View Overviewの修正です。

javascript_pathstylesheet_include_tagメソッドについての説明から既に存在しないオプションについての説明を削除しています。

rails commit log流し読み(2017/07/13)

2017/07/13分のコミットです。

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


Response#charset= uses default_charset when nil is passed

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

Response#charset=nilを渡した場合、utf-8が設定される旨説明が記載されたいたのですが、実際はdefault_charsetが使用されるので、その旨docを修正しています。


Merge pull request #29772 from y-yagi/allow_to_edit_secrets_in_mutiple_applications_at_the_same_time

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

encrypted secretsをeditする際に使用する一時ファイル名にプロセスIDを加えるよう修正しています。元々は固定の文字列(secrets.yml.enc)だった為、複数のRailsアプリで同時にedit出来なかった為、プロセスIDを加えてファイル名がバッティングしないようにしています。

rails commit log流し読み(2017/07/12)

2017/07/12分のコミットです。

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

activerecord/CHANGELOG.md


Fix english for the rescue_from warning [ci skip]

rails guideのAction Controller Overviewの修正です。

rescue_fromについての注意文言の言い回しを修正しています。


Merge pull request #29748 from koic/enable_layout_empty_line_after_magic_comment

rubocop.ymlLayout/EmptyLineAfterMagicCommentのcopを追加、及び各ファイルに設定を反映しています。


Merge pull request #29746 from kamipo/extract_fake_klass

activerecord/test/cases/relation/mutation_test.rbactiverecord/test/cases/relation_test.rbの修正です。

relation_test.rbrelation/mutation_test.rbそれぞれで定義していたテスト用のクラス(FakeKlass)が、内容がほぼ同じだった為、共通で使用出来るよう別ファイルに切り出しています。


normalize_path used to be nil tolerant

actionpack/lib/action_dispatch/journey/router/utils.rbの修正です。

Router::Utils.normalize_pathの引数にnilを指定した場合NoMethodErrorが発生してしまうバグがあったのを修正しています。


Fix configuring third-party cache stores such as ActiveSupport::Cache::RedisStore

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

retrieve_store_classメソッドでcache store classのファイルを読み込む際、require_relativeを使用していたのをrequireを使用するよう修正しています。

require_relativeだとthird-partyのライブラリの読み込みに失敗する為。


Merge pull request #29699 from lugray/represent_boolean_as_integer

Active Recordの修正です。

SQLite 3 adapterでbooleanの値を保持するのにStringのt / fを使用していたのを、Integer(1 / 0)を使用するよう修正しています。

1と0はSQLite側でも true / falseと認識する為(t / fではtrue / falseとは認識されない)。

元々t / fで保持していた値は、手動で移行する必要があります(e.g. ExampleModel.where("boolean_column = 't'").update_all(boolean_column: 1))。デフォルトではt / fを使用するようになっており、Integerで値を保持するようにしたい場合は、ActiveRecord::ConnectionAdapters::SQLite3Adapter.represent_boolean_as_integertrueを指定すればOKです。

rails commit log流し読み(2017/07/11)

2017/07/11分のコミットです。

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

railties/CHANGELOG.md

actionpack/CHANGELOG.md


Merge pull request #29572 from kaspth/test-runner-no-eager-require

railtiesの修正です。

Railsのtest runner用のminitest pluginを必ず最初にロードし処理を行っていたのを、他のminitestのpluginと同様にロード、及び処理がされるよう修正しています。

既存の実装だと、最初にロード及び引数の解析処理を行ってしまう都合上、他の既存のminitestのpluginと一緒に使用した場合にそれらのpluginが動作しない問題があった為。


Merge pull request #29742 from lugray/default_protect_from_forgery

Action Packの修正です。

ActionController::Baseでprotect from forgeryをデフォルトで有効(protect_from_forgery with: :exceptionが定義されている状態)になるよう修正しています。

デフォルトの挙動を変えたい場合は、config.action_controller.default_protect_from_forgeryにfalseを指定すればOKです。また、action単位でforgery protectionをskipする為のskip_forgery_protectionメソッドも合わせて追加しています。


Add backticks for class names in CHANGELOG [ci skip]

actionpack/CHANGELOG.mdの修正です。

クラス名にバッククォートを追加しています。


:scissors:

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

メソッド名とdocの間にあった不要な空行を削除しています。


Fix typo in method name

railties/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_5_2.rb.ttの修正です。

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


Fix postgresql adapter setup for ActionCable tests

actioncable/test/subscription_adapter/postgresql_test.rbの修正です。

testで使用するDBの接続先情報の取得方法に誤りがあったのを修正しています。

rails commit log流し読み(2017/07/10)

2017/07/10分のコミットです。

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

activesupport/CHANGELOG.md


[ci skip] update MessageEncryptor example to use the key length as returned by OpenSSL

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

MessageEncryptorクラスのdoc内のexampleコードで、keyを生成するのにランダムな値(SecureRandom.random_bytesで生成した値)を使用するよう修正しています。


[ci skip] Updated language on validations.

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

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


Use frozen-string-literal in ActiveJob

Action Jobの修正です。

各ファイルの先頭にfrozen_string_literal: trueを追加しています。


Make sidekiq and resque integration tests work in CI

activejob/test/support/integration/adapters/resque.rbactivejob/test/support/integration/adapters/sidekiq.rbの修正です。

Active Jobのintegration testでredisに接続する際に、パスワードを指定するようにしています。

Allows for other common redis options to be in cable.yml, by defaultで、CIで使うredisにデフォルトでパスワードが設定されるようになった為。


Added time helper method freeze_time which is an alias for travel_to Time.now (#29681)

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

Time.nowTimeを固定するfreeze_timeメソッドを追加しています。

Time.current # => Sun, 09 Jul 2017 15:34:49 EST -05:00
freeze_time
sleep(1)
Time.current # => Sun, 09 Jul 2017 15:34:49 EST -05:00

中身はtravel_toを呼び出している(travel_to Time.now, &block)だけです。

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

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

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

railties/CHANGELOG.md

actioncable/CHANGELOG.md

activerecord/CHANGELOG.md


Don’t call register on custom drivers

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

独自に登録したCapybaraのdriversをsystem testで使用した場合に、NoMethodErrorでエラーになってしまうバグがあったのを修正しています。


Merge pull request #29708 from kamipo/fix_current_timestamp_for_mariadb

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

defaultCURRENT_TIMESTAMPが使われているかのチェックを==を使用していたのを、正規表現でチェックするよう修正しています。

-            if type_metadata.type == :datetime && field[:Default] == "CURRENT_TIMESTAMP"
-              default, default_function = nil, field[:Default]
+            if type_metadata.type == :datetime && /\ACURRENT_TIMESTAMP(?:\(\))?\z/i.match?(field[:Default])
+              default, default_function = nil, "CURRENT_TIMESTAMP"

MariaDB 10.2からCURRENT_TIMESTAMPはfunction(current_timestamp())として扱われるようになり、==では正しくチェック出来なくなった為。


Merge pull request #29706 from kamipo/use_information_schema_to_extract_expression

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

MariaDB 10.2.5以降では、Virtual Columnsの情報をinformation_schemaから取得するようにしています。MariaDB 10.2.5以降ではinformation_schemaからVirtual Columnsの情報が取得出来るようになった為。


Merge pull request #29705 from y-yagi/do_not_update_secrets_yml_enc

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

secrets:editコマンドでsecretを編集する際、secretsを更新しなかった場合もsecrets.yml.encが更新されてしまっていたのを、secretsを更新しなかった場合はsecrets.yml.encが更新されないよう修正しています。


Merge pull request #29695 from y-yagi/secrets_show

railties/lib/rails/commands/secrets/secrets_command.rbの修正です。

secretsを表示する為のsecrets:showコマンドを追加しています。


Merge pull request #29495 from eugeneius/_write_attribute

Active Recordの修正です。

AttributeMethods::Write#_write_attributeメソッドを追加しています。基本的にはwrite_attributesメソッドと同じなのですが、こちらはprimary keyとaliasのチェックを行っておらず、その分高速なので、左記チェックが不要な箇所ではこちらのメソッドを使用するよう修正しています。


Merge pull request #29297 from palkan/fix/action-cable-postgres-identifiers-limit

actioncable/lib/action_cable/subscription_adapter/postgresql.rbの修正です。

Action CableのadapterにPostgreSQLを使用している場合に、stream identifierが64文字以上になった場合、SHA1でハッシュ化した値を使用するよう修正しています。

PostgreSQLではidentifiersに指定出来る文字は63文字まで、という制限がある為。


Merge pull request #29692 from fimmtiu/avoid-translating-non-database-exceptions

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

AbstractAdapter#logメソッドでエラーが起きた際に、RuntimeError以外の全てのエラーをActiveRecord::StatementInvalidにまるめていたのを、まるめ処理を行う範囲をDBに関する処理を行う箇所だけにとどめて、その他のエラーはそのままraiseするよう修正しています。


Merge pull request #28867 from eugeneius/skip_query_cache_in_batches

Active Recordの修正です。

batch処理用のメソッド(find_eachfind_in_batchesin_batches)ではquery cachingは行わないよう修正しています。batch処理でrecordがメモリに残ってしまうのを防ぐ為。


Add backticks [ci skip]

activerecord/CHANGELOG.mdの修正です。

クラス名等にバッククォートを追加しています。


Merge pull request #29715 from reverbdotcom/ptd/fix-invalid-uuids

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

中括弧が開き・閉じどちらかだけあるuuid({a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}等)はinvalidとみなすよう、チェック用の正規表現を修正しています。

-          ACCEPTABLE_UUID = %r{\A\{?([a-fA-F0-9]{4}-?){8}\}?\z}x
+          ACCEPTABLE_UUID = %r{\A(\{)?([a-fA-F0-9]{4}-?){8}(?(1)\}|)\z}

(?(cond)yes-subexp|no-subexp)という書き方が出来るんですねえ。

参考:https://github.com/k-takata/Onigmo/blob/3ddfbfcc469a246f8c5bc50072c7e9cdb1e50b22/doc/RE#L293


Treat secrets as binary

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

encrypted secretsの値を読み書きする際に、File.write / File.readを使用していたのを、IO.binwrite / IO.binreadを使用するよう修正しています。

元々、Rails 5.1.1までは、IO.binwrite / IO.binreadを使用していたのが、5.1.2でFile.write / File.readに変更されていました。しかし、それにより、Rails 5.1.1で作成した encrypted secretsをRails 5.1.2で読み込もうとすると、IO.binreadで読み込んだバイナリデータをFile.writeで書き込む事になり、結果エラー(Encoding::UndefinedConversionError)なっていました。

その為、データの書き込みでエラーになるのを避ける為、5.1.1と同じくIO.binwrite / IO.binreadを使用するよう修正しています。


Load environment file in dbconsole command

railties/lib/rails/commands/dbconsole/dbconsole_command.rbの修正です。

dbconsoleコマンド実行時にenvironment fileを読み込むよう修正しています。database.ymlにenvironment fileに指定した値を使用出来るようにする為。


Use frozen-string-literal in ActiveSupport

Active Supportの修正です。

各ファイルの先頭にfrozen_string_literal: trueを追加しています。


Merge pull request #29655 from kirs/frozen-friendly-ap-ar

Action Pack、Action Viewの修正です。

各ファイルの先頭にfrozen_string_literal: trueを追加、及び、Stringを変更する箇所でdupを呼び出すよう修正しています。