Sha256: 15259adeec658fd02ad7fe47ff598d53844857a91caa7892e0c7e72cc2a91324

Contents?: true

Size: 1.63 KB

Versions: 145

Compression:

Stored size: 1.63 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/core_ext'

module EacCli
  class Definition
    class BaseOption
      require_sub __FILE__

      class << self
        def from_args(args)
          p = ::EacCli::Definition::BaseOption::InitializeArgsParser.new(args)
          new(p.short, p.long, p.description, p.options)
        end
      end

      DEFAULT_REQUIRED = false

      enable_listable
      enable_abstract_methods :build_value, :default_value
      lists.add_symbol :option, :default, :optional, :usage, :repeat, :required
      common_constructor :short, :long, :description, :options, default: [{}] do
        raise 'Nor short neither long selector was set' if short.blank? && long.blank?

        self.options = ::EacCli::Definition::BaseOption.lists.option.hash_keys_validate!(
          options.symbolize_keys
        )
      end

      def default_value
        default_value? ? options[OPTION_DEFAULT] : default_default_value
      end

      def default_value?
        options.key?(OPTION_DEFAULT)
      end

      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

      def repeat?
        options[OPTION_REPEAT]
      end

      def required?
        return true if options.key?(:required) && options.fetch(:required)
        return false if options.key?(:optional) && options.fetch(:optional)

        DEFAULT_REQUIRED
      end

      def to_s
        "#{self.class.name.demodulize}[#{identifier}]"
      end

      def show_on_usage?
        options[:usage]
      end
    end
  end
end

Version data entries

145 entries across 145 versions & 4 rubygems

Version Path
eac_cli-0.32.0 lib/eac_cli/definition/base_option.rb
eac_tools-0.63.0 sub/eac_cli/lib/eac_cli/definition/base_option.rb
eac_tools-0.62.1 sub/eac_cli/lib/eac_cli/definition/base_option.rb
eac_cli-0.31.0 lib/eac_cli/definition/base_option.rb
eac_tools-0.62.0 sub/eac_cli/lib/eac_cli/definition/base_option.rb
eac_tools-0.61.1 sub/eac_cli/lib/eac_cli/definition/base_option.rb
eac_tools-0.61.0 sub/eac_cli/lib/eac_cli/definition/base_option.rb
eac_tools-0.60.3 sub/eac_cli/lib/eac_cli/definition/base_option.rb
eac_tools-0.60.2 sub/eac_cli/lib/eac_cli/definition/base_option.rb
eac_tools-0.60.1 sub/eac_cli/lib/eac_cli/definition/base_option.rb
eac_tools-0.60.0 sub/eac_cli/lib/eac_cli/definition/base_option.rb
eac_tools-0.59.0 sub/eac_cli/lib/eac_cli/definition/base_option.rb
eac_tools-0.58.0 sub/eac_cli/lib/eac_cli/definition/base_option.rb
eac_tools-0.57.0 sub/eac_cli/lib/eac_cli/definition/base_option.rb
eac_tools-0.56.1 sub/eac_cli/lib/eac_cli/definition/base_option.rb
eac_tools-0.56.0 sub/eac_cli/lib/eac_cli/definition/base_option.rb
eac_tools-0.55.7 sub/eac_cli/lib/eac_cli/definition/base_option.rb
eac_tools-0.55.6 sub/eac_cli/lib/eac_cli/definition/base_option.rb
eac_tools-0.55.5 sub/eac_cli/lib/eac_cli/definition/base_option.rb
eac_tools-0.55.4 sub/eac_cli/lib/eac_cli/definition/base_option.rb