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)


13
14
15
# File 'lib/eac_cli/definition/alternative.rb', line 13

def any_opt
  @any_opt = true
end

#any_option?Boolean

Returns:

  • (Boolean)


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

def any_option?
  @any_opt ? true : false
end

#any_options_optionEacCli::Definition::BooleanOption



23
24
25
26
27
28
# File 'lib/eac_cli/definition/alternative.rb', line 23

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



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

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

#bool_opt(*args) ⇒ Object



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

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

#optionsObject



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

def options
  options_set.to_a
end

#options_argument(enable) ⇒ Object



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

def options_argument(enable)
  @options_argument = enable

  self
end

#options_argument?Boolean

Returns:

  • (Boolean)


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

def options_argument?
  @options_argument ? true : false
end

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



52
53
54
55
56
# File 'lib/eac_cli/definition/alternative.rb', line 52

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



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

def positional
  pos_set.to_a
end

#positional_arguments_blocked_reason(new_pos_arg) ⇒ Object



62
63
64
65
66
67
68
69
70
71
# File 'lib/eac_cli/definition/alternative.rb', line 62

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



73
74
75
76
77
# File 'lib/eac_cli/definition/alternative.rb', line 73

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)


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

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