なるようになるブログ

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

rails commit log流し読み(2014/04/16)

2014/04/16分のコミットです。

ActiveRecordにLike構文のエスケープ処理用のsanitize_sql_likeというメソッドが追加されています。


Merge pull request #14745 from razum2um/plain-text-diagnostics

ActionController errors以外のエラーがcontrollerで発生した場合のエラーの見せ方を変更しています。

<header>
  <h1>
    RuntimeError
  </h1>
</header>

<div id="container">
  <h2>puke!</h2>

Rails.root: unset

Application Trace
/Users/razum2um/Code/rails/actionpack/test/dispatch/debug_exceptions_test.rb:60:in `call'
/Users/razum2um/Code/rails/actionpack/lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'

修正されているのはtext.erbだけなので、想定しているのはXMLHttpRequestでリクエスト投げた際のエラーですね。

元となったPRを見る限り、Chromeのデバッガーで見た時に見やすくなるように、との事のようです。


Set _after_create_counter_called flag to make update counter cache work

昨日あったcounter cacheのリファクタリングの続きです。

_create_record実行時に、counter_cache用のフラグに値を設定しています。


Restore the destroy_by_association check in post destroy counter cache

こちらもcounter_cacheのリファクタリングの続きです。

association先でデータが削除されたかチェックして、チェックOKなら、counter_cacheの値をデクリメントしている、ような…。


Hide BelongsToAssociation#increment_counters and #decrement_counters

内部用メソッドである、BelongsToAssociation#increment_counters#decrement_countersnodocを入れています。


Changed change_column in PG schema_statements.rb to make sure that the uuid_generate function was not being quoted.

PostgreSQLで型にuuidを指定した場合に、defaultの値をクオートしないように対応しています。

def change
  add_column     :reservation_requests, :thingy, :uuid, null: false, default: "uuid_generate_v4()"
  change_column  :reservation_requests, :id,     :uuid, null: false, default: "uuid_generate_v4()"
end

マイグレーションファイルに上記のように記述した場合、"uuid_generate_v4()"という文字列としてSQLが実行されてしまい、SQLエラーが発生してしまうようです。

defaultSQLの関数を指定出来るのは知りませんでした。これだと、確かにUUIDを使う際に便利そうです。


Add CHANGELOG entry for #14766 [ci skip]

上記uuidをクオートしないコミットについてCHANGELOGに追記しています。


Update AC::Metal documentation example [ci skip]

ActionController::Metalのexampleを修正しています。 修正内容は下記の通りです。

-  #     include ActionController::Rendering
+  #     include AbstractController::Rendering
+  #     include ActionView::Layouts

ActionViewActionPackから除かれたので、append_view_pathメソッドを使うためにはActionView::Layoutsクラスが、renderするためには、ActionView::Layoutsクラスのincludeがそれぞれ必要になっています。


Object#duplicable?

activesupport/lib/active_support/core_ext/object/duplicable.rbへのコメント追加、及びテストコードの整理が行われています。

BigDecimalruby 1.9.3系ではdup出来ないのでチェック処理が行われている、という旨コメントが追加されています。


[ci skip] Avoid suggesting dangerous code in i18n guide

rails guideの修正。18n guideの部分で、to_symを使っている箇所を修正しています。

RubySymbolオブジェクトはGCで回収されないので、大量にSymbolオブジェクトを生成させると、サービス不能に陥る可能性があります。

で、対象のguideの部分は、外部で設定された値をto_symしており、サービス不能攻撃となる可能性があるので修正されています。


SQL Like escaping helper method. [Rob Gilson & Yves Senn]

SQLのLIKE構文の為のsanitize_sql_likeというエスケープ用のメソッドが追加されました。

# Example
class Article
  def self.search(term)
    where("title LIKE ?", sanitize_sql_like(term))
  end
end

Article.search("20% _reduction_")
# => Query looks like "... title LIKE '20\% \_reduction\_' ..."

これは嬉しい。手でエスケープ処理を行う必要がなくなります。


Changed the NullRelation so that when count is called with #group it will properly return an empty hash instead of zero. Fixes issue #14721

NullRelationでは、sumメソッドは強制的に0をreturnしていたのですが、groupメソッドが呼ばれた場合は、空のHashをreturnするように修正しています。地味にバグ修正です。


Merge pull request #11836 from mcfiredrill/engines-testing-doc

rails guideの修正。 Functional testsをする際の説明を追加しています。

Functional testsをする際、@routesEngine.routesを設定してあげる事で、urlのヘルパーメソッドを呼ぶことが出来る、という説明です。

setup do
  @routes = Engine.routes
end

sanitize_sql_like escapes escape_character not only backslash.

少し上のコミットで追加されたsanitize_sql_likeのテストコードの追加です。バックスラッシュ以外の文字をエスケープするパターンのテストを追加しています。