Class: Judges::Pack

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

Overview

A single pack.

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) ⇒ Pack

Returns a new instance of Pack.



35
36
37
38
39
# File 'lib/judges/pack.rb', line 35

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

Instance Attribute Details

#dirObject (readonly)

Returns the value of attribute dir.



33
34
35
# File 'lib/judges/pack.rb', line 33

def dir
  @dir
end

Instance Method Details

#nameObject

Get the name of the pack.



66
67
68
# File 'lib/judges/pack.rb', line 66

def name
  File.basename(@dir)
end

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

Run it with the given Factbase and environment variables.



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

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)
  begin
    load(s, true)
  ensure
    $fb = $judge = $options = $loog = nil
  end
end

#scriptObject

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



71
72
73
74
75
# File 'lib/judges/pack.rb', line 71

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.



78
79
80
# File 'lib/judges/pack.rb', line 78

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