Class: Slop::Commands

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/slop/commands.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config = {}, &block) ⇒ Commands

Create a new instance of Slop::Commands and optionally build Slop instances via a block. Any configuration options used in this method will be the default configuration options sent to each Slop object created.

config - An optional configuration Hash. block - Optional block used to define commands.



15
16
17
18
19
20
21
22
23
# File 'lib/slop/commands.rb', line 15

def initialize(config = {}, &block)
  @config = config
  @commands = {}
  @banner = nil

  if block_given?
    block.arity == 1 ? yield(self) : instance_eval(&block)
  end
end

Instance Attribute Details

Optionally set the banner for this command help output.

banner - The String text to set the banner.

Returns the String banner if one is set.



30
31
32
33
# File 'lib/slop/commands.rb', line 30

def banner(banner = nil)
  @banner = banner if banner
  @banner
end

#commandsObject (readonly)

Returns the value of attribute commands.



5
6
7
# File 'lib/slop/commands.rb', line 5

def commands
  @commands
end

#configObject (readonly)

Returns the value of attribute config.



5
6
7
# File 'lib/slop/commands.rb', line 5

def config
  @config
end

Instance Method Details

#[](key) ⇒ Object Also known as: get

Fetch the instance of Slop tied to a command.

key - The String or Symbol key used to locate this command.

Returns the Slop instance if this key is found, nil otherwise.



71
72
73
# File 'lib/slop/commands.rb', line 71

def [](key)
  commands[key.to_s]
end

#default(config = {}, &block) ⇒ Object

Add a Slop instance used when no other commands exist.

config - A Hash of configuration options to pass to Slop. block - An optional block used to pass options to Slop.

Returns the newly created Slop instance mapped to default.



52
53
54
# File 'lib/slop/commands.rb', line 52

def default(config = {}, &block)
  on('default', config, &block)
end

#each(&block) ⇒ Object

Enumerable interface.



86
87
88
# File 'lib/slop/commands.rb', line 86

def each(&block)
  @commands.each(&block)
end

#global(config = {}, &block) ⇒ Object

Add a global Slop instance.

config - A Hash of configuration options to pass to Slop. block - An optional block used to pass options to Slop.

Returns the newly created Slop instance mapped to global.



62
63
64
# File 'lib/slop/commands.rb', line 62

def global(config = {}, &block)
  on('global', config, &block)
end

#inspectObject

Returns the inspection String.



117
118
119
# File 'lib/slop/commands.rb', line 117

def inspect
  "#<Slop::Commands #{config.inspect} #{commands.values.map(&:inspect)}>"
end

#on(command, config = {}, &block) ⇒ Object

Add a Slop instance for a specific command.

command - A String or Symbol key used to identify this command. config - A Hash of configuration options to pass to Slop. block - An optional block used to pass options to Slop.

Returns the newly created Slop instance mapped to command.



42
43
44
# File 'lib/slop/commands.rb', line 42

def on(command, config = {}, &block)
  commands[command.to_s] = Slop.new(@config.merge(config), &block)
end

#parse(items = ARGV) ⇒ Object

Parse a list of items.

items - The Array of items to parse.

Returns the original Array of items.



81
82
83
# File 'lib/slop/commands.rb', line 81

def parse(items = ARGV)
  parse_items(items)
end

#parse!(items = ARGV) ⇒ Object

Parse a list of items, removing any options or option arguments found.

items - The Array of items to parse.

Returns the original Array of items with options removed.



95
96
97
# File 'lib/slop/commands.rb', line 95

def parse!(items = ARGV)
  parse_items(items, true)
end

#to_hashObject

Returns a nested Hash with Slop options and values. See Slop#to_hash.



100
101
102
# File 'lib/slop/commands.rb', line 100

def to_hash
  Hash[commands.map { |k, v| [k.to_sym, v.to_hash] }]
end

#to_sObject Also known as: help

Returns the help String.



105
106
107
108
109
110
111
112
113
# File 'lib/slop/commands.rb', line 105

def to_s
  defaults = commands.delete('default')
  globals = commands.delete('global')
  helps = commands.reject { |_, v| v.options.none? }
  helps.merge!('Global options' => globals.to_s) if globals
  helps.merge!('Other options' => defaults.to_s) if defaults
  banner = @banner ? "#{@banner}\n" : ""
  banner + helps.map { |key, opts| "  #{key}\n#{opts}" }.join("\n\n")
end