share facebook facebook2 twitter menu hatena pocket slack

2015.06.29 MON

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

WRITTEN BY今岡 久敏

マルチドキュメント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のままばらしてしまうと、これもひとつのドキュメント扱いになるので、 * 配列バラシをしている。

元記事はこちら

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

今岡 久敏

「常に新しいモノの方が、古いモノより優れている、というマインドを持てなくなった時、それはエンジニアとしての死を意味する」え、誰の言葉だって?俺の言葉だよ。