Class: EacCli::Definition::Alternative

Inherits:
Object
  • Object
show all
Defined in:
lib/eac_cli/definition/alternative.rb

Constant Summary collapse

ANY_OPTION_DESCRIPTION =
'ANY_OPTION'
ANY_OPTION_LONG =
'__'
ANY_OPTION_SHORT =
'_'
SUBCOMMAND_NAME_ARG =
:subcommand
SUBCOMMAND_ARGS_ARG =
:subcommand_args

Instance Method Summary collapse

Instance Method Details

#any_optBoolean

Returns:

  • (Boolean)


17
18
19
# File 'lib/eac_cli/definition/alternative.rb', line 17

def any_opt
  @any_opt = true
end

#any_option?Boolean

Returns:

  • (Boolean)


22
23
24
# File 'lib/eac_cli/definition/alternative.rb', line 22

def any_option?
  @any_opt ? true : false
end

#any_options_optionEacCli::Definition::BooleanOption



27
28
29
30
31
32
# File 'lib/eac_cli/definition/alternative.rb', line 27

def any_options_option
  @any_options_option ||= ::EacCli::Definition::BooleanOption.new(
    ANY_OPTION_SHORT, ANY_OPTION_LONG, ANY_OPTION_DESCRIPTION,
    optional: true, repeat: true, usage: false
  )
end

#arg_opt(*args) ⇒ Object



34
35
36
# File 'lib/eac_cli/definition/alternative.rb', line 34

def arg_opt(*args)
  options_set << ::EacCli::Definition::ArgumentOption.from_args(args)
end

#bool_opt(*args) ⇒ Object



38
39
40
# File 'lib/eac_cli/definition/alternative.rb', line 38

def bool_opt(*args)
  options_set << ::EacCli::Definition::BooleanOption.from_args(args)
end

#optionsObject



42
43
44
# File 'lib/eac_cli/definition/alternative.rb', line 42

def options
  options_set.to_a
end

#options_argument(enable) ⇒ Object



50
51
52
53
54
# File 'lib/eac_cli/definition/alternative.rb', line 50

def options_argument(enable)
  @options_argument = enable

  self
end

#options_argument?Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/eac_cli/definition/alternative.rb', line 46

def options_argument?
  @options_argument ? true : false
end

#pos_arg(name, arg_options = {}) ⇒ Object



56
57
58
59
60
# File 'lib/eac_cli/definition/alternative.rb', line 56

def pos_arg(name, arg_options = {})
  new_pos_arg = ::EacCli::Definition::Positional.new(name, arg_options)
  check_positional_blocked(new_pos_arg)
  pos_set << new_pos_arg
end

#positionalObject



62
63
64
# File 'lib/eac_cli/definition/alternative.rb', line 62

def positional
  pos_set.to_a
end

#positional_arguments_blocked_reason(new_pos_arg) ⇒ Object



66
67
68
69
70
71
72
73
74
75
# File 'lib/eac_cli/definition/alternative.rb', line 66

def positional_arguments_blocked_reason(new_pos_arg)
  last = pos_set.last
  return nil unless last
  return 'there are subcommands' if subcommands?
  return 'last argument repeats' if last.repeat?
  return 'new argument is required and last is optional' if
  last.optional? && new_pos_arg.if_present(&:required?)

  nil
end

#subcommandsObject



77
78
79
80
81
# File 'lib/eac_cli/definition/alternative.rb', line 77

def subcommands
  pos_arg(SUBCOMMAND_NAME_ARG, subcommand: true)
  pos_set << ::EacCli::Definition::Positional.new(SUBCOMMAND_ARGS_ARG,
                                                  optional: true, repeat: true)
end

#subcommands?Boolean

Returns:

  • (Boolean)


83
84
85
# File 'lib/eac_cli/definition/alternative.rb', line 83

def subcommands?
  pos_set.any?(&:subcommand?)
end