Sha256: 8ff93089b05a09cba7ebfe76746f833195df7acf8845ab83cd9628378bdd3951

Contents?: true

Size: 1.84 KB

Versions: 147

Compression:

Stored size: 1.84 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/listable'
require 'eac_ruby_utils/simple_cache'

module EacRubyUtils
  module Envs
    class Executable
      include ::EacRubyUtils::Listable
      include ::EacRubyUtils::SimpleCache

      lists.add_symbol :option, :check_args, :auto_validate

      DEFAULT_AUTO_VALIDATE = true

      attr_reader :env, :name, :options

      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 auto_validate?
        options.key?(OPTION_AUTO_VALIDATE) ? options[OPTION_AUTO_VALIDATE] : DEFAULT_AUTO_VALIDATE
      end

      def check_args
        options[OPTION_CHECK_ARGS]
      end

      def exist?
        exist
      end

      def validate
        return nil if exist?

        "Program \"#{::Shellwords.join(executable_args)}\" not found in environment #{env}"
      end

      def validate!
        message = validate

        raise ProgramNotFoundError, message if message
      end

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

      def executable_args
        executable_args_from_envvar || [name]
      end

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

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

      private

      attr_writer :options

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

      class ProgramNotFoundError < ::StandardError; end
    end
  end
end

Version data entries

147 entries across 147 versions & 3 rubygems

Version Path
eac_ruby_utils-0.115.0 lib/eac_ruby_utils/envs/executable.rb
eac_tools-0.65.0 sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb
eac_ruby_utils-0.114.0 lib/eac_ruby_utils/envs/executable.rb
eac_tools-0.64.0 sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb
eac_ruby_utils-0.113.0 lib/eac_ruby_utils/envs/executable.rb
eac_tools-0.63.0 sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb
eac_tools-0.62.1 sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb
eac_tools-0.62.0 sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb
eac_tools-0.61.1 sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb
eac_tools-0.61.0 sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb
eac_tools-0.60.3 sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb
eac_tools-0.60.2 sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb
eac_tools-0.60.1 sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb
eac_tools-0.60.0 sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb
eac_tools-0.59.0 sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb
eac_tools-0.58.0 sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb
eac_tools-0.57.0 sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb
eac_tools-0.56.1 sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb
eac_tools-0.56.0 sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb
eac_tools-0.55.7 sub/eac_ruby_utils/lib/eac_ruby_utils/envs/executable.rb