DashはHashに対して入力ルールを定める拡張です。
class User < Hashie::Dash property :name, required: true property :type, default: :normal end
shuzo = User.new(name: :Shuzo) #=> {:type=>:normal, :name=>:Shuzo} vivit = User.new(name: :Vivit, type: :writeLater) #=> {:type=>:writeLater, :name=>:Vivit}
例の如く、メソッドみたいに値を呼び出せます。便利です。
vivit.name
=> :Vivit
使用上の注意
シンボルと文字列は別の扱い
シンボルと文字列はそれぞれ別物として扱われます。
メソッド風に呼び出した場合、実行されるのはシンボルの方です。
class Tricky < Hashie::Dash property :trick property 'trick' end p = Tricky.new(trick: 'one', 'trick' => 'two') p.trick # => 'one', always symbol version p[:trick] # => 'one' p['trick'] # => 'two'
文字列しか定義していない場合・・・メソッド式では呼び出せません
class Tricky < Hashie::Dash property 'trick' end p = Tricky.new('trick' => 'two') p.trick # => NoMethodError
Strong Parametersとの兼ね合い
権限だの初期値だのがStrong Parametersぽいですが・・・
実際公式でも考えてはいるようで、
hashie_railsというgemがでてます。