なるようになるブログ

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

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

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

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

actionpack/CHANGELOG.md

activesupport/CHANGELOG.md


Merge pull request #35556 from bdewater/fast-secure-compare

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

ActiveSupport::SecurityUtils.secure_compareメソッドで引数を変換するのにDigest::SHA256.hexdigestを使用していたのを、Digest::SHA256.digestを使用するよう修正しています。

16進文字列に変換する必要が無い、かつ、Digest::SHA256.digestの方が高速な為。


Merge pull request #35496 from bogdan/right-preloading

Active Recordの修正です。

既にロード済みのassociationが、associationのpreloadでリセットされてしまうケースがあったのを、利用可能なassociationについてはリセットせず使い回すよう修正しています。


Merge pull request #35236 from renuo/fix-30467

actionpack/lib/action_dispatch/routing/mapper.rbの修正です。

resourceのparamオプションに不正なコロン(:)が含まれている場合、ArgumentErrorをraiseするよう修正しています。


Remove :all symbol from Mime::ALL

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

Mime::ALLから:allというsymbolを削除しています。

.allという拡張子を使用する事もないし、Mime[:all]も動作しなく、含んでおく必要が無いため削除したとの事です。


Fix bug in Range comparisons when comparing to excluded-end Range

activesupport/lib/active_support/core_ext/range/compare_range.rbの修正です。

Rangeの比較処理で、終端を除外したRange(e.g. 1...10)に対するチェック処理が正しく動作しないバグがあったのを修正しています。

# Before
(1..10).cover?(1...11) # => false

# After
(1..10).cover?(1...11) # => true

[ci skip] Fixed testing guides typo fourty -> forty

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

fourtyfortyに修正しています。


Merge pull request #34405 from shugo/safe_buffer_backref_fix

activesupport/lib/active_support/core_ext/string/output_safety.rbの修正です。

ActiveSupport::SafeBuffersub, sub!, gsub, gsub!を使用した場合にback referencesを設定するようにしています。ActiveSupport::SafeBuffergsub等のメソッドをブロックでを指定して使用した場合に、ブロック内で$1が参照出来ない、という問題があったのがこの対応により解決されています。

# Before
"foo123".html_safe.sub(/([a-z]+)([0-9]+)/) { p $1 } #=> nil

# After
"foo123".html_safe.sub(/([a-z]+)([0-9]+)/) { p $1 } #=> "foo"

$1はコンテキストが変わってしまうと参照出来なくなる、かつActiveSupport::SafeBufferStringクラスのメソッドのラッパーをしている為この問題が発生していたのですが、Proc#bindingで呼び出し元のコンテキストを得てback referencesを設定(block.binding.eval("proc { |m| $~ = m }").call(match_data))するようにして対応しています。