jp_prefecture という都道府県を扱う gem を作った
jp_prefecture という gem を作りました。
jp_prefecture gem とは
簡単に言うと、都道府県コードから都道府県名を変換する gem です。
このような感じでインストールしてください。
gem install jp_prefecture
都道府県コードから都道府県名を取得するには以下のように書きます:
require 'jp_prefecture'
pref = JpPrefecture::Prefecture.find 13
#=> #<JpPrefecture::Prefecture:0x007fcd25909440 @code=13, @name="東京都">
pref.name
# => "東京都"
また、Rails のプラグインとしても使用することができます。
Rails で使う
jp_prefecture gem の目玉は Rails のプラグインとして動くところです。
例えば、prefecture_code:integer という属性を持つ Place
モデルがあったとして、jp_prefecture を以下のようにして呼び出します:
class Place < ActiveRecord::Base
include JpPrefecture
jp_prefecture :prefecture_code
end
すると、モデルに prefecture というインスタンスメソッドが作成され、都道府県名を参照できるようになります:
place = Place.new(prefecture_code: 1)
place.prefecture.name
# => "北海道"
テンプレート上で都道府県のセレクトボックスを生成することも簡単に行えます。
collection_select
で都道府県のセレクトボックスを生成するには以下のように書きます:
f.collection_select :prefecture_code, JpPrefecture::Prefecture.all, :code, :name
設定ファイルや別モデルにマスタを持って取得処理を書くことなく、この gem を使うことで都道府県を扱うことができるようになります。 詳しい使い方については、READMEを参照してください。
作った経緯
CurryBu というサービスを作っているのですが、都道府県を扱う機能を追加しようとした時に、都道府県のマスタを手元に持つことがなんだか微妙だな、と思ったので作りました。
都道府県のマスタは DB や設定ファイルに持つことが多いかと思いますが、この gem によって幸せになる人がいたら良いかな、と思っています。
今後について
Rails 向けに、以下の機能を追加する予定です:
- バリデーター
- 一つのモデルで複数の属性を扱えるようにする
まだまだ十分ではない部分があるかと思います。 都道府県のクラスは都度生成するのではなく、シングルトンにした方が良いのでは、とか、そもそもの安定性とか。
もし、この gem を使って頂ける方がいましたら、バグや要望を GitHub の issue に報告していただけると嬉しいです。(Pull Request も歓迎です!) なるべく早く対応します。
初めて gem を作りました。色々と迷いましたが楽しいですね! YARD でドキュメントを書いたり黒魔術を少し使ったり...
どうぞ、よろしくお願いします。