Padrino::Validation::HTML5というgemをつくりました

つくりました。まだ荒削りですが、かなりべんりです。

モデルに定義されたバリデーションから適切な入力制約の属性値をもつフォームコントロールをつくれます。

ActiveModelというActiveSupportなんかとうまく連携できるようなモデルのインターフェースを提供するライブラリがあって、ActiveRecordをはじめとしてMongoMapperMongoidなんかはそのまま動くはずです。

PadrinoのヘルパのひとつにFormBuilderというのがあって、これはRailsにもある、モデルからいいかんじにフォームコントロールをつくるヘルパ群となっています。実装はあっさりとしていて、form_forにオブジェクトを渡して、そこからコールバックから帰ってきたエラーメッセージとかカラム名とか引っ張っているわけですね。

ActiveModelをつかっているライブラリでは統一されたインターフェースでバリデーションの情報が引けるので、FormBuilder内からアクセスしてそのままHTMLの属性として追加してあげているわけです。

id:antipopさんのHTML::ValidationRulesがめちゃんこべんりそうだったのですが、HTMLをパースする実装になっていたのでHamlみたいなのが流行っているRubyではそのまんま移植するのは骨が折れそうだったので、既にActiveModelというインターフェース (まだ新鋭ですが) があったので、これでバリデーションのルールを記述し、それをクライアントサイドでも使い回そう、という発想に至り実装しました。

registerするだけで設定は不要です。設定できないとも言います。バリデーションルールの上書きはできますが、バリデーションルールを追加しない、というのは (おそらく) できません。そういう設定・パラメータがあってもよい気はしますが、取り急ぎ未対応のバリデーションに対応させるのが先決になりそうです。

pull requestなどなどお待ちしております。