railsで必須入力項目にマークを付けるneed_labelを公開しました

railsでform_forを使ってフォームを作ったときに、必須入力項目を目立たせるのってめんどくないですか?
せっかくmodelに必須入力である情報が入っているのに、Viewでイチイチ指定するのは二度手間です。

そんな方のためにneed_labelというgemを作成しました。

インストール方法

Gemfileに次の一文を追加してください。

gem "need_label"

使い方

まず、modelに必須入力項目の設定を行なってください。

class User < ActiveRecord::Base
  validates :name, :presence => true
end

これで必須入力項目のlabelにneed-labelというclassが出力されるようになります。
例として次のようなcssを指定しておけば下線で目立たせることができます。

label.need-label{
  border-bottom: inset 2px red;
}


苦労話

今回はじめてrubygemsパッケージを作成したのですが、テストを書くのが大変でした。need_labelはActionView::Helpers::FormHelperを改造したものですが、テストを行うにはActiveRecordも使う必要がありMVCを考慮したテストコードを書く必要があります。railsであればrspec-railsが良い感じに処理してくれるのですが、テストのためだけにrailsプロジェクトを作るのもナンセンスです。
他のプロジェクトはどうやってるのかな?という時に頼りになるのがgithub!イロイロなプロジェクトをcloneしまくって調査しました。似たような処理だとwill_paginateかなと思いコードを追っていたところ、知り合いから「kaminariの方がよくない?」と助言をいただきそちらを参考にすることに。
kaminariはfake_app.rbという1ファイルでmodelやcontrollerを定義しており非常にシンプルです。コレを参考にしてcapybara + nokogiriでhtmlをチェックすることでテストを無事書くことができました。
うーん。勉強になった。