Как предотвратить преобразование строк в yaml во времена - PullRequest
3 голосов
/ 18 февраля 2010

У меня есть файл yaml, который содержит несколько раз:

  hours:
    - 00:00:00
    - 00:30:00
    - 01:00:00

Но как только я их читаю, они преобразуются во время (в секундах), но я хочу, чтобы они на мгновение оставались строками, чтобы я мог выполнить преобразование. Вот как я их читаю:

  def daily_hours
    DefaultsConfig.hours.collect {|hour|
      logger.info { hour.to_s }
    }
  end

И выводит:

0 1800 3600

Но я хочу, чтобы строки оставались неизменными, чтобы я мог преобразовать их во времена, такие как:

12: 00 утра, 12:30 утра, 1:00 утра * 016 *

Почему они автоматически конвертируются и как я могу это остановить?

Вот класс DefaultConfig:

class DefaultsConfig  
  def self.load
    config_file = File.join(Rails.root, "config", "defaults.yml")

    if File.exists?(config_file)
      config = ERB.new(File.read(config_file)).result
      config = YAML.load(config)[Rails.env.to_sym]
      config.keys.each do |key|
        cattr_accessor key
        send("#{key}=", config[key])
      end
    end
  end
end
DefaultsConfig.load

Ответы [ 2 ]

8 голосов
/ 18 февраля 2010

Если вы заключите значение в одинарные кавычки, синтаксический анализатор YAML будет рассматривать значение как строку.

hours:
    - '00:00:00'
    - '00:30:00'
    - '01:00:00'

Теперь, когда вы получите доступ к значению, вы получите строку вместо времени

DefaultsConfig.hours[0] # returns "00:00:00"
6 голосов
/ 19 февраля 2010

Скаляр без кавычек или тегов - тема неявного типа . Вы можете использовать кавычки или явный тег:

hours:
       - '00:00:01'
       - "00:00:02"
       - !!str "00:00:03"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...