Class: Textus::CLI::Group

Inherits:
Verb
  • Object
show all
Defined in:
lib/textus/cli/group.rb

Direct Known Subclasses

ExtensionGroup, KeyGroup, SchemaGroup

Class Attribute Summary collapse

Attributes inherited from Verb

#positional

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Verb

#emit, #initialize, option, options

Constructor Details

This class inherits a constructor from Textus::CLI::Verb

Class Attribute Details

.cli_nameObject



9
10
11
# File 'lib/textus/cli/group.rb', line 9

def cli_name
  @cli_name || raise("subclass must define cli_name")
end

Class Method Details

.inherited(subclass) ⇒ Object



15
16
17
18
# File 'lib/textus/cli/group.rb', line 15

def inherited(subclass)
  super
  subclass.instance_variable_set(:@subcommands, {})
end

.needs_store?Boolean

Returns:

  • (Boolean)


20
21
22
23
# File 'lib/textus/cli/group.rb', line 20

def needs_store?
  # Delegate to the matched subcommand at parse time; default true.
  true
end

.subcommandsObject



5
6
7
# File 'lib/textus/cli/group.rb', line 5

def subcommands
  @subcommands ||= {}
end

Instance Method Details

#call(store) ⇒ Object



46
47
48
# File 'lib/textus/cli/group.rb', line 46

def call(store)
  @sub.call(@sub_klass.needs_store? ? store : nil)
end

#parse(argv) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/textus/cli/group.rb', line 26

def parse(argv)
  subname = argv.shift
  if subname.nil?
    raise UsageError.new(
      "#{self.class.cli_name} requires a subcommand: #{self.class.subcommands.keys.join(", ")}",
    )
  end

  @sub_klass = self.class.subcommands[subname]
  unless @sub_klass
    raise UsageError.new(
      "unknown #{self.class.cli_name} subcommand '#{subname}'. " \
      "Valid: #{self.class.subcommands.keys.join(", ")}",
    )
  end

  @sub = @sub_klass.new(stdin: @stdin, stdout: @stdout, stderr: @stderr, cwd: @cwd)
  @sub.parse(argv)
end