読者です 読者をやめる 読者になる 読者になる

続 カッコの付け方

AWSを始めとしたクラウドコンピューティング全般と、唯一神emacsにおける()の付け方についてだらだら書きます

rubyでマルチドキュメントyamlを捌く

ruby yaml

マルチドキュメントyamlってなんだ?
1ファイルの中に---が複数入っているyamlです。こんな感じ

---
kind: dns#resourceRecordSet
rrdatas:
- x.x.x.x
ttl: 3600
type: A
---
kind: dns#resourceRecordSet
rrdatas:
- hogehoge
ttl: 3600
type: CNAME

コード

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
require 'yaml'

org = File.open("/path/to/yaml")
yam = YAML.load_documents(org)
org.close

ed_yam = yam.select{...}

File.open("/path/to/yanl", "w") do |e|
  e.write(YAML.dump_stream(*ed_yam))
end

読み込むとき load_documentsで吸わないと、最初のドキュメントで止まってしまう。 また吐き出すときも dump_streamでばらさなければいけないが、Arrayのままばらしてしまうと、これもひとつのドキュメント扱いになるので、 * 配列バラシをしている。