なるようになるブログ

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

rails commit log流し読み(2016/09/01)

2016/09/01分のコミットです。

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

activerecord/CHANGELOG.md

actionpack/CHANGELOG.md


Merge pull request #26226 from schneems/schneems/explicit-public-urls

Action View、raitiesの修正です。

各view用のhelper method(image_tagjavascript_include_tag等)に、asset pipelineを使用しているかどうかを明示的に指定するためのオプション(skip_pipeline)を追加しています。

skip_pipelineにtrueを指定した場合、digestやassets pathがつかないpathが生成されます。

asset_path("application.js")
# => "/assets/application-85e543ffb6766161629d4b7a5dd540252230a0f0e5287de6701be45c52d107de.js"

asset_path("application.js", skip_pipeline: true)
# => "/application.js"

また、合わせて、helper methodに存在しないファイルを指定した場合にexceptionをraiseするかどうかの設定(config.assets.unknown_asset_fallback)を追加しています。新規に作成するrailsアプリではfalse(exceptionをraiseする)になっています。既存の挙動(exceptionをraiseしない)にしたい場合は、trueを指定すればOKです。

sprockets-rails側の対応はこちら。Deprecate asset fallback by schneems · Pull Request #375 · rails/sprockets-rails


Override respond_to_missing? instead of respond_to? when possible

Action Pack、Active Recordの修正です。

各classやmoduleでrespond_to?をoverrideしていたのを、respond_to_missing?をoverrideするよう修正しています。該当の処理ではmethod_missingに反応させたいだけであり、respond_to_missing?の方が意図として適切だから、という理由のようです。


Attempt to maintain encoding for arrays of strings with PG

activerecord/lib/active_record/connection_adapters/postgresql/oid/array.rbの修正です。

PostgreSQLでStringのarrayを使用しているかつ、non asciiの値がStringに含まれていた場合に、serialize / deserialize処理で文字化け(encodingがおかしくなってしまう)てしまうバグがあったのを修正しています。

Rails 5.0.0からarrayに関する処理はpg gemで行うようになったのですが、pg gemのarrayの処理ではencodingに関する処理は行わないようになっている為問題が発生してしまっていました。Active Record側でencodingの設定処理を行うように対応しています。


Revert "Extract PredicateBuilder::CaseSensitiveHandler"

ActiveRecord::Validations::UniquenessValidator#build_relationメソッド内でやっていたArel ASTの生成処理を別クラス(ActiveRecord::PredicateBuilder::CaseSensitiveHandler)に切り出した、Extract `PredicateBuilder::CaseSensitiveHandler`をrevertしています。

predicate builderでArel ASTの生成をやる方向は良くないのでは、という事でrevertされたようです。ムズい。


Remove deprecated handling of PG Points

Active Recordの修正です。

Rails 5.0.0でdepcateになっていた、PostgreSQLpoint型を使用した場合にattributeがArray objectになる挙動を削除しています。今後はPoint objectになります。


Include user defined attributes in inspect

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

ActiveRecord::Core#inspectで表示対象のattributeを取得するのにcolumn_namesを使用していたのを、attribute_namesを使用するよう修正しています。ユーザが独自に定義したattributeも表示されるようにするため。


Update Jason Zimdars twitter

guides/source/credits.html.erbの修正です。

Jason Zimdars氏のtwitterアカウントへのリンクを修正しています。


Merge pull request #26328 from kirs/strong-params-to-param

actionpack/lib/action_controller/metal/strong_parameters.rbの修正です。

ActionController::Parameters#to_paramメソッドをActionController::Parametersのdeprecatedメソッドの一覧に追加しています。

Rail 4系まではActionController::Parameters#to_paramメソッドはそのままURIに使える値(ex: return_url=foo&result_id=bar)を返していたのですが、Rails 5ではそれが出来ないようになっており、かつ今後もサポートはしな予定なので、deprecated対象に追加したとの事です。


Move to_param undef closer to the deprecations.

actionpack/lib/action_controller/metal/strong_parameters.rbの修正です。

先のActionController::Parametersで行ったto_paramをundefにする対応を、他のdeprecationsに関する対応の近くで行うよう処理の位置を修正しています。


Add changelog entry for #26328.

actionpack/CHANGELOG.mdの修正です。

先のActionController::Parameters#to_paramの対応について、CHANGELOGにエントリーを追記しています。


Merge pull request #25758 from vipulnsward/fix-key-len-issue

actionpack/lib/action_dispatch/middleware/cookies.rbactivesupport/lib/active_support/message_encryptor.rbの修正です。

ActionDispatch::Cookies::EncryptedCookieJar#initializeでkeyを生成する際に、適切なkeyの長さに合わせて値を調整するよう修正しています。

-        secret = key_generator.generate_key(request.encrypted_cookie_salt || "")
+        secret = key_generator.generate_key(request.encrypted_cookie_salt || "")[0, ActiveSupport::MessageEncryptor.key_len]

Ruby 2.4ではkey sizeを厳密に見るようになり、必要なkey sizeより大きい値を指定するとエラーになるようになった為、適切なsizeになるよう対応しています。

参考:openssl: make Cipher#key= and #iv= reject too long values · ruby/ruby@ce63526


remove warning from video_tag

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

video_tagメソッドでRubyのwarning(warning: shadowing outer local variable - options)が出るようになってしまっていたので、重複していた変数名を修正し対応しています。


fix document for radio_button

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

radio_buttonメソッドのdoc内のexampleに説明を追加しています。


Cache to_datetime for performance

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

ActiveSupport::TimeWithZone#to_datetimeメソッドで値をキャッシュするよう修正しています。

    def to_datetime
-      utc.to_datetime.new_offset(Rational(utc_offset, 86_400))
+      @to_datetime ||= utc.to_datetime.new_offset(Rational(utc_offset, 86_400))
     end

性能改善の為。