Class: Slop::Option

Inherits:
Object
  • Object
show all
Defined in:
lib/slop/option.rb

Constant Summary collapse

DEFAULT_CONFIG =
{
  help: true,
  tail: false,
  underscore_flags: true,
  required: false,
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(flags, desc, **config, &block) ⇒ Option

Returns a new instance of Option.



30
31
32
33
34
35
36
# File 'lib/slop/option.rb', line 30

def initialize(flags, desc, **config, &block)
  @flags  = flags
  @desc   = desc
  @config = DEFAULT_CONFIG.merge(config)
  @block  = block
  reset
end

Instance Attribute Details

#blockObject (readonly)

A custom proc that yields the option value when it’s executed.



25
26
27
# File 'lib/slop/option.rb', line 25

def block
  @block
end

#configObject (readonly)

A Hash of configuration options.



17
18
19
# File 'lib/slop/option.rb', line 17

def config
  @config
end

#countObject (readonly)

An Integer count for the total times this option has been executed.



21
22
23
# File 'lib/slop/option.rb', line 21

def count
  @count
end

#descObject (readonly)

A custom description used for the help text.



14
15
16
# File 'lib/slop/option.rb', line 14

def desc
  @desc
end

#flagsObject (readonly)

An Array of flags this option matches.



11
12
13
# File 'lib/slop/option.rb', line 11

def flags
  @flags
end

#valueObject

Returns the value for this option. Falls back to the default (or nil).



91
92
93
# File 'lib/slop/option.rb', line 91

def value
  @value || default_value
end

Instance Method Details

#call(_value) ⇒ Object

This method is called immediately when an option is found. Override it in sub-classes.



67
68
69
70
# File 'lib/slop/option.rb', line 67

def call(_value)
  raise NotImplementedError,
    "you must override the `call' method for option #{self.class}"
end

#default_valueObject

Returns the default value for this option (default is nil).



96
97
98
# File 'lib/slop/option.rb', line 96

def default_value
  config[:default]
end

#ensure_call(value) ⇒ Object

Since ‘call()` can be used/overriden in subclasses, this method is used to do general tasks like increment count. This ensures you don’t have to call ‘super` when overriding `call()`. It’s used in the Parser.



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/slop/option.rb', line 49

def ensure_call(value)
  @count += 1

  if value.nil? && expects_argument?
    if default_value
      @value = default_value
    elsif !suppress_errors?
      raise Slop::MissingArgument.new("missing argument for #{flag}", flags)
    end
  else
    @value = call(value)
  end

  block.call(@value) if block.respond_to?(:call)
end

#expects_argument?Boolean

Override this if this option type does not expect an argument (i.e a boolean option type).

Returns:

  • (Boolean)


80
81
82
# File 'lib/slop/option.rb', line 80

def expects_argument?
  true
end

#finish(_result) ⇒ Object

By default this method does nothing. It’s called when all options have been parsed and allows you to mutate the ‘@value` attribute according to other options.



75
76
# File 'lib/slop/option.rb', line 75

def finish(_result)
end

#flagObject

Returns all flags joined by a comma. Used by the help string.



111
112
113
# File 'lib/slop/option.rb', line 111

def flag
  flags.join(", ")
end

#help?Boolean

Returns true if this option should be displayed in help text.

Returns:

  • (Boolean)


128
129
130
# File 'lib/slop/option.rb', line 128

def help?
  config[:help]
end

#keyObject

Returns the last key as a symbol. Used in Options.to_hash.



116
117
118
119
120
# File 'lib/slop/option.rb', line 116

def key
  key = config[:key] || flags.last.sub(/\A--?/, '')
  key = key.tr '-', '_' if underscore_flags?
  key.to_sym
end

#null?Boolean

Override this if you want to ignore the return value for an option (i.e so Result#to_hash does not include it).

Returns:

  • (Boolean)


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

def null?
  false
end

#required?Boolean

Returns true if an exception should be raised when this option isn’t supplied.

Returns:

  • (Boolean)


106
107
108
# File 'lib/slop/option.rb', line 106

def required?
  config[:required]
end

#resetObject

Reset the option count and value. Used when calling .reset on the Parser.



40
41
42
43
# File 'lib/slop/option.rb', line 40

def reset
  @value = nil
  @count = 0
end

#suppress_errors?Boolean

Returns true if we should ignore errors that cause exceptions to be raised.

Returns:

  • (Boolean)


101
102
103
# File 'lib/slop/option.rb', line 101

def suppress_errors?
  config[:suppress_errors]
end

#tailObject

Returns 1 if this option should be added to the tail of the help text. Used for sorting.



139
140
141
# File 'lib/slop/option.rb', line 139

def tail
  tail? ? 1 : -1
end

#tail?Boolean

Returns true if this option should be added to the tail of the help text.

Returns:

  • (Boolean)


133
134
135
# File 'lib/slop/option.rb', line 133

def tail?
  config[:tail]
end

#to_s(offset: 0) ⇒ Object

Returns the help text for this option (flags and description).



144
145
146
# File 'lib/slop/option.rb', line 144

def to_s(offset: 0)
  "%-#{offset}s  %s" % [flag, desc]
end

#underscore_flags?Boolean

Returns true if this option should be displayed with dashes transformed into underscores.

Returns:

  • (Boolean)


123
124
125
# File 'lib/slop/option.rb', line 123

def underscore_flags?
  config[:underscore_flags]
end