Java の .properties ファイルは Ruby と同等ですか?
質問
いくつかの単純なプロパティをファイルに保存し、Ruby からアクセスする必要があります。
私は、Java のこの種の標準である .properties ファイル形式 (java.util.Properties クラスを使用) が大好きです...シンプルで使いやすく、読みやすいです。
それで、多くの努力をせずにそのようなファイルからいくつかのキーと値のペアをロードできるRubyクラスはどこかにありますか?
私は XML を使用したくないので、REXML を提案しないでください (私の目的は「山括弧税」を保証するものではありません)。
独自のソリューションを導入することを検討しました...おそらくコードトップは 5 ~ 10 行程度になると思いますが、それでも既存のライブラリを使用したいと思います (本質的にファイルから構築されたハッシュである場合)...それは 1 行に減ってしまうので....
アップデート:これは実際には Rails ではなく、ストレートな Ruby アプリですが、YAML でうまくいくと思います (頭の片隅にあったのですが、忘れていました...)見たことはありますが、現時点ではまだ使用したことはありません)、皆さんありがとう!
解決
これは Rails アプリケーション用ですか、それとも Ruby アプリケーション用ですか?
実際には、どちらを使用しても、プロパティを yaml ファイルに貼り付けることができる可能性があります。 YAML::Load(File.open("file"))
それ。
マイク・ストーンからのメモ: 実際には次のようにする方がよいでしょう。
File.open("file") { |yf| YAML::load(yf) }
または
YAML.load_file("file")
Rubyのドキュメントが示唆しているように、そうでない場合、ファイルはガベージコレクションまで閉じられませんが、それにもかかわらず、良い提案です:-)
他のヒント
もう 1 つのオプションは、単純に別の Ruby ファイルを構成ファイルとして使用することです。
たとえば、「options」という名前のファイルを作成します。
{
:blah => 'blee',
:foo => 'bar',
:items => ['item1', 'item2'],
:stuff => true
}
そして、Ruby コードで次のようなことを実行します。
ops = eval(File.open('options') {|f| f.read })
puts ops[:foo]
YAML は、上で説明したように、これを完全に実行します。たとえば、私の Ruby スクリプトの 1 つに、次のような YAML ファイルがあります。
migration:
customer: Example Customer
test: false
sources:
- name: Use the Source
engine: Foo
- name: Sourcey
engine: Bar
これを Ruby 内で次のように使用します。
config = YAML.load_file(File.join(File.dirname(__FILE__), ARGV[0]))
puts config['migration']['customer']
config['sources'].each do |source|
puts source['name']
end
イニファイル - http://rubydoc.info/gems/inifile/2.0.2/frames 基本的な .properties ファイルと、[SECTIONS] を含む .ini ファイルもサポートします。
[SECTION]
key=value
YAML は、データの構造が複雑な場合には適していますが、スペース、タブ、行末などを扱いにくい場合があり、プログラマがファイルを保守していないと問題が発生する可能性があります。対照的に、 .properties
そして .ini
ファイルはより寛容であり、YAML を通じて利用できる深い構造が必要ない場合に適している可能性があります。
デベンダー・ゴラパリーはこう書いた クラス まさにそれを行うには:
...ただし、YAML ファイルを使用することをお勧めします。
.properties スタイルの構成ファイルの代わりに、YAML の使用を検討することもできます。YAML は、Ruby on Rails でデータベース構成に使用され、他の言語 (Python、Java、Perl など) でも人気が高まっています。
Ruby YAML モジュールの概要は次のとおりです。 http://www.ruby-doc.org/core/classes/YAML.html
YAML のホームページは次のとおりです。 http://yaml.org