module Clamp::Subcommand::Declaration

Subcommand declaration methods.

Public Instance Methods

default_subcommand(*args, &block) click to toggle source
# File lib/clamp/subcommand/declaration.rb, line 48
def default_subcommand(*args, &block)
  if args.empty?
    @default_subcommand ||= false
  else
    $stderr.puts "WARNING: Clamp default_subcommand syntax has changed; check the README."
    $stderr.puts "  (from #{caller(1..1).first})"
    self.default_subcommand = args.first
    subcommand(*args, &block)
  end
end
default_subcommand=(name) click to toggle source
# File lib/clamp/subcommand/declaration.rb, line 43
def default_subcommand=(name)
  raise Clamp::DeclarationError, "default_subcommand must be defined before subcommands" if has_subcommands?
  @default_subcommand = name
end
find_subcommand(name) click to toggle source
# File lib/clamp/subcommand/declaration.rb, line 27
def find_subcommand(name)
  recognised_subcommands.find { |sc| sc.is_called?(name) }
end
find_subcommand_class(*names) click to toggle source
# File lib/clamp/subcommand/declaration.rb, line 31
def find_subcommand_class(*names)
  names.inject(self) do |command_class, name|
    return nil unless command_class
    subcommand = command_class.find_subcommand(name)
    subcommand.subcommand_class if subcommand
  end
end
has_subcommands?() click to toggle source
# File lib/clamp/subcommand/declaration.rb, line 23
def has_subcommands?
  !recognised_subcommands.empty?
end
inheritable_attributes() click to toggle source
# File lib/clamp/subcommand/declaration.rb, line 39
def inheritable_attributes
  recognised_options + inheritable_parameters
end
recognised_subcommands() click to toggle source
# File lib/clamp/subcommand/declaration.rb, line 13
def recognised_subcommands
  @recognised_subcommands ||= []
end
subcommand(name, description, subcommand_class = self, &block) click to toggle source
# File lib/clamp/subcommand/declaration.rb, line 17
def subcommand(name, description, subcommand_class = self, &block)
  subcommand_class = Class.new(subcommand_class, &block) if block
  declare_subcommand_parameters unless has_subcommands?
  recognised_subcommands << Subcommand::Definition.new(name, description, subcommand_class)
end

Private Instance Methods

declare_subcommand_parameters() click to toggle source
# File lib/clamp/subcommand/declaration.rb, line 61
def declare_subcommand_parameters
  if default_subcommand
    parameter "[SUBCOMMAND]", "subcommand",
              attribute_name: :subcommand_name,
              default: default_subcommand,
              inheritable: false
  else
    parameter "SUBCOMMAND", "subcommand",
              attribute_name: :subcommand_name,
              required: false,
              inheritable: false
  end
  remove_method :default_subcommand_name if method_defined?(:default_subcommand_name)
  parameter "[ARG] ...", "subcommand arguments",
            attribute_name: :subcommand_arguments,
            inheritable: false
end