なるようになるブログ

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

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

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

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

actionpack/CHANGELOG.md

activesupport/CHANGELOG.md


Improve CHANGELOG for fix for respecting pluralize_table_names [ci skip]

railties/CHANGELOG.mdの修正です。

先日コミットされたpluralize_table_namesの修正に関するエントリーについて、グラマーの修正を行っています。


Merge pull request #18939 from georgeclaghorn/variant-inquiry

ActionPackActiveSupportの修正です。

request variantsを使用している際、variantsに設定された値を簡単に確認出来るようにする為のメソッドを追加しています。

request.variant = :phone

request.variant.phone?  # true
request.variant.tablet? # false

request.variant = [:phone, :tablet]
request.variant.phone?                  # true
request.variant.desktop?                # false
request.variant.any?(:phone, :desktop)  # true
request.variant.any?(:desktop, :watch)  # false

元々はrequest.variant変数を直接参照するしか無かったので、大分便利になりました。

また、上記を実現する為に、新たにActiveSupportArrayInquirerクラスを追加しています。

variants = ActiveSupport::ArrayInquirer.new([:phone, :tablet])

variants.phone?    # => true
variants.tablet?   # => true
variants.desktop?  # => false

variants.any?(:phone, :tablet)   # => true
variants.any?(:phone, :desktop)  # => true
variants.any?(:desktop, :watch)  # => false

元々ActiveSupport::StringInquirerクラスがあり、それのArray版になります。 (StringInquirerはRails.envに使用されていて、Rails.env.development?メソッドは上記クラスの仕組みで実装されている)

Arrayに設定されている値の確認に便利そうですねえ。

なお、ArrayInquirerインスタンスを生成する為のArray#inquiryメソッドも追加されたのですが、こちらは次のコミットで削除されています。


Remove Array#inquiry

先のコミットで追加されたArray#inquiryメソッドを削除しています。

ArrayInquirerインスタンスを生成するには、ArrayInquirerクラスのコンストラクタを使用すれば良く、Array#inquiryメソッドをわざわざ別に用意する必要は無い、との理由により削除されてたようです。


Define a setup method instead of using setup as block

actionpack/test/dispatch/request_test.rbの修正です。

setup blockの代わりに、setupメソッドを使用するよう修正しています。

-  setup do
+  def setup
+    super

Remove old and not working link. [ci skip]

rails guideのRuby on Rails Security Guideの修正です。

既に存在しないdev.rubyonrails.orgへのリンクが残っていたのを削除しています。


Remove circular require

activesupport/lib/active_support/core_ext/module/aliasing.rbactivesupport/lib/active_support/core_ext/module/deprecation.rbの修正です。

'active_support/deprecation'のrequireを削除しています。読み込みが循環してしまっていた為のようです。


Return super in ActionController::Parameters.const_missing

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

ActionController::Parameters.const_missingメソッドで引数の定数名がNEVER_UNPERMITTED_PARAMSで無かった場合にreturnするよう修正しています。

-      super unless const_name == :NEVER_UNPERMITTED_PARAMS
+      return super unless const_name == :NEVER_UNPERMITTED_PARAMS

returnが無いと、以降の処理の都合上必ずalways_permitted_parametersreturnされてしまう為、 ActionController::Parametersを継承したサブクラスを使用し、そこでconst_missingが発生した場合に予想外のalways_permitted_parametersが値が返されてしまい、問題になる為修正したようです。

コード見る限り、単純にタイポしてreturnが漏れてしまったのかなーという気が。