1 <?xml version="1.0" encoding="iso-8859-1"?>
3 PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
8 <title>Class: MCollective::Optionparser</title>
9 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10 <meta http-equiv="Content-Script-Type" content="text/javascript" />
11 <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12 <script type="text/javascript">
15 function popupCode( url ) {
16 window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
19 function toggleCode( id ) {
20 if ( document.getElementById )
21 elem = document.getElementById( id );
22 else if ( document.all )
23 elem = eval( "document.all." + id );
27 elemStyle = elem.style;
29 if ( elemStyle.display != "block" ) {
30 elemStyle.display = "block"
32 elemStyle.display = "none"
38 // Make codeblocks hidden by default
39 document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
49 <div id="classHeader">
50 <table class="header-table">
51 <tr class="top-aligned-row">
52 <td><strong>Class</strong></td>
53 <td class="class-name-in-header">MCollective::Optionparser</td>
55 <tr class="top-aligned-row">
56 <td><strong>In:</strong></td>
58 <a href="../../files/lib/mcollective/optionparser_rb.html">
59 lib/mcollective/optionparser.rb
65 <tr class="top-aligned-row">
66 <td><strong>Parent:</strong></td>
73 <!-- banner header -->
75 <div id="bodyContent">
79 <div id="contextContent">
81 <div id="description">
83 A simple helper to build cli tools that supports a uniform command line
92 <div id="method-list">
93 <h3 class="section-bar">Methods</h3>
95 <div class="name-list">
96 <a href="#M000455">add_common_options</a>
97 <a href="#M000453">add_filter_options</a>
98 <a href="#M000454">add_required_options</a>
99 <a href="#M000451">new</a>
100 <a href="#M000452">parse</a>
115 <div id="attribute-list">
116 <h3 class="section-bar">Attributes</h3>
118 <div class="name-list">
120 <tr class="top-aligned-row context-row">
121 <td class="context-item-name">parser</td>
122 <td class="context-item-value"> [R] </td>
123 <td class="context-item-desc"></td>
131 <!-- if method_list -->
133 <h3 class="section-bar">Public Class methods</h3>
135 <div id="method-M000451" class="method-detail">
136 <a name="M000451"></a>
138 <div class="method-heading">
139 <a href="#M000451" class="method-signature">
140 <span class="method-name">new</span><span class="method-args">(defaults = {}, include_sections = nil, exclude_sections = nil)</span>
144 <div class="method-description">
146 Creates a <a href="Optionparser.html#M000451">new</a> instance of the
147 parser, you can supply defaults and include named groups of options.
150 Starts a parser that defaults to verbose and that includs the filter
154 oparser = MCollective::Optionparser.new({:verbose => true}, "filter")
157 Stats a parser in non verbose mode that does support discovery
160 oparser = MCollective::Optionparser.new()
163 Starts a parser in verbose mode that does not show the common options:
166 oparser = MCollective::Optionparser.new({:verbose => true}, "filter", "common")
168 <p><a class="source-toggle" href="#"
169 onclick="toggleCode('M000451-source');return false;">[Source]</a></p>
170 <div class="method-source-code" id="M000451-source">
172 <span class="ruby-comment cmt"># File lib/mcollective/optionparser.rb, line 20</span>
173 20: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">defaults</span> = {}, <span class="ruby-identifier">include_sections</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">exclude_sections</span> = <span class="ruby-keyword kw">nil</span>)
174 21: <span class="ruby-ivar">@parser</span> = <span class="ruby-operator">::</span><span class="ruby-constant">OptionParser</span>.<span class="ruby-identifier">new</span>
176 23: <span class="ruby-ivar">@include</span> = [<span class="ruby-identifier">include_sections</span>].<span class="ruby-identifier">flatten</span>
177 24: <span class="ruby-ivar">@exclude</span> = [<span class="ruby-identifier">exclude_sections</span>].<span class="ruby-identifier">flatten</span>
179 26: <span class="ruby-ivar">@options</span> = <span class="ruby-constant">Util</span>.<span class="ruby-identifier">default_options</span>
181 28: <span class="ruby-ivar">@options</span>.<span class="ruby-identifier">merge!</span>(<span class="ruby-identifier">defaults</span>)
182 29: <span class="ruby-keyword kw">end</span>
188 <h3 class="section-bar">Public Instance methods</h3>
190 <div id="method-M000455" class="method-detail">
191 <a name="M000455"></a>
193 <div class="method-heading">
194 <a href="#M000455" class="method-signature">
195 <span class="method-name">add_common_options</span><span class="method-args">()</span>
199 <div class="method-description">
201 These options will be added to most cli tools
203 <p><a class="source-toggle" href="#"
204 onclick="toggleCode('M000455-source');return false;">[Source]</a></p>
205 <div class="method-source-code" id="M000455-source">
207 <span class="ruby-comment cmt"># File lib/mcollective/optionparser.rb, line 128</span>
208 128: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_common_options</span>
209 129: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">""</span>
210 130: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">"Common Options"</span>
212 132: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'-T'</span>, <span class="ruby-value str">'--target COLLECTIVE'</span>, <span class="ruby-value str">'Target messages to a specific sub collective'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
213 133: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:collective</span>] = <span class="ruby-identifier">f</span>
214 134: <span class="ruby-keyword kw">end</span>
216 136: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'--dt'</span>, <span class="ruby-value str">'--discovery-timeout SECONDS'</span>, <span class="ruby-constant">Integer</span>, <span class="ruby-value str">'Timeout for doing discovery'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">t</span><span class="ruby-operator">|</span>
217 137: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:disctimeout</span>] = <span class="ruby-identifier">t</span>
218 138: <span class="ruby-keyword kw">end</span>
220 140: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'-t'</span>, <span class="ruby-value str">'--timeout SECONDS'</span>, <span class="ruby-constant">Integer</span>, <span class="ruby-value str">'Timeout for calling remote agents'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">t</span><span class="ruby-operator">|</span>
221 141: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:timeout</span>] = <span class="ruby-identifier">t</span>
222 142: <span class="ruby-keyword kw">end</span>
224 144: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'-q'</span>, <span class="ruby-value str">'--quiet'</span>, <span class="ruby-value str">'Do not be verbose'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
225 145: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:verbose</span>] = <span class="ruby-keyword kw">false</span>
226 146: <span class="ruby-keyword kw">end</span>
228 148: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'--ttl TTL'</span>, <span class="ruby-value str">'Set the message validity period'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
229 149: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:ttl</span>] = <span class="ruby-identifier">v</span>.<span class="ruby-identifier">to_i</span>
230 150: <span class="ruby-keyword kw">end</span>
232 152: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'--reply-to TARGET'</span>, <span class="ruby-value str">'Set a custom target for replies'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
233 153: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:reply_to</span>] = <span class="ruby-identifier">v</span>
234 154: <span class="ruby-keyword kw">end</span>
236 156: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'--dm'</span>, <span class="ruby-value str">'--disc-method METHOD'</span>, <span class="ruby-value str">'Which discovery method to use'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
237 157: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"Discovery method is already set by a competing option"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:discovery_method</span>] <span class="ruby-operator">&&</span> <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:discovery_method</span>] <span class="ruby-operator">!=</span> <span class="ruby-identifier">v</span>
238 158: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:discovery_method</span>] = <span class="ruby-identifier">v</span>
239 159: <span class="ruby-keyword kw">end</span>
241 161: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'--do'</span>, <span class="ruby-value str">'--disc-option OPTION'</span>, <span class="ruby-value str">'Options to pass to the discovery method'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span>
242 162: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:discovery_options</span>] <span class="ruby-operator"><<</span> <span class="ruby-identifier">a</span>
243 163: <span class="ruby-keyword kw">end</span>
245 165: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">"--nodes FILE"</span>, <span class="ruby-value str">"List of nodes to address"</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
246 166: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"Cannot mix --disc-method, --disc-option and --nodes"</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:discovery_method</span>] <span class="ruby-operator">||</span> <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:discovery_options</span>].<span class="ruby-identifier">size</span> <span class="ruby-operator">></span> <span class="ruby-value">0</span>
247 167: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Cannot read the discovery file #{v}"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">readable?</span>(<span class="ruby-identifier">v</span>)
249 169: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:discovery_method</span>] = <span class="ruby-value str">"flatfile"</span>
250 170: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:discovery_options</span>] <span class="ruby-operator"><<</span> <span class="ruby-identifier">v</span>
251 171: <span class="ruby-keyword kw">end</span>
253 173: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">"--publish_timeout TIMEOUT"</span>, <span class="ruby-constant">Integer</span>, <span class="ruby-value str">"Timeout for publishing requests to remote agents."</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">pt</span><span class="ruby-operator">|</span>
254 174: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:publish_timeout</span>] = <span class="ruby-identifier">pt</span>
255 175: <span class="ruby-keyword kw">end</span>
257 177: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">"--threaded"</span>, <span class="ruby-value str">"Start publishing requests and receiving responses in threaded mode."</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
258 178: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:threaded</span>] = <span class="ruby-keyword kw">true</span>
259 179: <span class="ruby-keyword kw">end</span>
260 180: <span class="ruby-keyword kw">end</span>
266 <div id="method-M000453" class="method-detail">
267 <a name="M000453"></a>
269 <div class="method-heading">
270 <a href="#M000453" class="method-signature">
271 <span class="method-name">add_filter_options</span><span class="method-args">()</span>
275 <div class="method-description">
277 These options will be added if you pass ‘filter’ into the
278 include list of the constructor.
280 <p><a class="source-toggle" href="#"
281 onclick="toggleCode('M000453-source');return false;">[Source]</a></p>
282 <div class="method-source-code" id="M000453-source">
284 <span class="ruby-comment cmt"># File lib/mcollective/optionparser.rb, line 73</span>
285 73: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_filter_options</span>
286 74: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">""</span>
287 75: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">"Host Filters"</span>
289 77: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'-W'</span>, <span class="ruby-value str">'--with FILTER'</span>, <span class="ruby-value str">'Combined classes and facts filter'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
290 78: <span class="ruby-identifier">f</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">" "</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">filter</span><span class="ruby-operator">|</span>
291 79: <span class="ruby-keyword kw">begin</span>
292 80: <span class="ruby-identifier">fact_parsed</span> = <span class="ruby-identifier">parse_fact</span>(<span class="ruby-identifier">filter</span>)
293 81: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:filter</span>][<span class="ruby-value str">"fact"</span>] <span class="ruby-operator"><<</span> <span class="ruby-identifier">fact_parsed</span>
294 82: <span class="ruby-keyword kw">rescue</span>
295 83: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:filter</span>][<span class="ruby-value str">"cf_class"</span>] <span class="ruby-operator"><<</span> <span class="ruby-identifier">filter</span>
296 84: <span class="ruby-keyword kw">end</span>
297 85: <span class="ruby-keyword kw">end</span>
298 86: <span class="ruby-keyword kw">end</span>
300 88: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'-S'</span>, <span class="ruby-value str">'--select FILTER'</span>, <span class="ruby-value str">'Compound filter combining facts and classes'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
301 89: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:filter</span>][<span class="ruby-value str">"compound"</span>] <span class="ruby-operator"><<</span> <span class="ruby-constant">Matcher</span>.<span class="ruby-identifier">create_compound_callstack</span>(<span class="ruby-identifier">f</span>)
302 90: <span class="ruby-keyword kw">end</span>
304 92: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'-F'</span>, <span class="ruby-value str">'--wf'</span>, <span class="ruby-value str">'--with-fact fact=val'</span>, <span class="ruby-value str">'Match hosts with a certain fact'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
305 93: <span class="ruby-identifier">fact_parsed</span> = <span class="ruby-identifier">parse_fact</span>(<span class="ruby-identifier">f</span>)
307 95: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:filter</span>][<span class="ruby-value str">"fact"</span>] <span class="ruby-operator"><<</span> <span class="ruby-identifier">fact_parsed</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fact_parsed</span>
308 96: <span class="ruby-keyword kw">end</span>
310 98: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'-C'</span>, <span class="ruby-value str">'--wc'</span>, <span class="ruby-value str">'--with-class CLASS'</span>, <span class="ruby-value str">'Match hosts with a certain config management class'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
311 99: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:filter</span>][<span class="ruby-value str">"cf_class"</span>] <span class="ruby-operator"><<</span> <span class="ruby-identifier">f</span>
312 100: <span class="ruby-keyword kw">end</span>
314 102: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'-A'</span>, <span class="ruby-value str">'--wa'</span>, <span class="ruby-value str">'--with-agent AGENT'</span>, <span class="ruby-value str">'Match hosts with a certain agent'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span>
315 103: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:filter</span>][<span class="ruby-value str">"agent"</span>] <span class="ruby-operator"><<</span> <span class="ruby-identifier">a</span>
316 104: <span class="ruby-keyword kw">end</span>
318 106: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'-I'</span>, <span class="ruby-value str">'--wi'</span>, <span class="ruby-value str">'--with-identity IDENT'</span>, <span class="ruby-value str">'Match hosts with a certain configured identity'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">a</span><span class="ruby-operator">|</span>
319 107: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:filter</span>][<span class="ruby-value str">"identity"</span>] <span class="ruby-operator"><<</span> <span class="ruby-identifier">a</span>
320 108: <span class="ruby-keyword kw">end</span>
321 109: <span class="ruby-keyword kw">end</span>
327 <div id="method-M000454" class="method-detail">
328 <a name="M000454"></a>
330 <div class="method-heading">
331 <a href="#M000454" class="method-signature">
332 <span class="method-name">add_required_options</span><span class="method-args">()</span>
336 <div class="method-description">
338 These options should always be present
340 <p><a class="source-toggle" href="#"
341 onclick="toggleCode('M000454-source');return false;">[Source]</a></p>
342 <div class="method-source-code" id="M000454-source">
344 <span class="ruby-comment cmt"># File lib/mcollective/optionparser.rb, line 112</span>
345 112: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_required_options</span>
346 113: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'-c'</span>, <span class="ruby-value str">'--config FILE'</span>, <span class="ruby-value str">'Load configuratuion from file rather than default'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">f</span><span class="ruby-operator">|</span>
347 114: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:config</span>] = <span class="ruby-identifier">f</span>
348 115: <span class="ruby-keyword kw">end</span>
350 117: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'-v'</span>, <span class="ruby-value str">'--verbose'</span>, <span class="ruby-value str">'Be verbose'</span>) <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
351 118: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:verbose</span>] = <span class="ruby-identifier">v</span>
352 119: <span class="ruby-keyword kw">end</span>
354 121: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">'-h'</span>, <span class="ruby-value str">'--help'</span>, <span class="ruby-value str">'Display this screen'</span>) <span class="ruby-keyword kw">do</span>
355 122: <span class="ruby-identifier">puts</span> <span class="ruby-ivar">@parser</span>
356 123: <span class="ruby-identifier">exit!</span> <span class="ruby-value">1</span>
357 124: <span class="ruby-keyword kw">end</span>
358 125: <span class="ruby-keyword kw">end</span>
364 <div id="method-M000452" class="method-detail">
365 <a name="M000452"></a>
367 <div class="method-heading">
368 <a href="#M000452" class="method-signature">
369 <span class="method-name">parse</span><span class="method-args">() {|@parser, @options| ...}</span>
373 <div class="method-description">
375 Parse the options returning the options, you can pass a block that adds
376 additional options to the <a href="Optionparser.html">Optionparser</a>.
379 The sample below starts a parser that also prompts for —arguments in
380 addition to the defaults. It also sets the description and shows a usage
381 message specific to this app.
384 options = oparser.parse{|parser, options|
385 parser.define_head "Control the mcollective controller daemon"
386 parser.banner = "Usage: sh-mcollective [options] command"
388 parser.on('--arg', '--argument ARGUMENT', 'Argument to pass to agent') do |v|
389 options[:argument] = v
394 Users can set default options that get parsed in using the
395 MCOLLECTIVE_EXTRA_OPTS environemnt variable
397 <p><a class="source-toggle" href="#"
398 onclick="toggleCode('M000452-source');return false;">[Source]</a></p>
399 <div class="method-source-code" id="M000452-source">
401 <span class="ruby-comment cmt"># File lib/mcollective/optionparser.rb, line 48</span>
402 48: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">parse</span>(<span class="ruby-operator">&</span><span class="ruby-identifier">block</span>)
403 49: <span class="ruby-keyword kw">yield</span>(<span class="ruby-ivar">@parser</span>, <span class="ruby-ivar">@options</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
405 51: <span class="ruby-identifier">add_required_options</span>
407 53: <span class="ruby-identifier">add_common_options</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@exclude</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-value str">"common"</span>)
409 55: <span class="ruby-ivar">@include</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
410 56: <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@exclude</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">i</span>)
412 58: <span class="ruby-identifier">options_name</span> = <span class="ruby-node">"add_#{i}_options"</span>
413 59: <span class="ruby-identifier">send</span>(<span class="ruby-identifier">options_name</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">options_name</span>)
414 60: <span class="ruby-keyword kw">end</span>
416 62: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">environment</span>(<span class="ruby-value str">"MCOLLECTIVE_EXTRA_OPTS"</span>)
418 64: <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">parse!</span>
420 66: <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:collective</span>] = <span class="ruby-constant">Config</span>.<span class="ruby-identifier">instance</span>.<span class="ruby-identifier">main_collective</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:collective</span>]
422 68: <span class="ruby-ivar">@options</span>
423 69: <span class="ruby-keyword kw">end</span>
436 <div id="validator-badges">
437 <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>