使用File.open写入YAML文件包装更长的行

时间:2015-10-07 03:13:01

标签: ruby-on-rails ruby yaml

我想知道我是否遗漏了File.open的一个方面。我正在尝试在YAML中编写一些文档,当我追加到文件并保存它时,它会截断我的行并破坏我的格式。

这是发生了什么:

generated_file = YAML::load_file("#{Rails.root}/documentation/auto_generated/liquid_drops/#{class_name}.yml")

我得到了我正在使用的文件,然后我所做的就是写信给它:

File.open("#{Rails.root}/documentation/auto_generated/liquid_drops/#{class_name}.yml", 'w+') {|f| f.write generated_file.to_yaml }

它会截断这样的行:

example: "{% for file in object.method.all %} -- this would be the ideal method to iterate over a file's methods"

对此:

example: "{% for file in object.method.all %} -- this would be the ideal method
    to iterate over a file's methods"

以下是generated_file的示例:

{
  "class" => "account",
  "methods" => [
{
    "method_name" => "this_method",
    "description" => "Donec sed odio dui. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio odio ma.",
    "return_type" => "Array",
        "example" => "{% for method in object.methods.all %}"
}
],
"general_notes" => "Most methods can use this instead of that, because this and that both inherit from the right file"
}

3 个答案:

答案 0 :(得分:3)

我不会称之为截断,而是用缩进包装,这是一种长达数十年的技术,例如太长的行。对于终端宽度。

.to_yaml中,此宽度由BestWidth参数确定,默认为80个字符。您可以在第24条的documentation page下找到更多选项。

其他编程语言的YAML发射器也使用这种包装。

答案 1 :(得分:3)

事实证明,这实际上是先前在“why does psych yaml interpreter add line breaks around 80 characters?”中回答的。我在寻找错误的东西。

做类似

的事情
yaml.to_yaml(:options => {:line_width => -1})

阻止线条包裹。

答案 2 :(得分:1)

最有可能是添加换行符的to_yaml方法。 File.openwrite方法不应该添加换行符。试试

f.write generated_file

f.write generated_file.to_s

没有to_yaml方法。