Class: CLI::Kit::Args::Definition

Inherits:
Object
  • Object
show all
Defined in:
lib/cli/kit/args/definition.rb

Defined Under Namespace

Modules: OptBase, OptValue Classes: Flag, Option, Position

Constant Summary collapse

Error =
Class.new(Args::Error)
ConflictingFlag =
Class.new(Error)
InvalidFlag =
Class.new(Error)
InvalidLookup =
Class.new(Error)
InvalidPosition =
Class.new(Error)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDefinition

: -> void



55
56
57
58
59
60
61
62
# File 'lib/cli/kit/args/definition.rb', line 55

def initialize
  @flags = []
  @options = []
  @by_short = {}
  @by_long = {}
  @by_name = {}
  @positions = []
end

Instance Attribute Details

#flagsObject (readonly)

: Array



16
17
18
# File 'lib/cli/kit/args/definition.rb', line 16

def flags
  @flags
end

#optionsObject (readonly)

: Array



19
20
21
# File 'lib/cli/kit/args/definition.rb', line 19

def options
  @options
end

#positionsObject (readonly)

: Array



22
23
24
# File 'lib/cli/kit/args/definition.rb', line 22

def positions
  @positions
end

Instance Method Details

#add_flag(name, short: nil, long: nil, desc: nil) ⇒ Object

: (Symbol name, ?short: String?, ?long: String?, ?desc: String?) -> void



25
26
27
28
29
30
# File 'lib/cli/kit/args/definition.rb', line 25

def add_flag(name, short: nil, long: nil, desc: nil)
  short, long = strip_prefixes_and_validate(short, long)
  flag = Flag.new(name: name, short: short, long: long, desc: desc)
  add_resolution(flag)
  @flags << flag
end

#add_option(name, short: nil, long: nil, desc: nil, default: nil, required: false, multi: false) ⇒ Object

: (Symbol name, ?short: String?, ?long: String?, ?desc: String?, ?default: (String | ^-> String | Array | ^-> Array)?, ?required: bool, ?multi: bool) -> void



33
34
35
36
37
38
39
40
41
# File 'lib/cli/kit/args/definition.rb', line 33

def add_option(name, short: nil, long: nil, desc: nil, default: nil, required: false, multi: false)
  short, long = strip_prefixes_and_validate(short, long)
  option = Option.new(
    name: name, short: short, long: long, desc: desc, default: default,
    required: required, multi: multi
  )
  add_resolution(option)
  @options << option
end

#add_position(name, required:, multi:, desc: nil, default: nil, skip: nil) ⇒ Object

: (Symbol name, required: bool, multi: bool, ?desc: String?, ?default: (String | ^-> String)?, ?skip: (^-> bool | ^(String arg0) -> bool)?) -> void



44
45
46
47
48
49
50
51
52
# File 'lib/cli/kit/args/definition.rb', line 44

def add_position(name, required:, multi:, desc: nil, default: nil, skip: nil)
  position = Position.new(
    name: name, desc: desc, required: required, multi: multi,
    default: default, skip: skip
  )
  validate_order(position)
  add_name_resolution(position)
  @positions << position
end

#lookup_flag(name) ⇒ Object

: (Symbol name) -> Flag?



179
180
181
182
183
184
# File 'lib/cli/kit/args/definition.rb', line 179

def lookup_flag(name)
  flagopt = @by_name[name]
  if flagopt.class == Flag
    flagopt
  end
end

#lookup_long(name) ⇒ Object

: (String name) -> (Flag | Option)?

Raises:



202
203
204
205
206
# File 'lib/cli/kit/args/definition.rb', line 202

def lookup_long(name)
  raise(InvalidLookup, "invalid '-' prefix") if name.start_with?('-')

  @by_long[name]
end

#lookup_option(name) ⇒ Object

: (Symbol name) -> Option?



187
188
189
190
191
192
# File 'lib/cli/kit/args/definition.rb', line 187

def lookup_option(name)
  flagopt = @by_name[name]
  if flagopt.class == Option
    flagopt
  end
end

#lookup_position(name) ⇒ Object

: (Symbol name) -> Position?



209
210
211
212
213
214
# File 'lib/cli/kit/args/definition.rb', line 209

def lookup_position(name)
  position = @by_name[name]
  if position.class == Position
    position
  end
end

#lookup_short(name) ⇒ Object

: (String name) -> (Flag | Option)?

Raises:



195
196
197
198
199
# File 'lib/cli/kit/args/definition.rb', line 195

def lookup_short(name)
  raise(InvalidLookup, "invalid '-' prefix") if name.start_with?('-')

  @by_short[name]
end