Update version according to OSCI-856
[packages/precise/mcollective.git] / doc / classes / MCollective / Optionparser.html
1 <?xml version="1.0" encoding="iso-8859-1"?>
2 <!DOCTYPE html 
3      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
6 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7 <head>
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">
13   // <![CDATA[
14
15   function popupCode( url ) {
16     window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17   }
18
19   function toggleCode( id ) {
20     if ( document.getElementById )
21       elem = document.getElementById( id );
22     else if ( document.all )
23       elem = eval( "document.all." + id );
24     else
25       return false;
26
27     elemStyle = elem.style;
28     
29     if ( elemStyle.display != "block" ) {
30       elemStyle.display = "block"
31     } else {
32       elemStyle.display = "none"
33     }
34
35     return true;
36   }
37   
38   // Make codeblocks hidden by default
39   document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40   
41   // ]]>
42   </script>
43
44 </head>
45 <body>
46
47
48
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>
54         </tr>
55         <tr class="top-aligned-row">
56             <td><strong>In:</strong></td>
57             <td>
58                 <a href="../../files/lib/mcollective/optionparser_rb.html">
59                 lib/mcollective/optionparser.rb
60                 </a>
61         <br />
62             </td>
63         </tr>
64
65         <tr class="top-aligned-row">
66             <td><strong>Parent:</strong></td>
67             <td>
68                 Object
69             </td>
70         </tr>
71         </table>
72     </div>
73   <!-- banner header -->
74
75   <div id="bodyContent">
76
77
78
79   <div id="contextContent">
80
81     <div id="description">
82       <p>
83 A simple helper to build cli tools that supports a uniform command line
84 layout.
85 </p>
86
87     </div>
88
89
90    </div>
91
92     <div id="method-list">
93       <h3 class="section-bar">Methods</h3>
94
95       <div class="name-list">
96       <a href="#M000455">add_common_options</a>&nbsp;&nbsp;
97       <a href="#M000453">add_filter_options</a>&nbsp;&nbsp;
98       <a href="#M000454">add_required_options</a>&nbsp;&nbsp;
99       <a href="#M000451">new</a>&nbsp;&nbsp;
100       <a href="#M000452">parse</a>&nbsp;&nbsp;
101       </div>
102     </div>
103
104   </div>
105
106
107     <!-- if includes -->
108
109     <div id="section">
110
111
112
113
114
115     <div id="attribute-list">
116       <h3 class="section-bar">Attributes</h3>
117
118       <div class="name-list">
119         <table>
120         <tr class="top-aligned-row context-row">
121           <td class="context-item-name">parser</td>
122           <td class="context-item-value">&nbsp;[R]&nbsp;</td>
123           <td class="context-item-desc"></td>
124         </tr>
125         </table>
126       </div>
127     </div>
128       
129
130
131     <!-- if method_list -->
132     <div id="methods">
133       <h3 class="section-bar">Public Class methods</h3>
134
135       <div id="method-M000451" class="method-detail">
136         <a name="M000451"></a>
137
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>
141           </a>
142         </div>
143       
144         <div class="method-description">
145           <p>
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.
148 </p>
149 <p>
150 Starts a parser that defaults to verbose and that includs the filter
151 options:
152 </p>
153 <pre>
154  oparser = MCollective::Optionparser.new({:verbose =&gt; true}, &quot;filter&quot;)
155 </pre>
156 <p>
157 Stats a parser in non verbose mode that does support discovery
158 </p>
159 <pre>
160  oparser = MCollective::Optionparser.new()
161 </pre>
162 <p>
163 Starts a parser in verbose mode that does not show the common options:
164 </p>
165 <pre>
166  oparser = MCollective::Optionparser.new({:verbose =&gt; true}, &quot;filter&quot;, &quot;common&quot;)
167 </pre>
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">
171 <pre>
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>
175 22: 
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>
178 25: 
179 26:       <span class="ruby-ivar">@options</span> = <span class="ruby-constant">Util</span>.<span class="ruby-identifier">default_options</span>
180 27: 
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>
183 </pre>
184           </div>
185         </div>
186       </div>
187
188       <h3 class="section-bar">Public Instance methods</h3>
189
190       <div id="method-M000455" class="method-detail">
191         <a name="M000455"></a>
192
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>
196           </a>
197         </div>
198       
199         <div class="method-description">
200           <p>
201 These options will be added to most cli tools
202 </p>
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">
206 <pre>
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">&quot;&quot;</span>
210 130:       <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">&quot;Common Options&quot;</span>
211 131: 
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>
215 135: 
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>
219 139: 
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>
223 143: 
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>
227 147: 
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>
231 151: 
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>
235 155: 
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">&quot;Discovery method is already set by a competing option&quot;</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">&amp;&amp;</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>
240 160: 
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">&lt;&lt;</span> <span class="ruby-identifier">a</span>
243 163:       <span class="ruby-keyword kw">end</span>
244 164: 
245 165:       <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">&quot;--nodes FILE&quot;</span>, <span class="ruby-value str">&quot;List of nodes to address&quot;</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">&quot;Cannot mix --disc-method, --disc-option and --nodes&quot;</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">&gt;</span> <span class="ruby-value">0</span>
247 167:         <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Cannot read the discovery file #{v}&quot;</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>)
248 168: 
249 169:         <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:discovery_method</span>] = <span class="ruby-value str">&quot;flatfile&quot;</span>
250 170:         <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:discovery_options</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">v</span>
251 171:       <span class="ruby-keyword kw">end</span>
252 172: 
253 173:       <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">&quot;--publish_timeout TIMEOUT&quot;</span>, <span class="ruby-constant">Integer</span>, <span class="ruby-value str">&quot;Timeout for publishing requests to remote agents.&quot;</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>
256 176: 
257 177:       <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">on</span>(<span class="ruby-value str">&quot;--threaded&quot;</span>, <span class="ruby-value str">&quot;Start publishing requests and receiving responses in threaded mode.&quot;</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>
261 </pre>
262           </div>
263         </div>
264       </div>
265
266       <div id="method-M000453" class="method-detail">
267         <a name="M000453"></a>
268
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>
272           </a>
273         </div>
274       
275         <div class="method-description">
276           <p>
277 These options will be added if you pass &#8216;filter&#8217; into the
278 include list of the constructor.
279 </p>
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">
283 <pre>
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">&quot;&quot;</span>
287  75:       <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">separator</span> <span class="ruby-value str">&quot;Host Filters&quot;</span>
288  76: 
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">&quot; &quot;</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">&quot;fact&quot;</span>] <span class="ruby-operator">&lt;&lt;</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">&quot;cf_class&quot;</span>] <span class="ruby-operator">&lt;&lt;</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>
299  87: 
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">&quot;compound&quot;</span>] <span class="ruby-operator">&lt;&lt;</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>
303  91: 
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>)
306  94: 
307  95:         <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:filter</span>][<span class="ruby-value str">&quot;fact&quot;</span>] <span class="ruby-operator">&lt;&lt;</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>
309  97: 
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">&quot;cf_class&quot;</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">f</span>
312 100:       <span class="ruby-keyword kw">end</span>
313 101: 
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">&quot;agent&quot;</span>] <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">a</span>
316 104:       <span class="ruby-keyword kw">end</span>
317 105: 
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">&quot;identity&quot;</span>] <span class="ruby-operator">&lt;&lt;</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>
322 </pre>
323           </div>
324         </div>
325       </div>
326
327       <div id="method-M000454" class="method-detail">
328         <a name="M000454"></a>
329
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>
333           </a>
334         </div>
335       
336         <div class="method-description">
337           <p>
338 These options should always be present
339 </p>
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">
343 <pre>
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>
349 116: 
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>
353 120: 
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>
359 </pre>
360           </div>
361         </div>
362       </div>
363
364       <div id="method-M000452" class="method-detail">
365         <a name="M000452"></a>
366
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>
370           </a>
371         </div>
372       
373         <div class="method-description">
374           <p>
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>.
377 </p>
378 <p>
379 The sample below starts a parser that also prompts for &#8212;arguments in
380 addition to the defaults. It also sets the description and shows a usage
381 message specific to this app.
382 </p>
383 <pre>
384  options = oparser.parse{|parser, options|
385       parser.define_head &quot;Control the mcollective controller daemon&quot;
386       parser.banner = &quot;Usage: sh-mcollective [options] command&quot;
387
388       parser.on('--arg', '--argument ARGUMENT', 'Argument to pass to agent') do |v|
389           options[:argument] = v
390       end
391  }
392 </pre>
393 <p>
394 Users can set default options that get parsed in using the
395 MCOLLECTIVE_EXTRA_OPTS environemnt variable
396 </p>
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">
400 <pre>
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">&amp;</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>
404 50: 
405 51:       <span class="ruby-identifier">add_required_options</span>
406 52: 
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">&quot;common&quot;</span>)
408 54: 
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>)
411 57: 
412 58:         <span class="ruby-identifier">options_name</span> = <span class="ruby-node">&quot;add_#{i}_options&quot;</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>
415 61: 
416 62:       <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">environment</span>(<span class="ruby-value str">&quot;MCOLLECTIVE_EXTRA_OPTS&quot;</span>)
417 63: 
418 64:       <span class="ruby-ivar">@parser</span>.<span class="ruby-identifier">parse!</span>
419 65: 
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>]
421 67: 
422 68:       <span class="ruby-ivar">@options</span>
423 69:     <span class="ruby-keyword kw">end</span>
424 </pre>
425           </div>
426         </div>
427       </div>
428
429
430     </div>
431
432
433   </div>
434
435
436 <div id="validator-badges">
437   <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
438 </div>
439
440 </body>
441 </html>