Class: Clin::CommandOptionsMixin

Inherits:
Object
  • Object
show all
Defined in:
lib/clin/command_options_mixin.rb

Overview

Template class for reusable options and commands It provide the method to add options to a command

Direct Known Subclasses

Command, GeneralOption

Class Method Summary collapse

Class Method Details

.add_option(option) ⇒ Object

Add a new option.

Parameters:



70
71
72
73
# File 'lib/clin/command_options_mixin.rb', line 70

def self.add_option(option)
  # Need to use += instead of << otherwise the parent class will also be changed

  self.options += [option]
end

.execute_general_options(options) ⇒ Object

Call #execute on each of the general options. This is called during the command initialization e.g. A verbose general option execute would be: “‘ def execute(params)

MyApp.verbose = true if params[:verbose]

end “‘



112
113
114
115
116
# File 'lib/clin/command_options_mixin.rb', line 112

def self.execute_general_options(options)
  general_options.each do |_cls, gopts|
    gopts.execute(options)
  end
end

.flag_option(name, description, **config, &block) ⇒ Object

For an option that does not have an argument Same as .option except it will default argument to false “‘

option :verbose, 'Use verbose' #=> -v --verbose will be added to the option of this command

“‘



51
52
53
# File 'lib/clin/command_options_mixin.rb', line 51

def self.flag_option(name, description, **config, &block)
  add_option Clin::Option.new(name, description, **config.merge(argument: false), &block)
end

.general_option(option_cls, config = {}) ⇒ Object

Add a general option

Parameters:

  • option_cls (Class<GeneralOption>)

    Class inherited from GeneralOption

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

    General option config. Check the general option config.



78
79
80
81
# File 'lib/clin/command_options_mixin.rb', line 78

def self.general_option(option_cls, config = {})
  option_cls = option_cls.constantize if option_cls.is_a? String
  self.general_options = general_options.merge(option_cls => option_cls.new(config))
end

.list_flag_option(name, description, **config) ⇒ Object

Add a list options that don’t take arguments Same as .list_option but set argument to false



64
65
66
# File 'lib/clin/command_options_mixin.rb', line 64

def self.list_flag_option(name, description, **config)
  add_option Clin::OptionList.new(name, description, **config.merge(argument: false))
end

.list_option(name, description, **config) ⇒ Object

Add a list option.



57
58
59
# File 'lib/clin/command_options_mixin.rb', line 57

def self.list_option(name, description, **config)
  add_option Clin::OptionList.new(name, description, **config)
end

.opt_option(*args, &block) ⇒ Object

Add an option “‘

option :require, '-r', '--require [LIBRARY]', 'Require the library'
option '-h', '--helper', 'Show the help' do
  puts opts
  exit
end

“‘

Parameters:

  • args

    list of arguments.

    • First argument must be the name if no block is given. It will set automatically read the value into the hash with name as key

    • The remaining arguments are OptionsParser#on arguments



25
26
27
# File 'lib/clin/command_options_mixin.rb', line 25

def self.opt_option(*args, &block)
  add_option Clin::Option.new(*args, &block)
end

.option(name, description, **config, &block) ⇒ Object

Add an option. Helper method that just create a new Clin::Option with the argument then call add_option “‘

option :show, 'Show some message'
# => -s --show              SHOW Show some message
option :require, 'Require a library', short: false, optional: true, argument: 'LIBRARY'
# => --require [LIBRARY]    Require a library
option :help, 'Show the help', argument: false do
  puts opts
  exit
end
# => -h --help              Show the help

“‘



42
43
44
# File 'lib/clin/command_options_mixin.rb', line 42

def self.option(name, description, **config, &block)
  add_option Clin::Option.new(name, description, **config, &block)
end

.register_options(opts, out) ⇒ Object

To be called inside OptionParser block Extract the option in the command line using the OptionParser and map it to the out map.

Parameters:

  • opts (OptionParser)
  • out (Hash)

    Where the options shall be extracted



94
95
96
97
98
99
100
101
102
# File 'lib/clin/command_options_mixin.rb', line 94

def self.register_options(opts, out)
  options.each do |option|
    option.register(opts, out)
  end

  general_options.each do |_cls, option|
    option.class.register_options(opts, out)
  end
end

.remove_general_option(option_cls) ⇒ Object

Remove a general option Might be useful if a parent added the option but is not needed in this child.



85
86
87
88
# File 'lib/clin/command_options_mixin.rb', line 85

def self.remove_general_option(option_cls)
  option_cls = option_cls.constantize if option_cls.is_a? String
  self.general_options = general_options.except(option_cls)
end