なるようになるブログ

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

rails commit log流し読み(2019/01/06)

2019/01/06分のコミットです。

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


Merge pull request #34865 from cbandy/node_rails_env

railties/lib/rails/tasks/yarn.rakeの修正です。

yarn:install実行時にRails envを取得するのにENV["RAILS_ENV"]を使用していたのを、Rails.envメソッドを使用するよう修正しています。環境変数が指定されていない場合(e.g. development)でもenvが取得出来るようにする為。


Reset ActionText::Content.renderer before and after each request

actiontext/lib/action_text/engine.rbの修正です。

ActionText::Content.rendererをrequestの前後でresetするよう修正しています。


Revert "Remove node_modules path from assets load paths since we use webpack by default"

node_modulesassets.pathsに追加しないよう対応した、Remove --skip-yarn in favor of --skip-javascriptをRevertしています。

JSはwebpackerを使う前提なので不要なのですが、cssはまだsprocketsを使う前提で、cssをロードする為にnode_modulesを追加しておく必要がある為。

rails commit log流し読み(2019/01/05)

2019/01/05分のコミットです。

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

railties/CHANGELOG.md

activemodel/CHANGELOG.md

actiontext/CHANGELOG.md


Clarify benefit of delegate_missing_to

activesupport/lib/active_support/core_ext/module/delegation.rbのdocの修正です。

delegate_missing_toメソッドのdoc内にあるexampleコードから、メソッド呼び出し時の明示的なreceiverの指定を削除しています。元のコードだとdelegate_missing_toのexampleコードだと不適切(method_missingが起きない)な為。


Send Active Storage jobs to dedicated queues by default

railties/lib/rails/application/configuration.rbrailties/lib/rails/generators/rails/app/templates/config/initializers/new_framework_defaults_6_0.rb.ttの修正です。

Active Storageで使用するActive Jobのqueueをjob毎に指定出来るよう対応した、Permit sending Active Storage purge and analysis jobs to separate queuesの続きとして、load_defaults内でjob毎のqueue名を指定する(analysis jobはactive_storage_analysis、purge jobはactive_storage_purge)よう修正しています。


Add ActiveModel::Errors#of_kind?

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

特定のattributeに関するエラーがあるかどうかをチェックする為のActiveModel::Errors#of_kind?メソッドを追加しています。

ActiveModel::Errors#added?メソッドとの違いはoptionsについてチェックするかどうかで、of_kind?optionsについてはチェックしないようになっています。


Test Action Mailbox configurations

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

Action Mailboxのconfigについてのテストを追加しています。


Fix new_framework_defaults_6_0.rb file

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

一項目だけconfigの値がコメントアウトされていなかったのを、他の値と合わせてデフォルトではコメントアウトするよう修正しています。


Clarify delegate_missing_to [ci skip]

activesupport/lib/active_support/core_ext/module/delegation.rbのdocの修正です。

delegate_missing_toメソッドのdoc内にあるexampleコード、メソッド呼び出し時の明示的なreceiverの指定が残っていた箇所があったのを削除しています。


Support in-flight jobs stored before individual execution counters for retry_on (#34731)

activejob/lib/active_job/exceptions.rbの修正です。

retry_onメソッドでexception_executions(exception毎のretry回数を保持する変数)が定義されていない場合に、Hash.new(0)で初期化するよう修正しています。

exception毎のretry回数を保持する対応は、Keep executions for each specific exceptionで導入されたのですが、この対応を入れる前にenqueueされたjobはexception_executionsを保持しておらず、値を追加しようとするとエラーになってしまう為。


Import Action Text

リッチテキストの編集・表示を行う為のAction TextコンポーネントRails本体にインポートしています。

現状、リッチテキストライブラリはhttps://trix-editor.org/のみサポートしています。ファイルのアップロードもサポートしており、アップロードされたファイルはActive Storageを使用して管理されるようになっています。

rails action_text:installでAction Textで使用するテーブル、css、添付ファイルを表示するようのviewファイル等が生成されます。Action Textで生成するデータは専用のテーブル(action_text_rich_texts)で保持されるようになっており、リッチテキストを保持する為のカラムを別途追加する必要がありません。

後は、リッチテキストを使用したいmodel及びviewでリッチテキストテキスト用のメソッドを定義すれば使用出来るようなります。

class Message < ApplicationRecord
  has_rich_text :content
end
<%= form_with(model: message) do |form| %>
  …
  <div class="field">
    <%= form.label :content %>
    <%= form.rich_text_area :content %>
  </div>
  …
<% end %>

Label Action Text PRs [ci skip]

.github/autolabeler.ymlの修正です。

autolabelerにAction Text用の設定を追加しています。


Generate Action Text's API docs

actiontext/app/models/action_text/rich_text.rbrailties/lib/rails/api/task.rbの修正です。

Action TextのdocがAPI docに表示されるよう対応しています。


Fix API docs of ActionText::RichText [ci skip]

actiontext/app/models/action_text/rich_text.rbのdocの修正です。

ActionText::RichText classのdocがAPI docに表示されていなかったのを、表示されるよう修正しています。


Remove comment from actiontext/actiontext.gemspec

actiontext/actiontext.gemspecの修正です。

デフォルトで生成されるコメント(Describe your gem and declare its dependencies)を削除しています。


Add action_text_content hook to the guide [ci skip]

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

Available Hooksの項にあるhookの一覧を記載している箇所に、Action Textのhookを追加しています。


Add Action Text to guides [ci skip]

Action Textについて説明したAction Text Overview guideを追加しています。中身はREADME.mdから移動しています。


Add --skip-action-text option to rails new

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

rails newにAction Textのrequireをskipする為の--skip-action-textオプションを追加しています。


Test actiontext on Rails 6.0

Action Textのテストの修正です。

テストで使用するアプリケーションをRails 6.0に更新しています。


Merge pull request #34709 from gmcgibbon/action_cable_guides_es6

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

Action Cableのexampleコードがcoffee scriptで記載されいたのを、ES6で記載するよう修正しています。

rails commit log流し読み(2019/01/04)

2019/01/04分のコミットです。

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

actionview/CHANGELOG.md


Merge pull request #34706 from ChrisBr/instrumentation-guide

rails guideのActive Support Instrumentationの修正です。

sql.active_record hookに含まれているデータの一覧にconnectiontype_casted_bindsstatement_nameが不足していたのを追加しています。


Merge pull request #34816 from bogdanvlviv/add-skip-action-mailbox-option-to-rails-new-cmd

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

rails newにAction Mailboxのrequireをskipする為の--skip-action-mailboxオプションを追加しています。


2x faster connection.type_cast

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

type castが不要なtypeの一覧をメソッド(types_which_need_no_typecasting)で管理していたのを、メソッドで管理せず直接分岐にtypeを指定するよう修正しています。

元々は各adapterで定義を変えれるようにするためにメソッドにしていたのですが、3rd partyを含む全てのadapterで同じtypeを使用している(メソッドを再定義していない)、かつ、メソッドにする事で不要なobjectの生成が必要になってしまっている、という理由により修正されています。


Merge the redundant when Symbol case to the when String, ...

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

Quoting#_quoteの分岐処理で、Symbolの場合の処理をStringActiveSupport::Multibyte::Charsの分岐にマージしています。行っている処理が同じ為。


Update the "Configuring Rails Applications" guide [ci skip]

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

"Results of load_defaults"の項を追加し、各Railsバージョンでload_defaultsにより設定されるconfigの値について記載するよう修正しています。


Merge pull request #34858 from albertoalmagro/make-rails-compatible-accross-ruby-versions

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

Ruby 2.6でaverageメソッドに存在しないカラムを指定した場合の戻り値が0.0になっていたのを、Ruby 2.5まで同様にnilになるよう修正しています。

BigDecimalが1.4からNilClassにto_dメソッドを追加するようになり、その影響で結果が変わるようになっていました。色々議論はあったのですが、存在しないカラムが指定された場合についてはnil`になるのが望ましいだろう、という結論になり、元の挙動が維持されるようになっています。


Merge pull request #34773 from eileencodes/share-fixture-connections-with-multiple-handlers

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

複数のハンドラがある場合に、fixtureで使用したconnection poolを他のハンドラに共有するよう修正しています。

複数DBを使用している場合に、primary DBで作成したfixtureをreplica DBで参照できようにする為。


Fix example of I18n setting in the guide [ci skip]

rails guideのRails Internationalization (I18n) APIの修正です。

Inferring Locale from the Language Headerの項にあるexampleコードで、debug用のログで使用する値に誤りがあったのを修正しています。


Merge pull request #34797 from gsamokovarov/views-without-defined-protect-against-forgery

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

csrf_meta_tagsメソッド及びtoken_tagメソッドで、protect_against_forgery?メソッドを使用する前に、メソッドが定義されているかチェックするよう修正しています。

Railsアプリケーションで上記メソッドを使用する場合、protect_against_forgery?は必ず定義されているのですが、Railsアプリケーション外で上記メソッドを使用したい場合にprotect_against_forgery?は定義されていないケースはある為、NoMethodErrorになるのを防ぐためにメソッドの定義チェックを行うようにしています。

rails commit log流し読み(2019/01/03)

2019/01/03分のコミットです。

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


Merge pull request #34841 from bogdanvlviv/remove-mention-about-test-unit-test_case

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

ActionController::TestCaseクラスのdocに古い実装(Test::Unit::TestCaseを使っていた頃の実装)についての説明があったのを削除しています。


fix activerecord reaper_test

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

ConnectionPool::Reaperのテストで、スレッドの処理待ちでチェックする値が誤っていたのを修正しています。


Use latest Bundler

.travis.ymlの修正です。

CIで最新のbundlerが使用されるよう、バージョン指定を削除しています。


Capistrano is no longer a dominant force in the deployment strategy for new apps

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

rails newで生成するGemfileからcapistrano-railsを削除しています。

今はRailsアプリケーションのdeployにcapistranoを使わないケースが多々あり(e.g. Heroku)、デフォルトで含む必要は無いだろう、という事で削除されています。


Merge pull request #33985 from eugeneius/attribute_methods_schema_cache

Active Record、railtiesの修正です。

config.eager_loadがtrueの場合にアプリケーション初期化処理時にActive Recordのattribute methodsを定義するよう、Eagerly define attribute methods in productionで対応されたのですが、これをschema cacheがある場合のみ行うよう修正しています。

schema cacheが無い場合、schemaを知る為にDBへのアクセスが必要になるのですが、これがテーブル毎にqueryが実行されてしまう、かつ、boot処理がDBに可用性に依存する事になり、良くないのでは、という事になり、schema cacheがある場合(schema cacheがあればDBへのアクセス無しでmethodの定義が出来るので)のみ行うよう修正されています。

rails commit log流し読み(2019/01/02)

2019/01/02分のコミットです。

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

activestorage/CHANGELOG.md


:scissors:

rails guideのAction Mailbox Basicsの修正です。

Configurationの項にあるexampleコードから不要なスペースを削除しています。


Fix TypeError: no implicit conversion of Arel::Attributes::Attribute into String properly

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

Calculations#perform_calculationメソッドでcolumn nameがDISTINCTかどうかのチェック処理で、column_nameto_sで変換してからチェックしていたのを変換しないよう修正しています。

元々は、Fix TypeError: no implicit conversion of Arel::Attributes::Attribute …TypeErrorが出るのを抑止する為にto_sを呼び出していたのですが、to_sした場合の結果はinspectした値(e.g. "#<struct Arel::Attributes::Attribute ...>")であり、それだと正しくチェック処理が行われない為。


s/Active Mailbox/Action Mailbox/ [ci skip]

actionmailbox/app/controllers/action_mailbox/base_controller.rbのdocの修正です。

Active Mailboxという古い名称が使われている箇所があったのを、Action Mailboxに修正しています。


Document Action Mailbox configuration options [ci skip]

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

Action Mailboxのconfigについて説明したConfiguring Action Mailboxの項を追加しています。


Bring ActiveRecord::Core's API document back [ci skip]

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

元々API docに表示されていたActiveRecord::Core moduleのメソッドがAPI docに表示されなくなってしまっていたのを、再度表示されるよう修正しています。


Add test case for preventing_writes?

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

preventing_writes?メソッドのテストを追加しています。


Add assertions for ActiveRecord::Base.current_role

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

connections切り替えに関するテストで、ActiveRecord::Base.current_roleメソッドの結果についてもテストするよう修正しています。


Permit sending Active Storage purge and analysis jobs to separate queues

Active Storageの修正です。

Active Storageで使用するActive Jobのqueueが全てのjobで同じqueueしか指定出来なかったのを、job毎(config.active_storage.queues.analysisconfig.active_storage.queues.purge)に指定出来るよう修正しています。

これにより、元のconfig(config.active_storage.queue)はdeprecateになりました。


MariaDB: Remove version checking lower the 5.5.8

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

不要なMariaDBのバージョンチェックを削除しています。Validate if utf8mb4 character set and longer index key prefix is supportedMySQL 5.5.8 以上のみをサポートするようになり、それ以下についてはチェックが不要な為。


Merge pull request #34835 from gmcgibbon/fix_examples_in_log_subscriber

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

ActiveSupport::LogSubscriberのdoc内にあるexampleで実際のログ出力処理用のメソッド呼び出しが不足していたのを追加しています。


Merge pull request #34836 from kamipo/class_level_update_without_ids

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

class levelのupdateをid引数の指定無しで動作するよう修正しています。

これは、元々ドキュメントにない挙動で、Avoid extra scoping when using Relation#updateで削除された挙動でした。

ただ、この挙動が動作しなくなったというissueが来た、かつ、stableバージョンではドキュメントにない挙動でも極力挙動を維持すべき(5.2.2から動作しなくなった)という方針により、再度動作するよう修正しています。

rails commit log流し読み(2019/01/01)

2019/01/01分のコミットです。

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


Add load hook for ActionMailbox::InboundEmail

actionmailbox/app/models/action_mailbox/inbound_email.rbの修正です。

ActionMailbox::InboundEmail load時に使用する為のaction_mailbox_inbound_email hookを追加しています。


Merge pull request #34740 from sponomarev/feature/assert_has_stream

actioncable/lib/action_cable/channel/test_case.rbの修正です。

ActionCable::Channel::TestCaseクラスにstreamのチェックをするためのassrtionとして、assert_no_streamsassert_has_streamassert_has_stream_forメソッドを追加しています。


Add CHANGELOG.md to actionmailbox gem specification

actionmailbox/actionmailbox.gemspecの修正です。

gemファイルにCHANGELOGを含むよう修正しています。


Mention tiff support in ActiveStorage guides

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

config.active_storage.variable_content_typesのデフォルトについて説明している箇所にPermit generating variants of TIFF imagesで追加されたimage/tiffを追加しています。


Merge pull request #34624 from blaszczakphoto/update-docs-regarding-gzipping-assets

rails guideのThe Asset Pipelineの修正です。

gzipしたassetsの配信について説明している箇所のタイトルの修正、及び、gzipしたassetsの配信方法については、使用しているwebサーバのドキュメントを参照する旨説明を追加しています。


Merge pull request #34707 from xlts/update-notifications-docs

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

ActiveSupport::Notification、及び、ActiveSupport::LogSubscriberのdocに、それぞれクラスを使用している場合のエラーハンドリングの方法についての説明、及び、exampleコードを追加しています。


Add load hook for ActionMailbox::Base

actionmailbox/lib/action_mailbox/base.rbの修正です。

ActionMailbox::Base load時使用する為のaction_mailbox hookを追加しています。


Bump Nokogiri for sparklemotion/nokogiri@bf41ba0

Gemfile.lockの修正です。

nokogiri gemを1.9.1に更新しています。


Update the load hooks reference table [ci skip]

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

Available Hooksの項にあるhookの一覧のテーブルに、action_mailboxaction_mailbox_inbound_emailactive_storage_blob hookを追加しています。


Add load hook for ActionMailbox::TestCase

actionmailbox/lib/action_mailbox/test_case.rbの修正です。

ActionMailbox::TestCase load時使用する為のaction_mailbox_test_case hookを追加しています。


Document ActionMailbox::Base#bounce_with [ci skip]

actionmailbox/lib/action_mailbox/base.rbのdocに修正です。

ActionMailbox::Base#bounce_withメソッドにドキュメントを追加しています。


Exclude ActionMailbox::Base#perform_processing and #finished_processing? from API docs

actionmailbox/lib/action_mailbox/base.rbのdocの修正です。

private APIであるActionMai::Base#perform_processing#finished_processing?メソッドがAPI docに表示されないよう修正しています。


Fix links in ingress docs [ci skip]

actionmailbox/app/controllers/action_mailbox/ingresses/postfix/inbound_emails_controller.rbactionmailbox/app/controllers/action_mailbox/ingresses/sendgrid/inbound_emails_controller.rbのdocの修正です。

doc内の外部リンクを指定している箇所で、リンクのフォーマットに誤りがあったのを修正しています。

rails commit log流し読み(2018/12/31)

2018/12/31分のコミットです。

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

railties/CHANGELOG.md

activestorage/CHANGELOG.md


Make Active Storage blob keys lowercase

activestorage/app/models/active_storage/blob.rbの修正です。

Active StorageのBlobに使用するkeyの生成にbase36を使用するよう修正しています。

ファイルのアップロード先にDisk Serviceを使用している場合、Blobのkeyはそのままファイルのパスに使用されるのですが、case-insensitiveファイルシステムの場合に問題が起きる(DBに格納されるkeyがcase-sensitiveな場合に、大文字小文字だけが異なるkeyが生成された場合ファイルを正しく取得出来なくなってしまう等)為、大文字小文字が混在しないようbase36を使用するようにしています。既に作成されているkeyはそのままです。


Tweak test name

activesupport/test/core_ext/secure_random_test.rbの修正です。

SecureRandom.base36メソッドのテスト名から不要な部分を削除しています。


Add Rake task for testing mailboxes

railties/lib/rails/test_unit/testing.rakeの修正です。

Action Mailboxのunit testを実行する為のrails test:mailboxes taskを追加しています。


Permit generating variants of TIFF images

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

variant可能なcontentのデフォルトにTIFF(image/tiff)を追加しています。


Bump license years for 2019

各ファイルのlicense yearを2019に更新しています。