2008-09-19 101 views
24

我需要在文件中存儲一些簡單的屬性並從Ruby訪問它們。Java .properties文件等價於Ruby?

我絕對喜歡.properties文件格式,它是Java中這些東西的標準(使用java.util.Properties類)......它很簡單,易於使用且易於閱讀。

那麼,有沒有一個Ruby類可以讓我從文件中加載一些關鍵值對,而不需要付出很多努力?

我不想使用XML,所以請不要使用REXML(我的目的不保證「角支架稅」)。

我已經考慮過滾動我自己的解決方案......它可能是大約5-10行的代碼上面,但我仍然寧願使用現有的庫(如果它本質上是從文件構建的散列).. 。因爲這將使其下降到1線....


UPDATE:這實際上是一個直的Ruby應用程序,沒有護欄,但我認爲YAML就很好了(這是在我的腦海裏,但我忘記了......已經看到但從未使用過),謝謝大家!

回答

26

這是用於Rails應用程序還是Ruby應用程序?

真的要麼你可能能夠將你的屬性粘貼在yaml文件中然後YAML::Load(File.open("file"))它。從斯通


注:它實際上將是更好的事:

File.open("file") { |yf| YAML::load(yf) } 

YAML.load_file("file") 

爲紅寶石文檔暗示,否則文件將不關閉,直到垃圾收集,但好建議不管:-)

+0

我嵌入式編輯的意見可能不會被察覺...... – 2008-09-19 01:15:59

+0

是啊,這是一個問題,所以評論顯得如此......無形。我沒有想過要在一個街區裏做到這一點,太棒了! – 2008-09-19 01:27:05

2

取而代之.properties風格的配置文件,你可能會考慮使用YAML。 YAML在Ruby on Rails中用於數據庫配置,並在其他語言(Python,Java,Perl和其他語言)中受到歡迎。

Ruby的YAML模塊的概述是在這裏:http://www.ruby-doc.org/core/classes/YAML.html

而且YAML的主頁是在這裏:http://yaml.org

3

Devender Gollapally寫了class恰恰是要做到:

...儘管我建議最好使用YAML文件。

6

YAML將如上所述完美地完成它。舉個例子,在我的Ruby腳本之一,我有一個像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 
9

另一種選擇是簡單地使用另一個Ruby文件作爲配置文件。

例如,創建一個名爲 '選項'

{ 
    :blah => 'blee', 
    :foo => 'bar', 
    :items => ['item1', 'item2'], 
    :stuff => true 
} 

,然後在Ruby代碼執行類似的文件:

ops = eval(File.open('options') {|f| f.read }) 
puts ops[:foo] 
3

ini文件 - http://rubydoc.info/gems/inifile/2.0.2/frames將支持基本的.properties文件,也.ini文件與[SECTIONS]例如。

[SECTION] 
key=value 

YAML是好當你的數據結構複雜,但可以用繁瑣空格,製表符,行等的結束 - 如果文件不是由程序員保持這可能會導致問題。相比之下.properties.ini文件是更寬容,如果你不需要通過YAML提供的深層結構是合適的。