Module: Bitfab::ReplayCommand

Defined in:
lib/bitfab/replay_cli.rb

Overview

Installed command that loads a project-owned registry module.

Constant Summary collapse

USAGE =
"Usage: bitfab-replay --registry <path> <pipeline> [replay options]"
HELP =
"#{USAGE}\nRun bitfab-replay --registry <path> --help to list replay options."

Class Method Summary collapse

Class Method Details

.load_registry(path) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
# File 'lib/bitfab/replay_cli.rb', line 46

def load_registry(path)
  container = Module.new
  container.module_eval(File.read(path), path)
  registry = container.const_get(:REGISTRY, false) if container.const_defined?(:REGISTRY, false)
  unless registry.is_a?(ReplayRegistry)
    raise ArgumentError,
      "Replay registry '#{path}' must define REGISTRY as a Bitfab::ReplayRegistry."
  end

  registry
end

.main(argv: ARGV, stdout: $stdout, stderr: $stderr) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/bitfab/replay_cli.rb', line 20

def main(argv: ARGV, stdout: $stdout, stderr: $stderr)
  if (argv.include?("--help") || argv.include?("-h")) && !argv.include?("--registry")
    stdout.puts HELP
    return 0
  end
  run(argv:, stdout:, stderr:)
  0
rescue => error
  stderr.puts error.message
  1
end

.parse(argv) ⇒ Object

Raises:

  • (OptionParser::MissingArgument)


32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/bitfab/replay_cli.rb', line 32

def parse(argv)
  values = argv.dup
  registry_index = values.index("--registry")
  registry_path = values[registry_index + 1] if registry_index
  unless registry_path && !registry_path.start_with?("--")
    raise OptionParser::MissingArgument, USAGE
  end

  values.slice!(registry_index, 2)
  raise OptionParser::MissingArgument, USAGE if values.empty?

  [File.expand_path(registry_path), values]
end

.run(argv: ARGV, stdout: $stdout, stderr: $stderr, registry_loader: nil) ⇒ Object



13
14
15
16
17
18
# File 'lib/bitfab/replay_cli.rb', line 13

def run(argv: ARGV, stdout: $stdout, stderr: $stderr, registry_loader: nil)
  registry_path, replay_argv = parse(argv)
  loader = registry_loader || method(:load_registry)
  registry = loader.call(registry_path)
  ReplayCli.run(registry, argv: replay_argv, stdout:, stderr:)
end