Class: Rbcli::Command

Inherits:
Object
  • Object
show all
Defined in:
lib/rbcli/engine/command.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.action(&block) ⇒ Object



29
# File 'lib/rbcli/engine/command.rb', line 29

def self.action █        @action = block end

.add_command(name, klass) ⇒ Object



12
13
14
# File 'lib/rbcli/engine/command.rb', line 12

def self.add_command name, klass
  @commands[name.downcase] = klass.new
end

.commandsObject



16
17
18
# File 'lib/rbcli/engine/command.rb', line 16

def self.commands
  @commands
end

.config_default(*params) ⇒ Object



49
50
51
# File 'lib/rbcli/engine/command.rb', line 49

def self.config_default *params
  Rbcli::Config::add_default *params
end

.config_defaults(filename) ⇒ Object



45
46
47
# File 'lib/rbcli/engine/command.rb', line 45

def self.config_defaults filename
  Rbcli::Config::add_defaults filename
end

.description(desc) ⇒ Object

Interface Functions



23
# File 'lib/rbcli/engine/command.rb', line 23

def self.description desc;     @desc = desc end

.descriptions(indent_size, justification) ⇒ Object

Returns all descriptions for display in CLI help



72
73
74
75
76
77
78
79
80
# File 'lib/rbcli/engine/command.rb', line 72

def self.descriptions indent_size, justification
  #descmap = @commands.map { |name, klass| [name, klass.description] }.to_h
  @commands.map do |name, cmdobj|
    desc = ''
    indent_size.times { desc << ' ' }
    desc << name.ljust(justification)
    desc << cmdobj.description
  end.join("\n")
end

.inherited(subklass) ⇒ Object



8
9
10
# File 'lib/rbcli/engine/command.rb', line 8

def self.inherited subklass
  @commands[subklass.name.downcase] = subklass.new
end

.parameter(name, description, type: :boolean, default: nil, required: false, permitted: nil) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
# File 'lib/rbcli/engine/command.rb', line 32

def self.parameter name, description, type: :boolean, default: nil, required: false, permitted: nil
  default ||= false if (type == :boolean || type == :bool || type == :flag)
  @paramlist ||= {}
  @paramlist[name.to_sym] = {
      description: description,
      type: type,
      default: default,
      required: required,
      permitted: permitted
  }
end

.runcmd(cmd, local_params, cliopts) ⇒ Object

Run a given command



60
61
62
63
64
65
66
67
# File 'lib/rbcli/engine/command.rb', line 60

def self.runcmd cmd, local_params, cliopts
  args = local_params.delete :args
  params = local_params
  global_opts = cliopts
  config = Rbcli::config

  @commands[cmd].action.call params, args, global_opts, config
end

.usage(usage) ⇒ Object



26
# File 'lib/rbcli/engine/command.rb', line 26

def self.usage usage;          @usage = usage end

Instance Method Details

#actionObject



30
# File 'lib/rbcli/engine/command.rb', line 30

def      action;               self.class.instance_variable_get :@action end

#descriptionObject



24
# File 'lib/rbcli/engine/command.rb', line 24

def      description;          self.class.instance_variable_get :@desc end

#paramlistObject



43
# File 'lib/rbcli/engine/command.rb', line 43

def      paramlist;               self.class.instance_variable_get :@paramlist end

#parseopts(*args) ⇒ Object

This method reads the parameters provided by the class and parses them from the CLI



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/rbcli/engine/command.rb', line 85

def parseopts *args
  params = paramlist
  command_name = self.class.name.split('::')[-1].downcase
  command_desc = description
  command_usage = usage
  optx = Trollop::options do
    data = Rbcli.configuration
    banner "\#{data[:description]}\nSelected Command:\n     \#{command_name.ljust(21)}\#{command_desc}\n\nUsage:\n     \#{data[:scriptname]} [options] \#{command_name} [parameters]\n\n\#{command_usage}\n\nCommand-specific Parameters:\n    EOS\n    params.each do |name, opts|\n      opt name, opts[:description], type: opts[:type], default: opts[:default], required: opts[:required], permitted: opts[:permitted]\n    end if params.is_a? Hash\n  end\n  optx[:args] = ARGV\n  optx\nend\n"

#usageObject



27
# File 'lib/rbcli/engine/command.rb', line 27

def      usage;                self.class.instance_variable_get :@usage end