Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

hashieでHash型を便利に拡張する(その1_導入編)

hashieというgemをつかうと、Hash型を拡張して色々便利な事ができます。

mash = Hashie::Mash.new
#=> {}

mash.length
#=> 0

mash.name
#=> nil

mash.name?
#=> false

mash.name = :shuzo_kino
#=> :shuzo_kino

mash.name
#=> :shuzo_kino

こういうモノはデータ管理専用のクラスを作るもんだと思ってましたが。。。
断然コッチの方が楽じゃないかタマゲタなぁ…

実装をみてみると
黒魔術でお馴染み「method_missing」を活用してアレやコレやをしているようです。

YAML等々の外部ファイルから生成

YAMLのような外部ファイルからデータを生成するのも、この通り。

# test.yml
development:
  user: 'shuzo_kino'
  pass: 'pass'
production:
  user: 'vivit_jc'
  pass: 'pass'

なんてYAMLファイルがあったとすると

file = Hashie::Mash.load('test.yml')
#=> {"development"=>{"user"=>"shuzo_kino", "pass"=>"pass"}, "production"=>{"user"=>"vivit_jc", "pass"=>"pass"}}

file.development.user
#=> "shuzo_kino"

file.development.user?
#=> true

file.development.author
#=> nil

自分でパーサーを作ると、CSV等々、他のフォーマットにも対応できるそうです。
また、dotenvのような外部gemを活用するために環境変数を渡す事もできるそうで…