ya2yamlを使ってカラムにYAML文字列を格納していたらar_extractorでうまく出力できない


大変ながったらしいタイトルですみません。

環境

現象

sampleHash = {v => {u => "1", v => "0", w => "0", x => "0", y => "1", z => "0"}, z => {u => "0", v => "0", w => "0", x => "0", y => "1", z => "0"}} を ya2yaml を使って、YAML文字列にすると以下のようになる。

v: 
  u: "1"
  v: "0"
  w: "0"
  x: "0"
  ? "y"
  : "1"
  z: "0"
z: 
  u: "0"
  v: "0"
  w: "0"
  x: "0"
  ? "y"
  : "1"
  z: "0"'

アルファベットのy, nなどはそのまま格納するとデータベースによってはブール代数の値と誤って解釈してしまうのを防ぐため、強制的に文字列"y"と"n"として扱っているのだと思う。

これをSQLite3のデータベースに格納し、ar_extractor をつかって、fixutureに書き出すと以下のようになる。

v: 
  u: "1"
  v: "0"
  w: "0"
  x: "0"
  "y"
  : "1"
  z: "0"
z: 
  u: "0"
  v: "0"
  w: "0"
  x: "0"
  "y"
  : "1"
  z: "0"'

"y"の前にあった「?」をとってしまう。その結果、上記のYAML文字列を sampleHash に正しく復元できない。

解決法

副作用がどれくらいあるかわからないけれども、とりあえず「?」が残るようにした。変更点は以下のとおり。

diff ar_extractor.rake.org ar_extractor.rake
142c142,143
<     value.gsub!(/\t|\?/, "")
---
>     #value.gsub!(/\t|\?/, "")
>     value.gsub!(/\t/, "")