Hash を拡張した
- Mash (Mocking Hash)
- Dash (Discrete Hash)
- Clash (Chainable Lazy Hash)
を扱うライブラリ.
ちょっとしたデータを扱うときに便利かも.
Mash
mash = Hashie::Mash.new
p mash.name?
mash.name = "foo"
p mash.name
mash = Hashie::Mash.new
# {author => {name => "bar"} } のようにしたい時は "!" を使う
mash.author!.name = "bar"
# 一度 "!" を使えば,次からは "!" なしで OK
mash.author.email = "[email protected]"
# {foo => {bar => {baz => "fuga"}}}
mash.foo!.bar!.baz = "fuga"
Dash
定義済みの property のみ操作できる.
require 'rubygems' require 'hashie' class Person < Hashie::Dash property :name property :email property :occupation, :default => "Rubyist" end # 定義した property には method としてアクセスできる you = Person.new p you.name p you.occupation p you.email you.email = "[email protected]" p you.email # 定義していない property の追加はできない begin you.fuga = "hoge" rescue => e puts e end he = Person.new(:name => "fuga hoge") p he.name p he.occupation
Clash
複数の key, value を method chain で渡す.
c = Hashie::Clash.new
# method chain で要素を追加
# {:a => "a", :b => "b", :c => "c"}
c.a("a").b("b").c("c")
# {:z => {:b => "b", :c => "c"}}
c.z!.b("b").c("c")
# {:y => {:b => "b", :c => "c"}, :x => "x"}
# y! から _end! までが y の要素になる
c.y!.b("b").c("c")._end!.x("x")
p c
- intridea's hashie at master - GitHub
http://github.com/intridea/hashie
- Intridea Blog: Hashie: The Hash Toolkit
http://intridea.com/posts/hashie-the-hash-toolkit