Вы захотите сохранить имя пользователя в файле в локальной файловой системе. Ruby предоставляет множество способов сделать это, и в этом ответе мы рассмотрим один из них: файлы YAML.
Файлы YAML представляют собой файл структурированного хранилища, в котором могут храниться все виды различных данных, и это хорошее место для хранения данных конфигурации. Фактически, файлы конфигурации YAML являются ключевыми частями крупнейших существующих проектов Ruby. YAML дает вам хорошую отправную точку для поддержки будущих потребностей в конфигурации, помимо текущей, что является отличным способом планирования разработки функций.
Итак, как это работает? Давайте посмотрим на ваше требование, используя конфигурацию YAML:
require 'yaml'
config_filename = "config.yml"
config = {}
name = nil
if file_exists(config_filename)
begin
config = YAML.load_file(config_filename)
name = config["name"]
rescue ArgumentError => e
puts "Unable to parse the YAML config file."
puts "Would you like to proceed?"
proceed = gets.chomp
# Allow the user to type things like "N", "n", "No", "nay", "nyet", etc to abort
if proceed.length > 0 && proceed[0].upcase == "N"
abort "User chose not to proceed. Aborting!"
end
end
end
if name.nil? || (name.strip.length == 0)
print "Enter your name (you will only need to do this once): "
name = gets.chomp
# Store the name in the config (in memory)
config["name"] = name
# Convert config hash to a YAML config string
yaml_string = config.to_yaml
# Save the YAML config string to the config file
File.open(config_filename, "w") do |out|
YAML.dump(config, out)
end
end
Вместо того, чтобы показать вам минимум, соответствующий вашим потребностям, этот код включает небольшую обработку ошибок и несколько простых проверок безопасности в файле конфигурации. Он вполне может быть достаточно прочным, чтобы вы могли использовать его немедленно.
Самый первый бит просто требует стандартной библиотеки YAML. Это заставляет функции YAML работать в вашей программе. Если у вас есть файл загрузчика или другой подобный распространенный механизм, просто поместите туда require 'yaml'
.
После этого мы инициализируем некоторые переменные, которые используются в этом процессе. Обратите внимание, что config_filename
не содержит информации о пути, поэтому он будет считан из текущего каталога. Вероятно, вы захотите сохранить файл конфигурации в обычном месте, например, в ~/.my-program-name/config.yml
или C:\Documents and Settings\MyUserName\Application Data\MyProgramName\
. Это можно сделать довольно легко, и есть много чего, чтобы помочь, например, этот Расположение для размещения файлов конфигурации пользователя в Windows и Расположение ini / config в linux / unix.
Затем мы проверяем, существует ли файл на самом деле, и если да, мы пытаемся прочитать из него содержимое YAML. Здесь всю тяжелую работу берет на себя метод YAML.load_file()
, поэтому вам просто нужно запросить хэш конфигурации, возвращаемый для ключа, который вас интересует, в данном случае ключа "name"
.
Если при чтении файла YAML возникает ошибка, это указывает на то, что файл может быть поврежден, поэтому мы пытаемся с этим справиться. Файлы YAML легко редактировать вручную, но когда вы это сделаете, вы также можете легко ввести ошибку, которая приведет к сбою загрузки файла YAML. Код обработки ошибок здесь позволит пользователю прервать программу и вернуться, чтобы исправить файл YAML, чтобы он не был просто перезаписан.
После этого мы пытаемся проверить, было ли у нас правильное имя из конфигурации YAML, а если нет, мы принимаем его от пользователя. После того, как они ввели имя, мы добавляем его в хэш конфигурации, конвертируем хеш в строку в формате YAML, а затем записываем эту строку в файл конфигурации.
И это все, что нужно. Практически все, что вы можете сохранить в хэше Ruby, вы можете сохранить в файле YAML. Это очень много возможностей для хранения информации о конфигурации, и если позже вам понадобится добавить дополнительные параметры конфигурации, у вас есть универсальный контейнер, который вы можете использовать именно для этой цели.
Если вы хотите продолжить чтение по YAML, вы можете найти здесь полезную информацию:
Хотя некоторые из этих статей немного старше, они все еще очень актуальны и дадут вам отправную точку для дальнейшего чтения. Наслаждаться!
person
Michael Gaskill
schedule
07.05.2016