ClassX::ValidateでHashをチェックする
http://d.hatena.ne.jp/rubikitch/20080710/1215641240
メソッドの引数にHashをとるのはいっぱいあるときでもきれいに書けるので個人的にはあまり嫌いではない。
classXを使うとHashのチェックが柔軟にできるよというおはなし。
require 'classx/validate' class YourClass include ClassX::Validate def run params validate params do has :x has :y, :default => proc { {} }, :kind_of => Hash end # do something with params end end
classXのアクセサの宣言の仕方でHashをチェックできる。メソッドに渡すべきオプションを宣言的に書くことでコードも読みやすくなるはず。
実は内部ではブロックで指定したアクセサを持つclassXベースの無名クラスを作りclassXのアクセサのValidateをさせているだけ。戻り値はその無名クラスのインスタンスなのであまりかっこよくはないけど使う方が堅実に書ける。
require 'classx/validate' class YourClass include ClassX::Validate def run params validated_params = validate params do has :x has :y, :default => proc { {} }, :kind_of => Hash end p validated_params.x validated_params.y = '' # => raise ClassX::InvalidAttrArgument # do something with params end end
classXはhttp://github.com/walf443/classx/tree/masterで公開してます