ruby/state_compare.rb (55 lines of code) (raw):
#!/usr/bin/env ruby
require 'json'
require 'base64'
require 'zlib'
require 'stringio'
class Dumper
def initialize filename
@filename = filename
end
def dump
expected = nil
actual = nil
File.read(@filename).each_line do |line|
if expected.nil?
if line.start_with? '- Expected: '
expected = line[12, line.length]
end
else
if line.start_with? '- Actual : '
actual = line[12, line.length]
go_compare expected, actual
expected = nil
actual = nil
end
end
end
end
def go_compare a, b
f = File.open 'expected.txt', 'a'
f << decode(a)
f.close
f = File.open 'actual.txt', 'a'
f << decode(b)
f.close
end
def decode txt
json = JSON.parse txt
gz = Zlib::GzipReader.new(StringIO.new(Base64::decode64(json['compressed'].join)))
gz.read
end
end
help_message = "Decode compressed model state from unittest logs\n" +
"Writes to expected.txt and actual.txt\n\n" +
"Usage: dump_model_state.rb <logfile>\n\n"
if ARGV.length == 0 || ARGV.first == '-h'
STDERR.puts help_message
exit 1
end
begin
require 'ap'
rescue
STDERR.puts "Gem 'awesome_print' not found. Try 'sudo gem install awesome_print'"
exit 2
end
d = Dumper.new ARGV.first
d.dump