Вставка значений в хэш для дампа YAML - PullRequest
2 голосов
/ 30 ноября 2010

Я создаю хеш, который в конечном итоге будет выгружен на диск в YAML, но мне нужно захватить несколько значений, хранящихся в файле на диске, и вставить их в хеш. Я могу успешно создать переменную со значениями, разделенными запятыми, но мне нужно вставить эти значения в мой ключ "classes":

variable_values = "class1,class2,class3"

В конечном счете, мне нужно включить их в мой тестовый хеш, чтобы он имитировал что-то вроде этого:

test_hash = {'Classes' => ['class1', 'class2', 'class3']}

Наконец, я могу вывести их в yaml так, чтобы это выглядело так:

--- 
classes: 
- class1
- class2
- class3

Какой лучший способ перебрать значения и вставить их в хеш? Спасибо за любую помощь, которую вы можете предложить!

Ответы [ 2 ]

3 голосов
/ 30 ноября 2010

Возможно, вы захотите что-то вроде:

test_hash = {'Classes' => variable_values.split(',')}
1 голос
/ 01 декабря 2010

Если вы хотите сериализовать классы Ruby (я не могу сказать точно), вам, вероятно, понадобится следующий код (любезно предоставленный opensoul.org , и используемый в Маленький Собственный Коллайдер )

class Module
  yaml_as "tag:ruby.yaml.org,2002:module"

  def Module.yaml_new( klass, tag, val )
    if String === val
      val.split(/::/).inject(Object) {|m, n| m.const_get(n)}
    else
      raise YAML::TypeError, "Invalid Module: " + val.inspect
    end
  end

  def to_yaml( opts = {} )
    YAML::quick_emit( nil, opts ) { |out|
      out.scalar( "tag:ruby.yaml.org,2002:module", self.name, :plain )
    }
  end
end

class Class
  yaml_as "tag:ruby.yaml.org,2002:class"

  def Class.yaml_new( klass, tag, val )
    if String === val
      val.split(/::/).inject(Object) {|m, n| m.const_get(n)}
    else
      raise YAML::TypeError, "Invalid Class: " + val.inspect
    end
  end

  def to_yaml( opts = {} )
    YAML::quick_emit( nil, opts ) { |out|
      out.scalar( "tag:ruby.yaml.org,2002:class", self.name, :plain )
    }
  end
end

Код в настоящее время выдает исключение, если вы пытаетесь сериализовать / десериализовать анонимные классы (что-то, что я мог бы исправить, но не нужно), и кроме того, это работает хорошо для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...