class EacRubyUtils::Envs::Executable

def auto_validate?

def auto_validate?
  options.key?(OPTION_AUTO_VALIDATE) ? options[OPTION_AUTO_VALIDATE] : DEFAULT_AUTO_VALIDATE
end

def check_args

def check_args
  options[OPTION_CHECK_ARGS]
end

def command(*command_args)

def command(*command_args)
  validate! if auto_validate?
  env.command(*executable_args, *command_args)
end

def executable_args

def executable_args
  executable_args_from_envvar || executable_args_from_options || executable_args_from_name
end

def executable_args_envvar

def executable_args_envvar
  "#{name}_command".variableize.upcase
end

def executable_args_from_envvar

def executable_args_from_envvar
  ENV[executable_args_envvar].if_present { |v| ::Shellwords.split(v) }
end

def executable_args_from_name

Returns:
  • (Enumerable) -
def executable_args_from_name
  ::Shellwords.split(name)
end

def executable_args_from_options

Returns:
  • (Enumerable) -
def executable_args_from_options
  options[OPTION_EXEC_ARGS].if_present do |v|
    v.is_a?(::Enumerable) ? v.map(&:to_s) : ::Shellwords.split(v.to_s)
  end
end

def exist?

def exist?
  exist
end

def exist_uncached

def exist_uncached
  env.command(*executable_args, *check_args).execute!
  true
rescue Errno::ENOENT
  false
end

def initialize(env, name, *check_args)

def initialize(env, name, *check_args)
  @env = env
  @name = name
  self.options = self.class.lists.option.hash_keys_validate!(check_args.extract_options!)
  options[OPTION_CHECK_ARGS] = check_args unless options.key?(OPTION_CHECK_ARGS)
  options.freeze
end

def validate

def validate
  return nil if exist?
  "Program \"#{::Shellwords.join(executable_args)}\" not found in environment #{env}"
end

def validate!

def validate!
  message = validate
  raise ProgramNotFoundError, message if message
end