なるようになるブログ

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

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

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

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

activesupport/CHANGELOG.md

activerecord/CHANGELOG.md


Ignores a default subclass when becomes(Parent)

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

STIを使用している、かつ、typeにデフォルト値が指定されている場合に、サブクラスでbecome(Parent class)を指定した場合に、戻り値がParentではなく、デフォルトに指定されているclassになってしまうバグがあったのを修正しています。


Add support for connection pooling on RedisCacheStore

Active Supportの修正です。

redis cache storeにconnection poolingのサポートを追加しています。Support for connection pooling on mem cache storeのredis cache store版。

pool_sizeオプションを指定した場合のみconnection poolが使用されるようになっています。connection pool部分の実装は同じくmperham/connection_pool gemを使用しています。


Support for PostgreSQL foreign tables

activerecord/lib/active_record/connection_adapters/postgresql/schema_statements.rbactiverecord/lib/active_record/connection_adapters/postgresql_adapter.rbの修正です。

PostgreSQLのforeign tablesについてのサポートを追加しています。

これにより、foreign tablesで定義されたtableも、普通のtableやviewと同様にActive Recordから操作出来るようになっています。


Fix building has_one through record

activerecord/lib/active_record/associations/has_many_through_association.rbactiverecord/lib/active_record/associations/has_one_through_association.rbの修正です。

has_one through associationを使用している場合に、associationに対するbuild処理でエラーになってしまうバグがあったのを修正しています。


Update guide text not to contradict image

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

Getting Up and Runningの項、ActionController::UnknownFormatが出た場合の説明で、エラーが発生した場合の画像で一部行を切り捨てている旨説明がされていたのですが、実際は切り捨てられてはいなかった為、該当の説明を削除しています。


remove text repetition

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

Getting Up and Runningの項のグラマーの修正を行っています。


Add missing require

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

不足していたtmpdirのrequireを追加しています。


Improve fault tolerance for redis cache store

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

redis cache storeのincrementdecrement、及び、read_multiでredis serverに接続出来なかった場合に、exceptionがraiseされていたのを、exceptionがraiseされないよう修正しています。

他のメソッド(write_entrywrite_multi_entries等)ではそのような挙動になっていたのと、mem cache storeと挙動を合わせる為、のようです。


Fix locale_selector JS bug in ActionMailer Preview

railties/lib/rails/templates/rails/mailers/email.html.erbの修正です。

Action Mailerのemail previewでlocaleが一つしか無い場合に、mimeを切り替えるとJSでエラーになってしまうバグがあったのを修正しています。

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

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

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


bin/yarn: Pass through arguments with spaces

railties/lib/rails/generators/rails/app/templates/bin/yarn.ttの修正です。

bin/yarnでARGVを渡す際に強制的にスペースを入れるようになっていたのを、そのまま渡すよう修正しています。

-    exec "yarnpkg #{ARGV.join(' ')}"
+    exec %w(yarnpkg) + ARGV

元のやりかただと、yarn run add-copyright "(c) 2017, 2018 MyCompany"のように、スペースを意図的に入れた引数が正しく渡せなかった為。


PERF: Recover changes_applied performance (#31698)

Active Record、Active Modelの修正です。

Active Record配下にあったAttributeクラス及びAttributeSetクラスをActive Modelに移動した、Move Attribute and AttributeSet to ActiveModelの対応の影響で、Active Record のobjectのsave処理の性能が劣化してしまっていたのを修正しています。

先の対応でDirty#changes_appliedメソッドでchangesメソッドを呼び出すよう修正されていたのですが、changesメソッドは遅い処理の為、その影響で性能劣化が発生してしまっていました。

changesメソッドは使用せず、mutation trackerによって管理されている値を使用するよう修正しています。


Use singular define_attribute_method

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

Attributes.attributeメソッドでメソッドを定義するのにdefine_attribute_methodsメソッドを使用していたのをdefine_attribute_methodメソッドを使用するよう修正しています。

定義するメソッドが一つだけの場合、define_attribute_methodで十分な為。


Pass desired driver to Redis client constructor rather than munging global config

activesupport/test/cache/stores/redis_cache_store_test.rbの修正です。

RedisCacheStoreにdriverを指定するのにグローバルコンフィグを使用していたのを、コンストラクタの引数に指定するよう修正しています。


Merge pull request #31710 from eugeneius/indestructible_through_record

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

has_many through association + counter cacheを使用している場合に、association先のrecordをdestroyした場合に、destroyに失敗した場合(before_destroyで処理が停止された場合)もcounter cacheが更新されてしまっていたのを、更新されないよう修正しています。


Merge pull request #24964 from vipulnsward/true-false

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

SQLite3Adapterクラスの@active変数の初期値をnilからtrueに変更しています。

@active変数に格納される値をtrue/falseだけになるようにし、不要なnilの場合の考慮を削除する為。

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

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

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


Cope with videos with undefined display aspect ratios

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

画面アスペクト比がvideoから取得出来なかった場合にエラーになってしまっていたのを、エラーにならないよう修正しています。

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

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

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

activestorage/CHANGELOG.md


Preserve display aspect ratio for videos with rectangular samples

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

ActiveStorage::Analyzer::VideoAnalyzerでwidthとheightを抽出する際に、画面アスペクト比も保持するよう修正しています。

画面アスペクト比metadataメソッドで取得可能(キーはdisplay_aspect_ratio)になっています。


Use helper method

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

videoからメタデータを抽出するテストで、メタデータの取得にそれようのヘルパーメソッドを使用するよう修正しています。


Fix typos. Improve text_helper documentation.

actionpack/lib/action_dispatch/routing/mapper.rbactionview/lib/action_view/helpers/text_helper.rbのdocの修正です。

各メソッドのフォーマット、タイポ、言い回しの修正等を行っています。


More exercise ActiveModel::Dirty tests

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

ActiveModel::Dirtyのテストに、初期値が指定されているattributeについてのテストを追加しています。


Merge pull request #31641 from ckoenig/remove_frozen_string_literal

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

JRubyでdatabase名にpostgresql / mysql / sqlite3を指定していた場合に、database名のjdbc driverへの変換処理でRuntimeErrorが発生してしまうバグがあったのを修正しています。

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

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

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

activesupport/CHANGELOG.md


Fix ActionView UJS build

ci/qunit-selenium-runner.rbの修正です。

CI上でUJSのテスト用にChromeを起動する際に、--no-sandboxオプションを指定するよう修正しています。

Travis CIのバグで、sanboxオプションを指定するとChromeがcrashする、という問題がある為。

参考:Regression: Chrome fails to start due to incorrect default chrome-sandbox permissions


Use selected_migrations if block_given?

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

MigrationContext#downメソッドで使用するメソッドに誤りがあったのを修正しています。


Add test to properly test down with a block

railties/test/application/rake/migrations_test.rbの修正です。

migrateのdownメソッドをblockを指定して呼び出した場合のテストを追加しています。


Merge pull request #31730 from bogdanvlviv/allow_false_for-config-generators-system_tests

railties/lib/rails/generators/test_unit/scaffold/scaffold_generator.rbの修正です。

config.generators.system_testsにfalseを指定した場合もSystem Testを生成しないよう修正しています。元々falseを指定した場合も生成されてしまっていた(生成したく無い場合はnilを指定する必要があった)のですが、他のgeneratorの挙動を合わせる為、falseでも生成しないよう修正しています。


Merge pull request #31577 from prathamesh-sonpatki/upgrade-guide-bootsnap

rails guideのUpgrading Ruby on Railsの修正です。

Upgrading from Rails 5.1 to Rails 5.2の項を追加し、bootsnap gemについての説明を追加しています。


Support for connection pooling on mem cache store

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

mem cache storeにconnection poolingのサポートを追加しています。

pool_sizeオプションを指定した場合のみconnection poolが使用されるようになっています。connection pool部分の実装はmperham/connection_pool gemを使用しています。


Support hash as first argument in assert_difference. (#31600)

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

assert_differenceの第一引数にHashを指定出来るよう修正しています。これにより、一つのassertionで複数要素の値のチェックが出来るようになります。

assert_difference ->{ Article.count } => 1, ->{ Notification.count } => 2 do
  post :create, params: { article: {...} }
end

Add locale selector to email preview (#31596)

railties/lib/rails/mailers_controller.rbrailties/lib/rails/templates/rails/mailers/email.html.erbの修正です。

Action Mailerのemail previewでlocaleを選択出来るよう対応しています。

PRより。

34454066-f8bf06ec-eda5-11e7-82ba-1c2a0961b6b8.gif (833×768)


Merge pull request #31663 from Edouard-chin/remove-without-sql-mode

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

NO_AUTO_VALUE_ON_ZERO modeが無効になっている場合にfixtureのinsertが正しく動作する事を確認するテストを追加しています。


Testing actioncable against websocket-driver 0.7.0 (#30711)

actioncable/actioncable.gemspecの修正です。

websocket-driver gemのバージョンが0.6系で固定されてしまっていたのを、0.6.1以上を使用出来るよう修正しています。websocket-driver gemの0.7.0がリリース済みで、そちらを使用出来るようにする為。


Update Gemfile.lock to reflect websocket-driver 0.7.0

Gemfile.lockの修正です。

先のactioncable.gemspecの更新の際に、Gemfile.lockの更新が漏れていたのを修正しています。


Fix minor typo [ci skip]

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

association(belongs_tohas_many等)により追加されるメソッドの数が誤っていたのを修正しています。


Restore test_migrations_status_with_schema_define_in_subdirectories

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

Merge pull request #31727 from eileencodes/refactor-migration-classes-to-allow-for-migrations_paths-on-connの修正で、サブディレクトリに置かれたmigirationファイルが正しくロードされる事を確認するテストが、本来の意図と異なる形に修正されてしまったのを、再度元の意図通りにテストを修正しています。


Remove unused migration_context in DatabaseTasks

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

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


Remove unused connection argument from MigrationContext#current_version

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

MigrationContext#current_versionメソッドから、使用していないconnection引数を削除しています。


Merge pull request #31732 from koic/enable_autocorrect_for_lint_end_alignment_cop

Lint/EndAlignment copのautocorrectを有効化、及び、各ファイルにcopを適応しています。

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

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

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


Merge pull request #31713 from aellispierce/refactor-browser-options

Action Packの修正です。

System testのブラウザの判別処理等をActionDispatch::SystemTesting::Browserクラスで行うようリファクタリングしています。


Merge pull request #31727 from eileencodes/refactor-migration-classes-to-allow-for-migrations_paths-on-conn

Active Recordの修正です。

ActiveRecord::Migratorクラスのclass methodsで行っていたmigration処理を、新たにMigrationContextクラスを追加し、そちらのinstance methods処理を行うようリファクタリングしています。

現状、connectionに関しては微妙に複数DB向けのサポートは入っているのですが、migrationについては特に複数DB向けのサポートは入っておらず、DB毎にmigrationファイルのディレクトリを分ける、というような事がしづらくなっています。

この点を今後対応する予定があり、その為の対応の準備として、MigrationContextクラスを追加したとの事です。あとparallel testingの機能を追加予定で、そちらでも使用するようです。


Revert "Merge pull request #31434 from olivierlacan/boot-feedback"

server、及び、console起動時にBooting Railsというメッセージを表示するよう対応した、Merge pull request #31434 from olivierlacan/boot-feedbackをrevertしています。

config/boot.rbはライブラリや他のアプリケーションから呼ばれるファイルであり、ここでARGVがあることや、stdoutにメッセージを出すのは良くない、という事になりrevertされました。

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

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

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


Provide a sensible default host

Active Storageの修正です。

blobからcontent typeを取得するよう対応した、Extract content types from blob dataで、URLを生成する都合上disk serviceでhostの指定が必須になったのですが、disk serviceでhostの指定が必須なのは違和感があるのでは、という指摘が入り、hostの指定は任意になりました。指定されてない場合のデフォルトはhttp://localhost:3000


Test against the pure-Ruby Redis driver

activesupport/Rakefileactivesupport/test/cache/stores/redis_cache_store_test.rbの修正です。

CIで、ActiveSupport::Cache::RedisCacheStoreTestsのテストがpure-Ruby Redis driverを使用して実行されるよう修正しています。

元々はhiredis driverを使用してのテストだけが実行されていたのですが、pure-Ruby Redis driverを使用した場合のみおきるエラーが発生してしまった為、対応したようです。


Convert keys to binary in the Redis cache store

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

RedisCacheStore#normalize_keyメソッドでkeyをノーマライズする際に、binaryに変換してからノーマライズ処理を行うよう修正しています。

pure-Ruby Redis Driverを使用している場合に、keyの値によってはencoding errorsが発生しまう事がある為。


Update "Layouts and Rendering in Rails" guide [ci skip]

rails guideのLayouts and Rendering in Railsの修正です。

Rendering by Default: Convention Over Configuration in Actionの項で、実際にrender処理を行うmodule名を誤っていたのを修正、既に存在しないBuilderについて言及していたのを削除、等を行っています。