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.



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

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

Instance Attribute Details

#dirObject (readonly)

Returns the value of attribute dir.



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

def dir
  @dir
end

Instance Method Details

#nameObject

Get the name of the pack.



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

def name
  File.basename(@dir)
end

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

Run it with the given Factbase and environment variables.



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

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 pack.



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

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.



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

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