SpecialWarningというプラグインをリリースしました

最初に

ソースはgithubに上げてます.
authorNari/special_warning · GitHub
 

こんな経験はありませんか?

class Foo < ApplicationController
  def index
    if params["numeric"] == 1
      # 大事な処理
    end
  end
end

なぜかこのif文の中に入らない..何故だ!何故だ!何故だ!
 

それ文字列と数値の比較じゃない?

params["numeric"].class  #=> String
1                        #=> Fixnum
"1" == 1                 #=> false
1 == 1                   #=> true

文字列と数値の比較はfalseになるよ!
 

でも,分からない気づけない

Railsだとmodelとかviewとかhelperとかcontrollerとか...
パラメータがゴチャゴチャになるのでよく分からなくなる.
 

そこでSpecialWarningですよ!

と言うことでSpecialWarningというプラグインをリリースしました.
 

これは何か?

SpecialWarningはRailsアプリケーションを作成する際にバグになりやすい箇所を警告するプラグインです.
現在,SpecialWarningが警告する箇所は以下の通りです.

  • 数値と文字列の比較

警告は標準出力に出力し,そのバックトレースはlogに出力します.
このプラグインはproduction環境では動作しません.
 

 # Warning!
 "1" == 1

 # OK
 1 == 1

 class FooController < ApplicationController
   def index
      # 警告を出力します!
      params["numeric"] == 1
   end
 end

 class FooController < ApplicationController
   def index
     # OK
     params["numeric"].to_i == 1
   end
 end

 

インストール

RAILS_ROOTで以下のコマンドを打ち込んでください.

  $ script/plugin install git://github.com/authorNari/special_warning.git

 

ハックしたい!

その他,警告を出す箇所を増やしたい場合は,
special_warning/lib/specal_warning/
配下にファイルを追加してください.

そして,私にパッチを送ってもらえると嬉しいです.
 

結構便利です

これを導入したらバグ候補がゴロゴロ見つかりました.
Rubyに型が欲しいと思ったりするんですが,それはいくら何でもやりすぎなので
Warningくらいで丁度良いかなと思うわけです.