selectable_attrって何さ?
定数定義を分かりやすくするために僕が作っているプラグインです。こんな風に思う方に強くオススメです。
- マジックナンバーを撲滅したい
- 値とプログラム上での記述と表示上の名称をひとまとめに書きたい
- select_tagとかに渡す選択肢(option_tags)をいちいち自分で作るのめんどい
- Rubyで定数をどこかにまとめて書くなんてあり得ない
例えば、selectable_attrを使わないで書くと、以下のように結構記述量がありますが、
class LegacyProduct1 < ActiveRecord::Base set_table_name 'products' PRODUCT_TYPE_BOOK = '01' PRODUCT_TYPE_DVD = '02' PRODUCT_TYPE_CD = '03' PRODUCT_TYPE_OTHER = '09' PRODUCT_TYPE_OPTIONS = [ ['書籍', PRODUCT_TYPE_BOOK], ['DVD', PRODUCT_TYPE_DVD], ['CD', PRODUCT_TYPE_CD], ['その他', PRODUCT_TYPE_OTHER] ] DISCOUNT = { PRODUCT_TYPE_BOOK => 0.8, PRODUCT_TYPE_DVD => 0.2, PRODUCT_TYPE_CD => 0.5, PRODUCT_TYPE_OTHER => 1 } def discount_price (DISCOUNT[product_type_cd] * price).to_i end end
selectable_attrを使うとこんな風にすっきり書けます。
class Product1 < ActiveRecord::Base set_table_name 'products' selectable_attr :product_type_cd do entry '01', :book, '書籍', :discount => 0.8 entry '02', :dvd, 'DVD', :discount => 0.2 entry '03', :cd, 'CD', :discount => 0.5 entry '09', :other, 'その他', :discount => 1 end def discount_price (product_type_entry[:discount] * price).to_i end end
で、これだけじゃよく分からないと思うので、紹介用にテストを書いてみました。
http://github.com/akm/selectable_attr/tree/master/test/introduction_test.rb