(Ruby)(Hashie::Mash ってなんぞや?)

 ここ最近 私は RubyTwitterで遊んでますが
RubyGemsTwitter の followersとかのデータ構造を 見ていてふと思ったのが
Hashie::Mash ってなんぞや
ってコトで、 ハッシュのようでいて ハッシュとは違う動きをしているものが
なんか 無性に気になったわけです
そこで調べてみると、 どうやら RubyGems に Hashie というものがあるらしい
多分これって ハッシュの値に オブジェクト指向な感じで
アクセスできるようにする感じなのかな?、 まぁ よくわからんけど 笑)

 ということで 早速
gem install hashie
としてインストール
ということで スクリプト書くけど 最初の部分はこんな感じかな
#!ruby -Ku
require 'rubygems'
require 'hashie'

 それでは サンプル的な データを作ってみる事に・・・
簡単な ツリー構造も実現してみようという事で
まずは ハッシュ内ハッシュの ハッシュの部分と < わかりにくっ 笑)
もう一個上のレベルの ハッシュを 凄く単純に書くと・・・
dat_sub = {
	:sub_data1 => "0123",
	:sub_data2 => "4567",
	:sub_data3 => "89AB"
}
dat = {
	:data1 => "abcd",
	:data2 => "efgh",
	:data3 => "ijkl",
	:data4 => dat_sub
}
という感じで
dat-+--data1
    +--data2
    +--data3
    +--data4-+--sub_data1
             +--sub_data2
             +--sub_data3
という 構造になるはずです
もちろん これは一度に定義しようとすれば
dat = {
	:data1 => "abcd",
	:data2 => "efgh",
	:data3 => "ijkl",
	:data4 => {
		:sub_data1 => "0123",
		:sub_data2 => "4567",
		:sub_data3 => "89AB"
	}
}
ってな感じでも書けますよね

 で、 この段階では dat は まだ 単なるハッシュなんですね
dat を Hashie::Mash にするためには
dat = Hashie::Mash.new(dat)
みたいな感じにすればいいみたいです

 と、いうことは・・・
これまでの作業を 詰め込んでしまえばこんな風に書けますよね
#!ruby -Ku
require 'rubygems'
require 'hashie'

dat = Hashie::Mash.new({
	:data1 => "abcd",
	:data2 => "efgh",
	:data3 => "ijkl",
	:data4 => {
		:sub_data1 => "0123",
		:sub_data2 => "4567",
		:sub_data3 => "89AB"
	}
})

 で、それぞれの 値にアクセスするには
dat.data1
dat.data4.sub_data3
で出来るようになります

 ということで Hashie::Mash ってのは 多分こんな感じのものってコトでしょうね。