Class: Judges::Judge

Inherits:
Object show all
Defined in:
lib/judges/judge.rb

Overview

A single judge.

Author

Yegor Bugayenko (yegor256@gmail.com)

Copyright

Copyright © 2024 Yegor Bugayenko

License

MIT

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(dir, lib, loog) ⇒ Judge

Returns a new instance of Judge.



34
35
36
37
38
# File 'lib/judges/judge.rb', line 34

def initialize(dir, lib, loog)
  @dir = dir
  @lib = lib
  @loog = loog
end

Instance Attribute Details

#dirObject (readonly)

Returns the value of attribute dir.



32
33
34
# File 'lib/judges/judge.rb', line 32

def dir
  @dir
end

Instance Method Details

#nameObject

Get the name of the judge.



65
66
67
# File 'lib/judges/judge.rb', line 65

def name
  File.basename(@dir)
end

#run(fbase, global, local, options) ⇒ Object

Run it with the given Factbase and environment variables.



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/judges/judge.rb', line 41

def run(fbase, global, local, options)
  $fb = fbase
  $judge = File.basename(@dir)
  $options = options
  $loog = @loog
  $global = global
  $local = local
  unless @lib.nil?
    raise "Lib dir #{@lib.to_rel} is absent" unless File.exist?(@lib)
    raise "Lib #{@lib.to_rel} is not a directory" unless File.directory?(@lib)
    Dir.glob(File.join(@lib, '*.rb')).each do |f|
      require_relative(File.absolute_path(f))
    end
  end
  s = File.join(@dir, script)
  raise "Can't load '#{s}'" unless File.exist?(s)
  elapsed(@loog) do
    load(s, true)
  ensure
    $fb = $judge = $options = $loog = nil
  end
end

#scriptObject

Get the name of the .rb script in the judge.



70
71
72
73
74
# File 'lib/judges/judge.rb', line 70

def script
  s = Dir.glob(File.join(@dir, '*.rb')).first
  raise "No *.rb scripts in #{@dir.to_rel}" if s.nil?
  File.basename(s)
end

#testsObject

Return all .yml tests files.



77
78
79
# File 'lib/judges/judge.rb', line 77

def tests
  Dir.glob(File.join(@dir, '*.yml'))
end