a.rb
#!/usr/bin/env ruby
def main
ARGF.each do |line|
line.match(/expected (.*) to be JSON matching (.*)/) do |m|
e, r = m[1, 2]
r.gsub!(/(At=>)([^"](?:[^,]+|,[^]|,[^:])+)(,:)/) do
"#{$1}\"#{$2}\"#{$3}"
end
r.gsub!(/(\(an instance of String\))/, "\"\\1\"")
r = eval(r)
puts e
puts r.to_json
end
end
end
main
$ rspec aaa_spec.rb:xxx >! out
$ ./a.rb out | jq -s '.[0]' >! b
$ ./a.rb out | jq -s '.[1]' >! c
$ vimdiff b c
Ich habe versucht, es so zu schreiben, aber am Ende habe ich einen Teilkratzer gefunden und die Ursache identifiziert.
Lassen Sie uns einen Artikel schreiben und einen Gedenkgottesdienst machen.
Es endete so
$ perl -lne 'm/^\s+[+-]/ and do { s/^\s+-/e = {/; s/^\s+\+/r = {/; s/,$/}/; s/(At=>)([^"][^,]+)(, :)/\1"\2"\3/g; s/(=>)(\([^)]+\))(,)/\1"\2"\3/g; s/\(contain exactly /[/g and do { s/([}\]"\d])\)/\1]/g; s/ and /, /g;}; print};BEGIN{print"#!/usr/bin/env ruby\nrequire '"'"'json'"'"'\n"}END{print "puts e.to_json\nputs r.to_json"}'
Recommended Posts