2008-09-19 3 views
24

Мне нужно сохранить некоторые простые свойства в файле и получить к ним доступ из Ruby.Java .properties эквивалент файла для Ruby?

Мне очень нравится формат файла .properties, который является стандартом для таких вещей на Java (с использованием класса java.util.Properties) ... он прост, прост в использовании и легко читается.

Итак, есть ли где-нибудь класс Ruby, который позволит мне загружать некоторые пары ключевых значений из такого файла без особых усилий?

Я не хочу использовать XML, поэтому, пожалуйста, не предлагайте REXML (моя цель не гарантирует «налог на угол»).

Я рассмотрел вопрос о переводе собственного решения ... вероятно, это будет около 5-10 строк вершин кода, но я бы предпочел использовать существующую библиотеку (если это по существу хэш, построенный из файла). ., как бы довести его до 1 линии ....


UPDATE: это на самом деле прямо приложение рубина, не рельсы, но я думаю, что YAML будет делать красиво (это было в глубине моего сознания, но я забыл об этом ... видел, но никогда не использовал пока), спасибо всем!

ответ

26

Это для приложения Rails или Ruby?

Действительно, либо вы можете использовать свои свойства в файле yaml, а затем YAML::Load(File.open("file")).


Примечание от Майка Стоуна: Было бы на самом деле лучше сделать:

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

или

YAML.load_file("file") 

как рубин документы предполагают, в противном случае файл не будет закрыто до сбора мусора, но хорошее предложение независимо :-)

+0

Я редактировал inline как комментарии, вероятно, не заметил ... – 2008-09-19 01:15:59

+0

Да, это проблема с SO, комментарии кажутся такими ... невидимыми. Я не думал о том, чтобы делать это в блоке, блестяще! – 2008-09-19 01:27:05

2

Вместо этого стиля .properties конфигурационного файла, вы можете использовать YAML. YAML используется в Ruby on Rails для настройки базы данных и завоевал популярность на других языках (Python, Java, Perl и др.).

Обзор модуля Рубин 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

INIFILE - http://rubydoc.info/gems/inifile/2.0.2/frames будет поддерживать основные .properties файлы, а также .ini с [SECTIONS], например.

[SECTION] 
key=value 

YAML хорош, когда данные имеют сложную структуру, но может быть неудобным с пробелами, символами табуляции, конец строки и т.д. - которые могут вызвать проблемы, если файлы не поддерживаются программистами. В отличие от .properties и .ini файлы более прощающие и могут быть подходящими, если вам не нужна глубокая структура, доступная через YAML.

Смежные вопросы