Class: Ace::Overseer::Molecules::LabClient

Inherits:
Object
  • Object
show all
Defined in:
lib/ace/overseer/molecules/lab_client.rb

Constant Summary collapse

BINARY =
"/usr/local/bin/lab"

Instance Method Summary collapse

Constructor Details

#initialize(runner: Open3) ⇒ LabClient

Returns a new instance of LabClient.



12
13
14
# File 'lib/ace/overseer/molecules/lab_client.rb', line 12

def initialize(runner: Open3)
  @runner = runner
end

Instance Method Details

#call(*arguments, stdin_data: nil, json: true) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/ace/overseer/molecules/lab_client.rb', line 16

def call(*arguments, stdin_data: nil, json: true)
  stdout, stderr, status = @runner.capture3(
    BINARY,
    *arguments.map(&:to_s),
    stdin_data: stdin_data.to_s
  )
  raise Error, stderr.to_s.strip.empty? ? "Lab command failed" : stderr.to_s.strip unless status.success?

  return stdout unless json

  JSON.parse(stdout)
rescue Errno::ENOENT
  raise Error, "Lab runtime unavailable: #{BINARY} is not installed"
rescue JSON::ParserError => error
  raise Error, "Lab returned invalid JSON: #{error.message}"
end