class MiGA::Result

The result from a task run. It can be project-wide or dataset-specific.



Hash with the result metadata.


Array of MiGA::Result objects nested within the result (if any).

Public Class Methods

exist?(path) click to toggle source

Check if the result described by the JSON in path already exists.

# File lib/miga/result.rb, line 16
def self.exist?(path) File.exist? path end
load(path) click to toggle source

Load the result described by the JSON in path. Returns MiGA::Result if it already exists, nil otherwise.

# File lib/miga/result.rb, line 21
def self.load(path)
  return nil unless MiGA::Result.exist? path
new(path) click to toggle source

Load or create the MiGA::Result described by the JSON file path.

# File lib/miga/result.rb, line 38
def initialize(path)
  @path = path
  MiGA::Result.exist?(path) ? self.load : create

Public Instance Methods

[](k) click to toggle source

Entry with symbol k.

# File lib/miga/result.rb, line 85
def [](k) data[k.to_sym] ; end
[]=(k,v) click to toggle source

Adds value v to entry with symbol k.

# File lib/miga/result.rb, line 89
def []=(k,v) data[k.to_sym]=v ; end
add_file(k, file) click to toggle source

Register file (path relative to dir) with the symbol k. If the file doesn't exist but the .gz extension does, the gzipped file is registered instead. If neither exists, nothing is registered.

# File lib/miga/result.rb, line 95
def add_file(k, file)
  k = k.to_sym
  @data[:files] ||= {}
  @data[:files][k] = file if File.exist? File.expand_path(file, dir)
  @data[:files][k] = "#{file}.gz" if
    File.exist? File.expand_path("#{file}.gz", dir)
add_files(files) click to toggle source

#add_file for each key-value pair in the files Hash.

# File lib/miga/result.rb, line 105
def add_files(files)
  files.each { |k, v| add_file(k, v) }
add_result(result) click to toggle source

Add the MiGA::Result result as part of the current result.

# File lib/miga/result.rb, line 180
def add_result(result)
  @data[:results] << result.path
clean!() click to toggle source

Register the result as cleaned.

# File lib/miga/result.rb, line 49
def clean! ; self[:clean] = true ; end
clean?() click to toggle source

Is the result clean? Returns Boolean.

# File lib/miga/result.rb, line 45
def clean? ; !! self[:clean] ; end
create() click to toggle source

Initialize and save empty result.

# File lib/miga/result.rb, line 111
def create
  @data = {:created=>, :results=>[], :stats=>{}, :files=>{}}
dir() click to toggle source

Directory containing the result.

# File lib/miga/result.rb, line 69
def dir
each_file(&blk) click to toggle source

Iterate blk for each registered file. Depending on the number of arguments of blk (arity), it's called as:

  • blk

  • blk[file_sym, file_rel]

  • blk[file_sym, file_rel, file_abs]

Note that multiple files may have the same symbol (file_sym), since arrays of files are supported.

# File lib/miga/result.rb, line 159
def each_file(&blk)
  @data[:files] ||= {}
  self[:files].each do |k,files|
    files = [files] unless files.kind_of? Array
    files.each do |file|
      case blk.arity
      when 1
      when 2, file)
      when 3, file, File.expand_path(file, dir))
        raise "Wrong number of arguments: #{blk.arity} for 1..3"
file_path(k) click to toggle source

Absolute path to the file(s) defined by symbol k.

# File lib/miga/result.rb, line 75
def file_path(k)
  k = k.to_sym
  f = self[:files].nil? ? nil : self[:files][k]
  return nil if f.nil?
  return File.expand_path(f, dir) unless f.is_a? Array{ |fi| File.expand_path(fi, dir) }
load() click to toggle source

Load (or reload) result data in the JSON file path.

# File lib/miga/result.rb, line 131
def load
  @data = MiGA::Json.parse(path)
  @data[:files] ||= {}
  @results = (self[:results] || []).map{ |rs| rs }
path(which=:json) click to toggle source

Path to the standard files of the result. which must be one of:

  • :json (default) : JSON file describing the result.

  • :start : File with the date when the processing started.

  • :done : File with the date when the processing ended.

# File lib/miga/result.rb, line 56
def path(which=:json)
  case which.to_sym
  when :json
  when :start
    @path.sub(/\.json$/, ".start")
  when :done
    @path.sub(/\.json$/, ".done")
remove!() click to toggle source

Remove result, including all associated files.

# File lib/miga/result.rb, line 139
def remove!
  each_file do |file|
    f = File.expand_path(file, dir)
    FileUtils.rm_rf(f) if File.exist? f
  %w(.start .done).each do |ext|
    f = path.sub(/\.json$/, ext)
    File.unlink f if File.exist? f
  File.unlink path
save() click to toggle source

Save the result persistently (in the JSON file path).

# File lib/miga/result.rb, line 118
def save
  @data[:updated] =
  s = path(:start)
  if File.exist? s
    @data[:started] =
    File.unlink s
  MiGA::Json.generate(data, path)