Java.properties эквивалент файла для Ruby?
Мне нужно сохранить некоторые простые свойства в файле и получить к ним доступ из Ruby.
Мне очень нравится формат файла .properties, который является стандартом для таких вещей в Java (с использованием класса java.util.Properties)... он прост, удобен в использовании и легко читается.
Итак, есть ли где-нибудь класс Ruby, который позволит мне загружать некоторые пары ключевых значений из такого файла без особых усилий?
Я не хочу использовать XML, поэтому, пожалуйста, не предлагайте REXML (моя цель не гарантирует "налог на угол" ).
Я рассмотрел вопрос о переносе собственного решения... вероятно, это будет около 5-10 строк вершин кода, но я бы предпочел использовать существующую библиотеку (если это по существу хэш, построенный из файла)... так как это снизит его до 1 строки....
UPDATE: это просто приложение Ruby, а не рельсы, но я думаю, что YAML будет хорошо (он был в моей памяти, но я забыл об этом... видел, но никогда не использовал его), спасибо всем!
Ответы
Ответ 1
Это для приложения Rails или Ruby?
Действительно, либо вы можете использовать свои свойства в файле yaml, а затем YAML::Load(File.open("file"))
.
ПРИМЕЧАНИЕ от Майка Стоуна: Это было бы лучше сделать:
File.open("file") { |yf| YAML::load(yf) }
или
YAML.load_file("file")
как предлагают рубиновые документы, иначе файл не будет закрыт до сбора мусора, но хорошее предложение независимо: -)
Ответ 2
Другой вариант - просто использовать другой файл Ruby в качестве файла конфигурации.
Пример: создайте файл с именем "options"
{
:blah => 'blee',
:foo => 'bar',
:items => ['item1', 'item2'],
:stuff => true
}
И затем в вашем коде Ruby сделайте что-то вроде:
ops = eval(File.open('options') {|f| f.read })
puts ops[:foo]
Ответ 3
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
Ответ 4
Devender Gollapally написал класс, чтобы сделать именно это:
... хотя я бы рекомендовал использовать файл YAML.
Ответ 5
inifile - http://rubydoc.info/gems/inifile/2.0.2/frames будет поддерживать базовые файлы .properties, а также .ini файлы с помощью [SECTIONS], например.
[SECTION]
key=value
YAML хорош, когда ваши данные имеют сложную структуру, но могут быть затруднены с пробелами, вкладками, концом строк и т.д. - что может вызвать проблемы, если файлы не поддерживаются программистами. В отличие от .properties
и .ini
файлы более прощающие и могут быть подходящими, если вам не нужна глубокая структура, доступная через YAML.
Ответ 6
Вместо стиля .properties конфигурационного файла вы можете использовать YAML. YAML используется в Ruby on Rails для настройки базы данных и завоевал популярность на других языках (Python, Java, Perl и др.).
Обзор модуля Ruby YAML находится здесь: http://www.ruby-doc.org/core/classes/YAML.html
И домашняя страница YAML находится здесь: http://yaml.org