Module: Bovem::CommandMethods::Children

Included in:
Bovem::Command
Defined in:
lib/bovem/command.rb

Overview

Methods to manage options and subcommands.

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#commandsHashWithIndifferentAccess (readonly)

Returns the list of subcommands of this command.

Returns:

  • (HashWithIndifferentAccess)

    The list of subcommands of this command.



181
182
183
# File 'lib/bovem/command.rb', line 181

def commands
  @commands
end

#optionsHashWithIndifferentAccess (readonly)

Returns the list of options of this command.

Returns:

  • (HashWithIndifferentAccess)

    The list of options of this command.



202
203
204
# File 'lib/bovem/command.rb', line 202

def options
  @options
end

Instance Method Details

#argument(value) ⇒ Object

Adds a new argument to this command.

Parameters:

  • value (String)

    The argument to add.



222
223
224
225
# File 'lib/bovem/command.rb', line 222

def argument(value)
  @args ||= []
  @args << value
end

#argumentsArray

Returns the list of arguments of this command.

Returns:

  • (Array)

    The list of arguments of this command.



230
231
232
# File 'lib/bovem/command.rb', line 230

def arguments
  @args || []
end

#clear_commandsHash

Clear all subcommands of this commands.

Returns:

  • (Hash)

    The new (empty) list of subcommands of this command.



188
189
190
# File 'lib/bovem/command.rb', line 188

def clear_commands
  @commands = {}
end

#clear_optionsHash

Clear all the options of this commands.

Returns:

  • (Hash)

    The new (empty) list of the options of this command.



208
209
210
# File 'lib/bovem/command.rb', line 208

def clear_options
  @options = {}
end

#command(name, options = {}, &block) ⇒ Command

Adds a new subcommand to this command.

Parameters:

  • name (String)

    The name of this command. Must be unique.

  • options (Hash) (defaults to: {})

    A set of options for this command.

Returns:

  • (Command)

    The newly added command.

Raises:



142
143
144
145
146
147
148
149
# File 'lib/bovem/command.rb', line 142

def command(name, options = {}, &block)
  @commands ||= HashWithIndifferentAccess.new

  options = {name: name.to_s, parent: self, application: application}.merge(options.ensure_hash)
  raise Bovem::Errors::Error.new(self, :duplicate_command, i18n.existing_command(full_name(name))) if @commands[name.to_s]

  create_command(name, options, &block)
end

#get_options(unprovided = false, application = "application_", prefix = "", *whitelist) ⇒ HashWithIndifferentAccess

Get the list of the options of this command as an hash, where the keys are the options and the values are either the user inputs or the defaults values.

If the two prefixes collides, the command options take precedence over application options.

Parameters:

  • unprovided (Boolean) (defaults to: false)

    If to include also options that were not provided by the user and that don't have any default value.

  • application (String) (defaults to: "application_")

    The prefix to use for including application's options. If falsy, only current command options will be included.

  • prefix (String) (defaults to: "")

    The prefix to add to the option of this command.

  • whitelist (Array)

    The list of options to include. By default all options are included.

Returns:

  • (HashWithIndifferentAccess)

    The requested options.



244
245
246
247
248
249
# File 'lib/bovem/command.rb', line 244

def get_options(unprovided = false, application = "application_", prefix = "", *whitelist)
  rv = HashWithIndifferentAccess.new
  rv.merge!(self.application.get_options(unprovided, nil, application, *whitelist)) if application && !is_application?
  rv.merge!(get_current_options(unprovided, prefix, whitelist))
  rv
end

#has_commands?Boolean

Check if this command has subcommands.

Returns:

  • (Boolean)

    true if this command has subcommands, false otherwise.



195
196
197
# File 'lib/bovem/command.rb', line 195

def has_commands?
  commands.length > 0
end

#has_options?Boolean

Check if this command has options.

Returns:

  • (Boolean)

    true if this command has options, false otherwise.



215
216
217
# File 'lib/bovem/command.rb', line 215

def has_options?
  options.length > 0
end

#option(name, forms = [], options = {}, &action) ⇒ Option

Adds a new option to this command.

Parameters:

  • name (String)

    The name of the option. Must be unique.

  • forms (Array) (defaults to: [])

    An array of short and long forms for this option.

  • options (Hash) (defaults to: {})

    The settings for the option.

  • action (Proc)

    An optional action to pass to the option.

Returns:

  • (Option)

    The newly added option.

See Also:



160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'lib/bovem/command.rb', line 160

def option(name, forms = [], options = {}, &action)
  name = name.ensure_string
  @options ||= HashWithIndifferentAccess.new

  if @options[name] then
    if is_application? then
      raise Bovem::Errors::Error.new(self, :duplicate_option, i18n.existing_option_global(name))
    else
      raise Bovem::Errors::Error.new(self, :duplicate_option, i18n.existing_option(name, full_name))
    end
  end

  option = Bovem::Option.new(name, forms, options, &action)
  option.parent = self
  @options[name] = option
  option
end