У меня есть класс конфигурации в Ruby, который имел ключи типа «core.username» и «core.servers», который так же хранился в файле YAML.
Теперь я пытаюсь изменить его, чтобы он был вложенным, но без необходимости менять все места, которые ссылаются на ключи по-старому. Я справился с этим методом чтения:
def [](key)
namespace, *rest = key.split(".")
target = @config[namespace]
rest.each do |k|
return nil unless target[k]
target = target[k]
end
target
end
Но когда я попробовал то же самое с классом писателя, это работает, но не устанавливается в @config
-хэш. @config
устанавливается только с помощью вызова YAML.load_file
Мне удалось заставить его работать с eval
, но это не то, что я хотел бы сохранить надолго.
def []=(key, value)
namespace, *rest = key.split(".")
target = "@config[\"#{namespace}\"]"
rest.each do |key|
target += "[\"#{key}\"]"
end
eval "#{target} = value"
self[key]
end
Есть ли какой-нибудь достойный способ добиться этого, желательно без смены плагинов и кода?