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で公開してます