なるようになるブログ

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

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

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

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


Fix url_helper examples in testing guide [ci skip]

rails guideのTesting Rails Applicationsの修正です。

All of these keyword arguments are optional.の項のexampleコードで、url helperに渡す引数に誤りがあったのを修正しています。


Remove reference to Tokaido

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

Installing Railsの項で、RailsをインストールするのにTokaidoを使用するのを勧めていたのを削除しています。

Tokaidoの開発がもう止まってしまっている為。

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

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

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


[ci skip] update ActiveStorage documentation

rails guideのActive Storage Overviewの修正です。

File/IO Objectsをattachする場合の説明や、ファイルをダウンロードする方法の説明、及び、他のJSのライブラリと一緒に使用する場合の説明等を追加しています。


Merge pull request #32747 from printercu/improve_t_helper

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

TranslationHelper#translateメソッドでdefaultオプションが指定されていない場合に、不要なオブジェクトを生成しないよう修正しています。


Fix Associations::ClassMethods doc [ci skip]

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

Associations:ClassMethodsのdocに、定義されない#association.nil?メソッドについての例があったのを削除、及び、各メソッド毎にttタグで囲むよう修正しています。


Restore original merging order to enforce if_exists: true

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

2.6 warnings: passing splat keyword arguments as a single Hashの対応で、create_tableforceオプションが指定された場合にif_exists: trueが強制的に指定されなくなってしまった(オプションにif_existsが指定されていたら、そちらが使用されてしまう)のを、元の挙動(必ずif_exists: trueを指定する)に戻しています。


We usually do not use GH#1234 style in the CHANGELOGs [ci skip]

rails guideのContributing to Ruby on Railsの修正です。

Updating the CHANGELOGの項、issueを修正した際のエントリーの書き方の例を修正しています。

-    You can continue after the code example and you can attach issue number. GH#1234
+    You can continue after the code example and you can attach issue number. Fixes #1234.

今は通常GH#xxxという書き方はしていない為。


Swap assertion order for better reporting

railties/test/generators/app_generator_test.rbの修正です。

test_system_tests_directory_generatedtest/systemディレクトリの存在チェックの前にtest/system/.keepの存在チェックをしていたのを、test/systemディレクトリの方を先にチェックするよう修正しています。


Make Railties CI log for Ruby 2.6 accessible again

Gemfileの修正です。

thorのmasterブランチを使用してテストを実行するよう修正しています。ERB.newの引数指定によるdeprecateが表示されるのを避ける為。


Stream blobs from disk in 5 MB chunks

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

DiskService#downloadメソッドでstreaming downloadする際に、一度にファイルを読み込むサイズを64KBだったのを、5MBに修正しています。他のserivceと合わせる為。


Improve the performance of ActiveSupport::Inflector.ordinal

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

ActiveSupport::Inflector.ordinalメソッドで、引数のnumberが1..13の場合に、値を決め打ちで返すよう修正しています。パフォーマンス改善。


Avoid duplicating downloads from Google Cloud Storage in memory

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

GCSService#downloadメソッドで、bodyを取得するのにreadメソッドを使用していたのを、stringメソッド使用するよう修正しています。

不要なオブジェクトの生成を避ける為。

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

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

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


Adding precision about which letter case to use for controller names (#32740)

rails guideのRails Routing from the Outside Inの修正です。

Connecting URLs to Codeの項、toオプションで指定するコントローラ名はスネークケースで記載する必要がある旨説明を追加しています。


Merge pull request #31956 from fatkodima/has_attached-presence-validation

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

Attached::Oneクラスにblank?メソッドを追加しています。実装はattachment.blank?の結果を返すようになっています。

attachmentsにvalidationを出来るようにする為との事です。

class User < ActiveRecord::Base
  has_one_attached :avatar
  has_many_attached :highlights

  validates :avatar, presence: true
  validates :highlights, presence: true
end

↑のようにpresenceチェックが出来るようになっています。


Merge pull request #32733 from Edouard-chin/ec-setupand-teardown

activesupport/lib/active_support/test_case.rbactivesupport/lib/active_support/testing/setup_and_teardown.rbの修正です。

ActiveSupport::Testing::SetupAndTeardown moduleをincludeActiveSupport::TestCaseに追加していたのを、prependを使うようにし、継承チェインの先頭にはいるよう修正しています。

先頭にいないと、after_teardownでexceptionが発生した場合のエラーのハンドリング(exceptionが発生しても後処理を継続する処理)が期待通りに動作しない為。


Merge pull request #32727 from utilum/assert_dont_expects

Action Cable、Active Recordのテストの修正です。

mock処理にmochaを使用していたのを、rails内部のヘルパーメソッド(assert_calledassert_called_with)を使用するよう修正しています


Merge pull request #30647 from droptheplot/render-partials-string-locals

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

partial rendererのlocalsオプションに渡すHashのkeyにStringを使用出来なかったのを、使用出来るよう修正しています。


[ci skip] Fix typo in testing.md

rails guideのTesting Rails Applicationsの修正です。

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

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

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

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

activerecord/CHANGELOG.md


Reduce extra object creations in TaggedLogging

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

TaggedLoggingでtagからStringを生成する際に、tagが一つしか無い場合は不要なオブジェクトを生成しないよう修正しています。


Reduce String allocations when building Action View tags

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

TagBuilder#tag_optionメソッドでString#grubを使っていたのをString#grub!を使うようにして、不要なオブジェクトが生成されないよう修正しています。


Don't try to destoy the given string via method argument

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

先のString#gsub!を使用するにした対応の影響で、tagをescapeしない際にFrozenErrorが発生してしまうようになっていたので、valuedupするようにして対応しています。


Don't dup Strings when jsonifying

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

EscapedString#to_jsonメソッドで、String#grubを使っていたのをString#grub!を使うようにして、不要なオブジェクトが生成されないよう修正しています。


Address Style/StringLiterals offence

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

Stringを生成するのにシングルクォートを使用していたのを、ダブルクォートを使用するよう修正しています。


Add test case that assigning belongs_to on destroyed object raises frozen error

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

destoy済みのobjectをbelongs_to associationに指定した場合のテストを追加しています。


Update 'rails_welcome.png' to reflect a more diverse population (#32735)

guides/assets/images/getting_started/rails_welcome.pngの修正です。

元々白人(と思われる人)しかいなかったのを、より多様な人種がいる画像に更新しています。

rails_welcome.png

参考:More inclusive imagery


Merge pull request #32617 from tgturner/size-should-use-available-association

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

Associations::CollectionAssociation#size、及び、Associations::CollectionAssociation#empty?メソッドでassociation idsがload済みだった場合、queryを実行せず、そのload済みのidsを使用するよう修正しています。


Ensure that ids_reader respects dirty target whether target is loaded or not

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

ids_readerメソッドで、targetがロード済みかどうかに関わらず、dirty targetを使用するよう修正しています。collection.sizeと挙動を合わせる為。

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

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

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


Simplify URL generation for partial downloads from GCS

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

GCSService#download_chunkメソッド内のURI生成処理をリファクタリング(fileの生成処理に既存のメソッドを使用、不要な引数の削除)しています。


Move #extract_metadata_from to ActiveStorage's TestHelper

Active Storageのテストの修正です。

各テストクラスで定義していたextract_metadata_fromメソッドをtest_helper.rbに移動しています。


Merge pull request #32725 from nikolai-b/rm_count_math_mixin

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

Arel::Nodes::Countから使用していないMath moduleを削除しています。

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

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

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


Update schema.rb documentation [CI SKIP]

rails guideのActive Record Migrationsの修正、及び、activerecord/lib/active_record/schema_dumper.rbのdocの修正です。

railsがサポートしてる二つのスキーマフォーマットについての詳細な説明、及びそれらのpros / consにいての説明を加筆修正しています。


Fix typo in migrations guide [ci skip]

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

先のdocの修正で、db/structure.sqldb/strcuture.sqlにタイポしていたのを修正しています。


Fix test method name

railties/test/generators/app_generator_test.rbの修正です。

デフォルトで生成されるGemfileに、Active Storageに関するgemが生成される事、及び、skipオプションを指定した場合は生成されないことを確認するテストのテスト名にmini_magickが含まれていたのを修正しています。

Use ImageProcessing gem for ActiveStorage variantsmini_magickは直接使用する事は無くなった為。


Merge pull request #32097 from matthewd/arel

rails/arelで管理していたArelのコードを、Active Record配下に移動しています。rails/arelにはgemspec、README等だけ残っている状態。

Arelを使っているのは基本的にRails(Active Record)だけなのに、gemが別な事によりリリース(Railsをリリースする前にArelをリリースする必要がある等)やコードの調整の手間が増えている、という問題がありました。

で、ならいっそコードベース一緒にしちゃって良いのでは、という話しになり、Active Record配下にまるまる格納される事になりました。Railsを使うユーザ側への影響は特に無し。


Address NameError: uninitialized constant Arel::Collectors::Bind

activerecord/test/cases/arel/collectors/bind_test.rbの修正です。

arel/collectors/bindのrequireが不足していたのを修正しています。


Merge pull request #32715 from vaidehijoshi/refactor-scanner-test

actionpack/test/journey/route/definition/scanner_test.rbの修正です。

TestScannerクラスで、tokenについてのテストを一つのテストメソッドで行っていたのを、token毎にテストメソッドを分けるよう修正しています。エラーの際にどのtokenでエラーになったのかをわかりやすくするため。


Merge pull request #32713 from utilum/max_ffi_version

Gemfileの修正です。

ffi gemのバージョンを1.9.21以下に固定しています。

Use ImageProcessing gem for ActiveStorage variantsffi 1.9.23を使用するようになっていたのですが、1.9.23だと時折セグフォが発生するという問題があった為、バージョン固定を追加しています。


Add a helper method to check that gem does not exist in Gemfile

railties/test/generators/app_generator_test.rbの修正です。

Gemfileに指定されたgemが無いことを確認するヘルパーメソッドを追加、及び、そのヘルパーメソッドを使用するよう修正しています。


Merge pull request #32702 from bogdanvlviv/fix-description-for-31685

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

The Flashの項にある、ログアウト処理のexampleコードで、sessionからuser idを削除してなかった(nilを入れいただけ)のを、明示的にuser idを削除するようコードを修正しています。

合わせて、Accessing the Sessionの項で、ログアウト処理でsessionnilを指定する旨説明をしていたのを、sessionを削除する旨説明を修正しています。


get_value needs to be a public method

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

QueryMethods#get_valueメソッドの可視性をprotectedからpublicに変更しています。

QueryMethods#get_valueメソッドは、Relation::Merger should not fill values with empty valuesで可視性をprotectedに変更したのですが、protectedに変えた事によりvaluesが正しく取得できなくなり、Relation::Mergerの動作に影響が出てしまい、 結果、同じ条件のassociationに対するorメソッドが動作しない、というバグが出てしまっていました。

で、その対応として、可視性をpublicに戻しています。


Unminify activestorage.js

Active StorageのJSの修正です。

activestorage.jsをminifyしていたのを、minifyしないよう修正しています。gitのlogで変更内容を把握しやすいようにする為。

合わせて、モジュールのバンドルにWebpackを使用していたのを、rollupを使用するよう修正しています。こちらはrollupの方が高速かつ生成されるファイルが小さい為。

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

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

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

activestorage/CHANGELOG.md


Merge pull request #31881 from yewton/rails-ujs-with-yarn-autoclean

actionview/app/assets/javascripts/README.mdの修正です。

yarn autocleanコマンドを実行した後に、.yarncleanassetsディレクトリを含まないよう注記を追加しています。


Remove key from session by using session.delete (#31685)

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

Accessing the Sessionの項にある、ログアウト処理のexampleコードで、sessionからuser idを削除してなかった(nilを入れいただけ)のを、明示的にuser idを削除するようコードを修正しています。


Merge pull request #32703 from janko-m/halve-memory-allocation-in-s3-download

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

S3Service#downloadメソッドでbodyを取得するのにreadメソッドを使用していたのを、stringメソッド使用するよう修正しています。

-          object_for(key).get.body.read.force_encoding(Encoding::BINARY)
+          object_for(key).get.body.string.force_encoding(Encoding::BINARY)

Aws::S3::Object#getStringIOオブジェクトを返す、かつ、StringIO#readは値をコピーした新しいオブジェクトを返します。そのため、不要なオブジェクトの生成を避けるよう、値をそのまま取得出来るstringメソッドを使用するようにしています。


Save a hash allocation in MySQL statement pool

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

statement poolを保持する際に、明示的にHashを生成していたのを、生成しないよう修正しています。古いMySQL adapterの為のコードだったとのことです。


Merge pull request #32471 from janko-m/use-image_processing-gem

Active Storageの修正です。

ファイルの変換処理にImageMagick(mini_magick gem)を直接使用していたのを、image_processing gemを使用するよ修正しています。

image_processingはGraphicsMagickもサポートしているので、ファイルの変換処理にlibvips(ruby-vips gem)も使用出来るようになります。vipsを使用したい場合は、config.active_storage.variant_processorvipsを指定すればOKです。

この対応により、mini_magick gemを直接使用するのはdepecateになりました。合わせて、変換処理でImageMagickのオペレーションを直接指定していたのを、image_processingが提供するメソッド(resize_to_fitresize_to_fill等々)を使用する必要があります。

ちなみにimage_processing gemの作者はshrine: File Attachment toolkit for Ruby applicationsの作者のjanko-m氏。


Flush tempfile after populating it

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

Downloading#download_blob_toメソッドでblobデータをファイルに書き込んだ後、バッファを出力する為にflushメソッドを呼び出すよう修正しています。


Use strict_encode64 instead of gsub newline for ScreenshotHelper

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

ScreenshotHelper#inline_base64メソッドでpathをencode64メソッドでBase64エンコードした後に改行コードを削除してたのを、strict_encode64メソッドを使ってそもそも改行コードが含まれないようにしています。


columns is cached in the statement

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

columnsをクラス内でHashにキャッシュしていたのですが、そもそもStatement classでcolumnsをキャッシュしていたので、そちらを使用するよう修正しています。