module Licensed::Shell

Constants

ENCODING
ENCODING_OPTIONS

Public Class Methods

encode_content(content) click to toggle source

Ensure that content that is returned from shell commands is in a usable encoding for the rest of the application

# File lib/licensed/shell.rb, line 72
def self.encode_content(content)
  content.encode(ENCODING, **ENCODING_OPTIONS)
end
execute(cmd, *args, allow_failure: false, env: {}) click to toggle source

Executes a command, returning its standard output on success. On failure it raises an exception that contains the error output, unless ‘allow_failure` is true.

# File lib/licensed/shell.rb, line 9
def self.execute(cmd, *args, allow_failure: false, env: {})
  stdout, stderr, status = Open3.capture3(env, cmd, *args)

  if !status.success? && !allow_failure
    raise Error.new([cmd, *args], status.exitstatus, encode_content(stderr))
  end

  # ensure that returned data is properly encoded
  encode_content(stdout.strip)
end
success?(cmd, *args) click to toggle source

Executes a command and returns a boolean value indicating if the command was succesful

# File lib/licensed/shell.rb, line 22
def self.success?(cmd, *args)
  _, _, status = Open3.capture3(cmd, *args)
  status.success?
end
tool_available?(tool) click to toggle source

Returns a boolean indicating whether a CLI tool is available in the current environment

# File lib/licensed/shell.rb, line 29
def self.tool_available?(tool)
  output, err, status = Open3.capture3("which", tool)
  status.success? && !output.strip.empty? && err.strip.empty?
end