Class: Rbcli::Command

Inherits:
Object
  • Object
show all
Defined in:
lib/rbcli/engine/command.rb,
lib/rbcli/scriptwrapping/scriptwrapper.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



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

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

.extern(path: nil, envvars: nil, &block) ⇒ Object



2
3
4
5
# File 'lib/rbcli/scriptwrapping/scriptwrapper.rb', line 2

def self.extern path: nil, envvars: nil, &block
	block = nil unless block_given?
	@extern = Rbcli::Scriptwrapper.new path, envvars, block
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

Raises:

  • (Exception)


60
61
62
63
64
65
66
67
68
69
# 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

	raise Exception.new("Command #{cmd} has both an extern and action defined. Usage is limiated to one at a time.") if @commands[cmd].extern and @commands[cmd].action
	@commands[cmd].extern.execute params, args, global_opts, config unless @commands[cmd].extern.nil?
	@commands[cmd].action.call params, args, global_opts, config unless @commands[cmd].action.nil?
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

#externObject



7
8
9
10
# File 'lib/rbcli/scriptwrapping/scriptwrapper.rb', line 7

def extern;
	@extern ||= nil
	self.class.instance_variable_get :@extern
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



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

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 <<-EOS
#{data[:description]}
Selected Command:
     #{command_name.ljust(21)}#{command_desc}

Usage:
     #{data[:scriptname]} [options] #{command_name} [parameters]

#{command_usage}

Command-specific Parameters:
		EOS
		params.each do |name, opts|
			opt name, opts[:description], type: opts[:type], default: opts[:default], required: opts[:required], permitted: opts[:permitted]
		end if params.is_a? Hash
	end
	optx[:args] = ARGV
	optx
end

#usageObject



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

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