私はYamlファイルによって生成されたハッシュからオブジェクトを作成することに興味があります。Ruby:ハッシュからのメタプログラミング方法
YAMLファイルは次のようなものになります。だから、
foos:
first:
code: f
name: The First Foo
icon: path/to/file.png
second:
code: s
name: The Second Foo
icon: path/to/file.png
bars:
dive:
code: d
name: Dive Bar
location: 100 Main St.
college:
code: c
name: College Bar
location: 100 University Ave.
を、YAMLファイルは、基本的なカテゴリに属している属性のセットを定義します。 カテゴリには名前(foos、bars)があり、各属性には少なくともコードと名前があります。
私は、カテゴリの名前を単純なオブジェクトとしてそのカテゴリ内のアイテムを呼び出すことのできるメソッドに変換する「属性」モデルを作成したいと考えています。
私のような何かを行うことができるようにしたい:
Attributes = Attributes.new(...yaml_file...)
Attributes.foos #returns an array of foos
Attributes.foo(:f) #returns the foo with a code (f)
Attributes.foo(:s).name #returns "The Second Foo"
私は一種のこのアプローチする方法として失われています。
私はインスタンス変数にハッシュをロードするために私のアトリビュートモデルを設定する方法を知っていますが、私はそのハッシュのキーを使ってキーの名前を付けてパスする各カテゴリの個々のアイテムにオブジェクトのハッシュを作成して、これらをドット構文で連鎖させることができます。
ハッシュと私はすでに
attributes[:foos][:first][:icon]
を行うことができます。しかし、私は属性に他の有用なメソッドを追加することができます出発点として、このモデルからハッシュを使用したいことを私は承知しています後でモデル化する。また、私はかなり新しいルビーです。私は本当にこれを行うためにこのようなことをする方法を学びたいと思っています。
ありがとうございました!
[Struct](http://ruby-doc.org/core/classes/Struct.html)を使用してクラスを構築したことがありますか? –
ええ、私はそれについて考えていました... Structsにはあまりよく知られていません。 – Andrew