Sha256: d2d62b0e390dc2d9daf6206fe439483f26c518a536c8d58a0649b642f8c4eb1e

Contents?: true

Size: 1.96 KB

Versions: 6

Compression:

Stored size: 1.96 KB

Contents

# frozen_string_literal: true

require 'eac_cli/definition/option_or_positional'
require 'eac_ruby_utils/core_ext'

module EacCli
  class Definition
    # @abstract
    class Option < ::EacCli::Definition::OptionOrPositional
      require_sub __FILE__

      class << self
        # @param args [Enumerable<String>]
        # @return [EacCli::Definition::Option]
        def from_args(args)
          p = ::EacCli::Definition::Option::InitializeArgsParser.new(args)
          new(p.short, p.long, p.description, p.options)
        end
      end

      DEFAULT_REQUIRED = false

      enable_abstract_methods
      lists.add_symbol :option, *OPTION_LIST, :default, :usage

      # @!method initialize(short, long, description, options = {})
      # @param short [String]
      # @param long [String]
      # @param description [String]
      # @param options [Hash<Symbol, Object>]
      # @raise [EacCli::Definition::Error]
      common_constructor :short, :long, :description, :options, default: [{}] do
        validate
        self.options = ::EacCli::Definition::Option.lists.option.hash_keys_validate!(
          options.symbolize_keys
        )
      end

      # @return [Object]
      def default_value
        default_value? ? options[OPTION_DEFAULT] : default_default_value
      end

      # @return [Boolean]
      def default_value?
        options.key?(OPTION_DEFAULT)
      end

      # @return [Symbol]
      # @raise [EacCli::Definition::Error] If no short or long option is provided.
      def identifier
        [long, short].each do |v|
          v.to_s.if_present { |vv| return vv.variableize.to_sym }
        end

        raise('No short or long option to build identifier')
      end

      # @return [Boolean]
      def show_on_usage?
        options[:usage]
      end

      private

      # @return [void]
      # @raise [EacCli::Definition::Error]
      def validate
        raise 'Nor short neither long selector was set' if short.blank? && long.blank?
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
eac_cli-0.42.0 lib/eac_cli/definition/option.rb
eac_cli-0.40.1 lib/eac_cli/definition/option.rb
eac_cli-0.40.0 lib/eac_cli/definition/option.rb
eac_cli-0.39.0 lib/eac_cli/definition/option.rb
eac_cli-0.38.1 lib/eac_cli/definition/option.rb
eac_tools-0.82.0 sub/eac_cli/lib/eac_cli/definition/option.rb