Class: Puppet::Interface::Option
Overview
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods included from TinyDocs
#build_synopsis, #description, #summary
Methods included from DocGen
#attr_doc, strip_whitespace
Constructor Details
#initialize(parent, *declaration, &block) ⇒ Option
This method is part of a private API.
You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of Option.
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
# File 'lib/puppet/interface/option.rb', line 13
def initialize(parent, *declaration, &block)
@parent = parent
@optparse = []
@default = nil
dups = {}
declaration.each do |item|
if item.is_a? String and item.to_s =~ /^-/ then
unless item =~ /^-[a-z]\b/ or item =~ /^--[^-]/ then
raise ArgumentError, _("%{option}: long options need two dashes (--)") % { option: item.inspect }
end
@optparse << item
name = optparse_to_optionname(item)
if Puppet.settings.include? name then
raise ArgumentError, _("%{option}: already defined in puppet") % { option: item.inspect }
end
dup = dups[name]
if dup
raise ArgumentError, _("%{option}: duplicates existing alias %{duplicate} in %{parent}") %
{ option: item.inspect, duplicate: dup.inspect, parent: @parent }
else
dups[name] = item
end
else
raise ArgumentError, _("%{option} is not valid for an option argument") % { option: item.inspect }
end
end
if @optparse.empty? then
raise ArgumentError, _("No option declarations found while building")
end
@name = optparse_to_name(@optparse.find do |a| a =~ /^--/ end || @optparse.first)
@aliases = @optparse.map { |o| optparse_to_name(o) }
@argument = @optparse.any? { |o| o =~ /[ =]/ }
if @argument and !@optparse.all? { |o| o =~ /[ =]/ } then
raise ArgumentError, _("Option %{name} is inconsistent about taking an argument") % { name: @name }
end
@optional_argument = @optparse.any? { |o| o =~ /[ =]\[/ }
if @optional_argument
raise ArgumentError, _("Options with optional arguments are not supported")
end
if @optional_argument and !@optparse.all? { |o| o =~ /[ =]\[/ } then
raise ArgumentError, _("Option %{name} is inconsistent about the argument being optional") % { name: @name }
end
end
|
Instance Attribute Details
#after_action ⇒ Object
165
166
167
|
# File 'lib/puppet/interface/option.rb', line 165
def after_action
@after_action
end
|
143
144
145
|
# File 'lib/puppet/interface/option.rb', line 143
def aliases
@aliases
end
|
#before_action ⇒ Object
153
154
155
|
# File 'lib/puppet/interface/option.rb', line 153
def before_action
@before_action
end
|
143
144
145
|
# File 'lib/puppet/interface/option.rb', line 143
def name
@name
end
|
143
144
145
|
# File 'lib/puppet/interface/option.rb', line 143
def optparse
@optparse
end
|
143
144
145
|
# File 'lib/puppet/interface/option.rb', line 143
def parent
@parent
end
|
143
144
145
|
# File 'lib/puppet/interface/option.rb', line 143
def required
@required
end
|
Instance Method Details
#__decoration_name(type) ⇒ Object
177
178
179
180
181
182
183
|
# File 'lib/puppet/interface/option.rb', line 177
def __decoration_name(type)
if @parent.is_a? Puppet::Interface::Action then
:"option #{name} from #{parent.name} #{type} decoration"
else
:"option #{name} #{type} decoration"
end
end
|
139
140
141
|
# File 'lib/puppet/interface/option.rb', line 139
def default
@default and @default.call
end
|
#default=(proc) ⇒ Object
126
127
128
129
130
131
132
133
134
135
136
137
|
# File 'lib/puppet/interface/option.rb', line 126
def default=(proc)
if required
raise ArgumentError, _("%{name} can't be optional and have a default value") % { name: self }
end
unless proc.is_a? Proc
raise ArgumentError, _("default value for %{name} is a %{class_name}, not a proc") %
{ name: self, class_name: proc.class.name.inspect }
end
@default = proc
end
|
#has_default? ⇒ Boolean
122
123
124
|
# File 'lib/puppet/interface/option.rb', line 122
def has_default?
!!@default
end
|
#optional_argument? ⇒ Boolean
114
115
116
|
# File 'lib/puppet/interface/option.rb', line 114
def optional_argument?
!!@optional_argument
end
|
#optparse_to_name(declaration) ⇒ Object
This method is part of a private API.
You should avoid using this method if possible, as it may be removed or be changed in the future.
101
102
103
104
105
106
107
108
|
# File 'lib/puppet/interface/option.rb', line 101
def optparse_to_name(declaration)
name = optparse_to_optionname(declaration).tr('-', '_')
unless name.to_s =~ /^[a-z]\w*$/
raise _("%{name} is an invalid option name") % { name: name.inspect }
end
name.to_sym
end
|
#optparse_to_optionname(declaration) ⇒ Object
This method is part of a private API.
You should avoid using this method if possible, as it may be removed or be changed in the future.
91
92
93
94
95
96
97
98
|
# File 'lib/puppet/interface/option.rb', line 91
def optparse_to_optionname(declaration)
found = declaration.match(/^-+(?:\[no-\])?([^ =]+)/)
unless found
raise ArgumentError, _("Can't find a name in the declaration %{declaration}") % { declaration: declaration.inspect }
end
found.captures.first
end
|
#required? ⇒ Boolean
118
119
120
|
# File 'lib/puppet/interface/option.rb', line 118
def required?
!!@required
end
|
#takes_argument? ⇒ Boolean
110
111
112
|
# File 'lib/puppet/interface/option.rb', line 110
def takes_argument?
!!@argument
end
|
to_s and optparse_to_name are roughly mirrored, because they are used to transform options to name symbols, and vice-versa. This isn’t a full bidirectional transformation though. –daniel 2011-04-07
86
87
88
|
# File 'lib/puppet/interface/option.rb', line 86
def to_s
@name.to_s.tr('_', '-')
end
|