enum-i18nの話し
この記事はみんなのウェディング Advent Calendar 2017 - Qiita 22日目の記事です。
dotenv+itamae環境をconfig+yaml_vaultに移行した話 - amyroi's logの記事に引き続き@amyroiが担当します。
enum-i18n
Rails4のEnumをI18nに対応するイケているgemがなかったので 簡単に作ったものを後日gemにしました。 こちらについて書いていこうと思います。
https://rubygems.org/gems/enum-i18n
以前HatenaBlogの記事で簡単な紹介をしました。 amyroi.hateblo.jp
みんなのウェディングではこのgemを使っていません!
- 社内ではモンキーパッチとしてリポジトリ内に配置しています。
作った背景
- プロジェクト内のI18nの構成を綺麗にした。
- models, viewsで綺麗な構成になったけどenumカラムに対応させてない。
- enumerizeみたいにRailsのEnumも対応させたい! https://github.com/brainspec/enumerize
- Rails本体にはいつから対応するのかな。まだされない。。
なぜ社内で使えないのか
https://github.com/amyroi/enum-i18n/blob/master/lib/enum-i18n.rb#L10
ライブラリ内部でActiveModel::Name#model_name
メソッドを呼んでいます。
name = model_name.try(:i18n_key).to_s
しかし弊社ではmodel_name
というカラムがschemaに存在します。
そのため、特定のテーブルに対するロジックを書く必要があり、
モンキーパッチとして置くことになりました。
name = (self.class == ::User) ? 'user' : model_name.try(:i18n_key).to_s
残念!
gemにした理由
とても個人的な理由で作りました。
- 2017年の抱負を決めずに過ごしてきたので年内に何か残したかったから。
- gitのsubmoduleでライブラリを作った記憶はあるけどOSS化はしていなかった。
- フリーランスで活動する上でOSS活動について聞かれる事が増えてきたから。
増やしたいメソッド
- enumカラムの翻訳対応された一覧を取得できるoptionsを追加していきたい。
Contributing
PR送ってくれたら喜びます。
明日のAdvent Calendarは?
みんなのウェディング Advent Calendar 2017 23日目は@matsuhisa_h さんの記事です。