なるようになるブログ

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

rails commit log流し読み(2016/08/28)

2016/08/28分のコミットです。

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


Missing key should throw KeyError

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

ActionDispatch::Http::Headers#fetchに指定したkeyが存在しなかった場合に、KeyErrorをraiseするよう修正しています。

Rails 4.2系まではKeyErrorがraiseするようになっていたのですが、5.0.0でNameErrorをraiseするよう誤って変更してしまっていた為、修正しています。


Move custom assertion to its proper place

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

ActiveSupport::TestCaseクラスで定義されていたassert_nothing_raisedメソッドを、ActiveSupport::Testing::Assertions moduleに移動しています。他のRails独自のassertionメソッドはActiveSupport::Testing::Assertionsに定義されており、他と合わせる為assert_nothing_raisedも移動したとの事です。


Fix typo in deprecation message

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

ActiveModel::Errors#add_on_blankメソッドを使用した場合に出力されるdeprecationメッセージで、代わりに使用すべきメソッド内にタイポがあったのを修正しています。

-          errors.add(attribute, :empty, options) if value.blank?
+          errors.add(attribute, :blank, options) if value.blank?

Fix typo in Delegation#delegate_missing_to doc [skip ci]

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

delegate_missing_toメソッドのdoc内にタイポがあったのを修正しています。


Switch back to Hash.dup

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

ActiveRecord::Relation#initialize_copy#valuesメソッドでHashの複製を作成するのに、Hash[]を使用していたのを、dupメソッドを使用するよう修正しています。

    def initialize_copy(other)
-      # This method is a hot spot, so for now, use Hash[] to dup the hash.
-      #   https://bugs.ruby-lang.org/issues/7166
-      @values        = Hash[@values]
+      @values = @values.dup
       reset
     end

元々はHash.dupを使用していたのですが、Hash.dupが遅いため新規にHashのインスタンスを作成するようになっていました。が、Ruby 2.0.0でHash#initialize_copyの高速化処理が入り、Has.dupHash[]の速度差が縮まった為、再度dupを使用するよう修正したとの事です。

参考:Bug #7166: Speed up Hash#dup by patching Hash#initialize_copy - Ruby trunk - Ruby Issue Tracking System* hash.c (initialize_copy): copy the underlying st_table on dup, · ruby/ruby@b3803cc


Add test for allow_blank in numericality validation

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

validates_numericality_ofallow_blankオプションを指定した場合のテストを追加しています。


validate_each in NumericalityValidator is never called in this case.

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

ActiveModel::Validations::NumericalityValidator#validate_eachメソッドからallow_nilが設定されている、かつ、valueがnilの場合の処理を削除しています。該当の場合のチェック処理はEachValidator#validateですでに行われており、NumericalityValidator#validate_eachでその場合の処理が行われる事は無い為、との事です。


Switch back to Hash.dup

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

ActiveRecord::TableMetadata#resolve_column_aliasesメソッドでHashの複製を作成するのに、Hash[]を使用していたのを、dupメソッドを使用するよう修正しています。理由は先程のコミットと同様。


Remove "Under Ruby 1.9" [ci skip]

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

ActiveRecord::Core#to_aryメソッドのdocにあるなぜto_aryを追加しているのかについて説明している箇所から、"Under Ruby 1.9"という部分を削除しています。

不要なmethod_missingが呼ばれるのを防ぐ為にto_aryを追加しているのですが、この対応自体は現状も必要な為、コメントはそのまま不要な部分(Ruby 1.9以下だけではないので)を削除しています。