なるようになるブログ

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

rails commit log流し読み(2014/05/05)

2014/05/05分のコミットです。

rails 4.1で挙動が変わってしまったActiveRecord::Relation#joinHash#to_paramrails 4.0.xと同じ挙動にする修正が行われています。


Convert column name to string only once

ActiveRecord::ConnectionAdapters::SchemaStatements#column_exists?メソッドの修正です。

ブロックの中で複数回行われてしまっていたto_sメソッドを、外だしして一度だけ処理するよう修正しています。


Remove deprecated file(active_support/core_ext/object/to_json.rb) and its test case.

deprecateになっていたactive_support/core_ext/object/to_json.rbを削除しています。

今後は、代わりにactive_support/core_ext/object/jsonをrequireする必要があります。


Follow-up to #14905 and formatting pass

rails guideのGetting Startedの修正です。

改行やらインデントやらのフォーマットの修正です。


Merge pull request #14946 from jcoleman/fix-null-binary-column-logging-exception

ActiveRecord::ActiveSupport::LogSubscriber::LogSubscriber#render_bindメソッドの修正です。

binary型のカラムをnilで更新したときに、ロギング処理でexceptionが発生していたのを修正しています。

nilで更新された際は、""とログに出力されるようになります。


Invert the if/else clause

上のロギング処理の修正です。判定処理を逆にしています。

-          value = value.nil? ? "<NULL binary data>" : "<#{value.bytesize} bytes of binary data>"
+          value = value ? "<#{value.bytesize} bytes of binary data>" : "<NULL binary data>"

valueがnilでないケースの方が多いから、という理由だそうです。なるほど。


Merge pull request #14949 from bogdan/empty-hash-array-parameterization

Hash#to_paramメソッドの修正です。空のHash/Arrayがあった場合のserializationの結果を修正しています。

# before
{a: []}.to_query # => "a%5B%5D="

# after
{a: []}.to_query # => ""

rails 4.1で動作が変わってしまったのを、また戻した形です。


No need the else clause

同じくHash#to_paramメソッドの修正です。不要なelseを削除しています。


Improve CHANGELOG [ci skip]

CHANGELOGの修正です。上記to_paramの更新についての記載箇所について、ピリオドを追加しています。


Merge pull request #11166 from xavier/callable_constraint_verification

ActionDispatch::Routing::Constraintsの修正です。

ルーティングの:constraintsオプションには、成約を定義したオブジェクトを渡せるのですが、渡すオブジェクトは:callまたは:matches?メソッドが定義されている必要がありますが。

が、現状どちらのメソッドが定義されていなくても、エラーが起きず握りつぶしてしまっていたのですが、メソッドが定義されていない場合にArgumentErrorが起こすように修正しています。

:constraintsにオブジェクトを渡せるの知りませんでした。以下使い方についてのメモ(rails guideからの抜粋)。

class BlacklistConstraint
  def initialize
    @ips = Blacklist.retrieve_ips
  end

  def matches?(request)
    @ips.include?(request.remote_ip)
  end
end

Rails.application.routes.draw do
  get '*path', to: 'blacklist#index',
    constraints: BlacklistConstraint.new
end

Do not use short-circuit return

直ぐ上のconstraints対応のコミットについて、return if ~している箇所を修正しています。

-  return if callable_constraint.respond_to?(:call) || callable_constraint.respond_to?(:matches?)
-  raise ArgumentError, "Invalid constraint: #{callable_constraint.inspect} must respond to :call or :matches?"
+  unless callable_constraint.respond_to?(:call) || callable_constraint.respond_to?(:matches?)
+    raise ArgumentError, "Invalid constraint: #{callable_constraint.inspect} must respond to :call or :matches?"
+  end

修正後の方がスッキリといえばスッキリかなあ。個人的には、最初の書き方してしまいそうですが。


Use assert_raises

こちらもconstraints対応のコミットの修正です。

assert_raiseメソッドをassert_raisesに修正しています。

Minitestにはassert_raiseメソッドが無いので、assert_raiseだと、test-unitのメソッドが呼ばれてしまうから、ですかねえ。


Improve CHANGELOG entry

CHANGELOGの修正です。不要なスペースの削除、シングルコーテーションの追加など。


Arel master is 6.0.0

activerecord/activerecord.gemspecの修正です。Arelのバージョンを6.0.0に修正しています。


Get rid of extra local var that does not add to the logic

AbstractController::Base#processメソッドの修正です。不要な変数を削除しています。


Get rid of unused method in AR Post test model

activerecord/test/models/post.rbから、使用していないメソッドを削除しています。


Put back Relation#join method as a delegate to Array

ActiveRecord::Relation#joinの動作の修正です。

rails 4.0.xでは、ActiveRecord::Relation#joinArray#joindelegateされていたのですが、4.1ではArel#SelectManagerではdelegateされるようになっていました。

これを、4.0.x同様にArray#joindelegateするように修正しています。

PR見る限り、そもそもArel#SelectManagerdelegateしていたのは意図的では無かったようです。