mkvtoolnix/tests/test.d/results.rb

83 lines
2.0 KiB
Ruby
Raw Normal View History

2012-01-26 19:02:25 +00:00
class Results
attr_reader :results
def initialize(controller)
@controller = controller
load
end
def load
@results = Hash.new
return unless FileTest.exist?("results.txt")
IO.readlines("results.txt").each do |line|
parts = line.chomp.split(/:/)
parts[3] =~ /([0-9]{4})([0-9]{2})([0-9]{2})-([0-9]{2})([0-9]{2})([0-9]{2})/
parts << 0 if 4 <= parts.size
@results[parts[0]] = {
:hash => parts[1],
:status => parts[2].to_sym,
:date_added => Time.local($1, $2, $3, $4, $5, $6),
:duration => parts[4].to_f,
}
end
end
def save
f = File.new "results.txt", "w"
@results.keys.sort.each do |key|
f.puts [ key, @results[key][:hash], @results[key][:status], @results[key][:date_added].strftime("%Y%m%d-%H%M%S"), @results[key][:duration] ].collect { |item| item.to_s }.join(":")
end
f.close
end
def exist?(name)
@results.has_key? name
end
def test_attr(name, attribute, default = nil)
if !exist? name
return default if default
raise "No such result #{name}"
end
@results[name][attribute]
end
%w{hash status date_added duration}.each do |attribute|
define_method("#{attribute}?") do |name|
test_attr name, attribute.to_sym, attribute == "duration" ? 0 : nil
end
end
def add(name, hash, duration = 0)
raise "Test does already exist" if exist? name
@results[name] = {
:hash => hash,
:status => :new,
:date_added => Time.now,
:duration => duration,
}
save
end
def set(name, status)
return unless exist? name
@results[name][:status] = status
save
end
def set_hash(name, hash)
raise "Test does not exist" unless exist? name
@results[name][:hash] = hash
save
end
def set_duration(name, duration)
return unless exist?(name) && @controller.record_duration
@results[name][:duration] = duration
save
end
end