大変ながったらしいタイトルですみません。
環境
- Debian GNU/Linux squeeze
- Ruby 1.8.7
- Rails 2.3.8
- SQLite3 3.6.23.1
- ya2yaml 0.29.2
- ar_extractor 1.3.3
現象
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/, "")