class BetweenMeals::Cmd

Attributes

bin[RW]

Public Class Methods

new(params) click to toggle source
# File lib/between_meals/cmd.rb, line 23
def initialize(params)
  @bin = params[:bin] || fail
  @cwd = params[:cwd] || Dir.pwd
  @logger = params[:logger] || Logger.new(STDOUT)
end

Public Instance Methods

cmd(params, cwd = nil, nofail = false) click to toggle source
# File lib/between_meals/cmd.rb, line 29
def cmd(params, cwd = nil, nofail = false)
  cwd ||= File.expand_path(@cwd)
  cmd = "#{@bin} #{params}"
  @logger.info("Running \"#{cmd}\"")
  c = Mixlib::ShellOut.new(
    cmd,
    :cwd => cwd,
    :env => {
      # macOS needs /usr/local/bin as hg cannot be installed in /bin or
      # /usr/bin
      'PATH' => '/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin',
    },
  )
  c.run_command
  # If the user asked us not to fail, let them handle error reporting
  if c.error? && !nofail
    # Let's make sure the error goes to the logs
    @logger.error("#{@bin} failed: #{c.format_for_exception}")
    # if our logger is STDOUT, we'll double log when we throw
    # the exception, but that's OK
    c.error!
  end
  c
end