Class: Clamp::Option::Definition

Inherits:
Attribute::Definition show all
Defined in:
lib/clamp/option/definition.rb

Instance Attribute Summary collapse

Attributes inherited from Attribute::Definition

#description, #environment_variable

Instance Method Summary collapse

Methods inherited from Attribute::Definition

#append_method, #attribute_name, #default_method, #default_value, #help, #help_rhs, #hidden?, #ivar_name, #multivalued?, #of, #option_missing_message, #required?, #write_method

Constructor Details

#initialize(switches, type, description, options = {}) ⇒ Definition

Returns a new instance of Definition.

Raises:

  • (ArgumentError)


9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/clamp/option/definition.rb', line 9

def initialize(switches, type, description, options = {})
  @switches = Array(switches)
  @type = type
  @description = description
  super(options)
  @multivalued = options[:multivalued]
  return unless options.key?(:required)
  @required = options[:required]
  # Do some light validation for conflicting settings.
  raise ArgumentError, "Specifying a :default value with :required doesn't make sense" if options.key?(:default)
  raise ArgumentError, "A required flag (boolean) doesn't make sense." if type == :flag
end

Instance Attribute Details

#switchesObject (readonly)

Returns the value of attribute switches.



22
23
24
# File 'lib/clamp/option/definition.rb', line 22

def switches
  @switches
end

#typeObject (readonly)

Returns the value of attribute type.



22
23
24
# File 'lib/clamp/option/definition.rb', line 22

def type
  @type
end

Instance Method Details

#default_conversion_blockObject



56
57
58
# File 'lib/clamp/option/definition.rb', line 56

def default_conversion_block
  Clamp.method(:truthy?) if flag?
end

#extract_value(switch, arguments) ⇒ Object



48
49
50
51
52
53
54
# File 'lib/clamp/option/definition.rb', line 48

def extract_value(switch, arguments)
  if flag?
    flag_value(switch)
  else
    arguments.shift
  end
end

#flag?Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/clamp/option/definition.rb', line 32

def flag?
  @type == :flag
end

#flag_value(switch) ⇒ Object



36
37
38
# File 'lib/clamp/option/definition.rb', line 36

def flag_value(switch)
  !(switch =~ /^--no-(.*)/ && switches.member?("--\[no-\]#{Regexp.last_match(1)}"))
end

#handles?(switch) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/clamp/option/definition.rb', line 28

def handles?(switch)
  recognised_switches.member?(switch)
end

#help_lhsObject



60
61
62
63
64
# File 'lib/clamp/option/definition.rb', line 60

def help_lhs
  lhs = switches.join(", ")
  lhs += " " + type unless flag?
  lhs
end

#long_switchObject



24
25
26
# File 'lib/clamp/option/definition.rb', line 24

def long_switch
  switches.find { |switch| switch =~ /^--/ }
end

#read_methodObject



40
41
42
43
44
45
46
# File 'lib/clamp/option/definition.rb', line 40

def read_method
  if flag?
    super + "?"
  else
    super
  end
end