Tag: yaml

如何排序YAML文件?

我一直在尝试用Ruby对i18n翻译YAML文件进行排序,这样我就能以更好,更有条理的方式管理新翻译,但我一直想知道是否有什么可以轻松完成任务。 我找到了一个YAML文件编写器,所以我可以将哈希写入文件,但我的问题是正确地对哈希进行排序。 如果我得到哈希h , h.sort返回一个数组,我仍然没有想出一个简单的方法来做到这一点。 我有这样的YAML文件: pt-br: global: misc: total: “Total” all: “Todos” close: “Fechar” cancel: “Cancelar” crud: access: “Acessar” back: “Voltar” edit: “Editar” confirm: “Confirmar” send: “Enviar” … (文件大于此) 但我想用这种方式对它们进行排序: pt-br: global: crud: access: “Acessar” back: “Voltar” confirm: “Confirmar” edit: “Editar” send: “Enviar” misc: all: “Todos” cancel: “Cancelar” close: “Fechar” total: “Total” 我认为一些简单的递归方法可以帮助我这样: def […]

通过ruby代码读取和更新YAML文件

我写了一个像这样的yml文件: last_update: ‘2014-01-28 11:00:00’ 我正在读这个文件 config = YAML.load(‘config/data.yml’) 后来我访问last_update_time作为config [‘last_update’],但它无法正常工作。 另外我想用我的ruby代码更新last_update_time,就像它应该更新一样: last_update: ‘2014-01-29 23:59:59’ 我不知道该怎么做。

以编程方式向YAML添加注释

给定简单的YAML文件进行本地化: root: label: ‘Test’ account: ‘Account’ add: ‘Add’ local_folder: ‘Local folder’ remote_folder: ‘Remote folder’ status: ‘Status’ subkey: ‘Some value’ 如何在Ruby中以编程方式为某些键添加注释到行尾? 我需要得到类似的东西: root: label: ‘Test’ account: ‘Account’ add: ‘Add’ local_folder: ‘Local folder’ #Test comment remote_folder: ‘Remote folder’ status: ‘Status’ subkey: ‘Some value’ #Test comment 有没有其他方法(可能使用Linux sed)来实现这一目标? 我的理由是准备YAML文件以进行进一步处理。 (注释将作为外部工具的标签来识别键)。

如何在Ruby扩展别名中发出YAML

我正在寻找一种方法来发出YAML文件,避免使用别名(主要是为了简化人类的可读性)。 我认为扩展Psych::Visitors::Emitter或Psych::Visitors::Visitor是Psych::Visitors::Visitor的方法,但我实际上无法找到Ruby决定是否完全转储锚点,或者使用别名引用它。 我甚至不介意锚是否被重复使用(使用&……引用),我只需要将别名扩展到完整结构。 我知道过去曾问过类似的问题,但是: 没有别名的Ruby YAML写入仍未得到答复 是否可以使用Ruby或Python禁用锚点/引用来发出有效的YAML? 给出了Python的答案,但没有给Ruby

你如何强制to_yaml以字面块样式输出长字符串?

我在散列中有长字符串值,我想在YAML中以字面块样式(以>或|开头的块)打印,而不是作为内联字符串。 有没有办法在调用#to_yaml时强行执行此#to_yaml ? 文字块样式的示例: — this: | Foo Bar

YAML :: load引发未定义的类/模块错误

我正在我的rails应用程序中实现类似于纸张跟踪的function。 为了做到这一点,我在YAML中序列化对象。 我有item_at_version方法,它基本上是YAML::load(cached_object) – 这很好用,但是,我不知道为什么,有时它会返回undefined class/module _class name_ 。 它适用于像Event,Conversation,Note等模型,但没有任何理由,它似乎为像Dataset,Comment,Student这样的模型抛出了这个错误(我试图找到任何模式,没有任何运气) 。 我使用rails 3.2.8,ruby 1.9.3p327,psych作为YAML Engine(Psych :: Version返回1.3.4)。 PS。 当我在该文件的顶部添加require’model_name’时,它就像一个魅力。 任何想法我应该改变/添加什么来使这个工作? 编辑:我可以分享的代码不多: def item_at_version YAML::load(cached_object) end 但也许回溯会很有趣: ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:312:in `path2class’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:312:in `resolve_class’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:219:in `visit_Psych_Nodes_Mapping’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/visitor.rb:15:in `visit’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/visitor.rb:5:in `accept’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:20:in `accept’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:238:in `visit_Psych_Nodes_Document’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/visitor.rb:15:in `visit’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/visitor.rb:5:in `accept’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/visitors/to_ruby.rb:20:in `accept’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych/nodes/node.rb:35:in `to_ruby’ ~/.rvm/rubies/ruby-1.9.3-p327/lib/ruby/1.9.1/psych.rb:128:in `load’ app/models/history_version.rb:7:in `item_at_version’ app/controllers/history_controller.rb:8:in `show’ actionpack […]

是否可以在ruby中为to_yaml指定格式化选项?

代码 require ‘yaml’ puts YAML.load(” is_something: values: [‘yes’, ‘no’] “).to_yaml 产生 — is_something: values: – “yes” – “no” 虽然这是一个正确的yaml,但是当你有一个数组哈希时它看起来很丑陋。 有没有办法让to_yaml生成yaml的内联数组版本? 可以将选项哈希传递给to_yaml但是如何使用它呢? 编辑0:感谢PozsárBalázs。 但是,从ruby 1.8.7(2009-04-08 patchlevel 160)开始,选项哈希不像宣传的那样工作。 🙁 irb irb(main):001:0> require ‘yaml’ => true irb(main):002:0> puts [[ ‘Crispin’, ‘Glover’ ]].to_yaml( :Indent => 4, :UseHeader => true, :UseVersion => true ) — – – Crispin – Glover […]

自定义to_yaml和domain_type

我需要定义自定义方法来序列化/反序列化对象。 我想做类似以下的事情。 class Person def to_yaml_type “!example.com,2010-11-30/Person” end def to_yaml “string representing person” end def from_yaml(yaml) Person.load_from(yaml) end end 声明序列化/反序列化的正确方法是什么?

如何在YAML中声明带有单引号和双引号的字符串?

我正在国际化一个应用程序,无法弄清楚如何声明包含单引号和双引号的转换字符串。 这是我正在尝试的en.yml字符串的示例 en: my_string: When you’re using double quotes, they look like “this” 使用上面的字符串,我收到以下错误: can not load translations from /vagrant/config/locales/en.yml, expected it to return a hash, but does not 如果只有双引号,我会将它用单引号括起来,反之亦然。 我如何处理双引号和单引号?

不同的YAML数组表示

我正在使用Python和PyYAML编写一个文件类型转换器,用于我多次翻译和从YAML文件转换的项目。 然后,这些文件由我无法控制的单独服务使用,因此我需要将YAML转换回原来相同的状态。 我的原始文件包含以下部分: key: – value1 – value2 – value3 使用yaml.load()计算{key: [value1,value2,value3]} 。 当我将其翻译回YAML时,我的新文件如下所示: key: [value1,value2,value3] 我的问题是,就YAML文件的各种语言解析器而言,这两种forms是否相同。 显然使用PyYaml,这些是等价的,但这适用于Ruby或应用程序使用的其他语言吗? 如果没有,则应用程序将无法正确显示数据。