Update version according to OSCI-883
[packages/precise/mcollective.git] / doc / MCollective / Util.html
1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5 <head>
6         <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
7
8         <title>Module: MCollective::Util</title>
9
10         <link rel="stylesheet" href="../rdoc.css" type="text/css" media="screen" />
11
12         <script src="../js/jquery.js" type="text/javascript"
13                 charset="utf-8"></script>
14         <script src="../js/thickbox-compressed.js" type="text/javascript"
15                 charset="utf-8"></script>
16         <script src="../js/quicksearch.js" type="text/javascript"
17                 charset="utf-8"></script>
18         <script src="../js/darkfish.js" type="text/javascript"
19                 charset="utf-8"></script>
20
21 </head>
22 <body class="module">
23
24         <div id="metadata">
25                 <div id="file-metadata">
26                         <div id="file-list-section" class="section">
27                                 <h3 class="section-header">In Files</h3>
28                                 <div class="section-body">
29                                         <ul>
30                                         
31                                                 <li><a href="../lib/mcollective/util_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
32                                                         class="thickbox" title="lib/mcollective/util.rb">lib/mcollective/util.rb</a></li>
33                                         
34                                         </ul>
35                                 </div>
36                         </div>
37
38                         
39                 </div>
40
41                 <div id="class-metadata">
42
43                         <!-- Parent Class -->
44                         
45
46                         <!-- Namespace Contents -->
47                         
48
49                         <!-- Method Quickref -->
50                         
51                         <div id="method-list-section" class="section">
52                                 <h3 class="section-header">Methods</h3>
53                                 <ul class="link-list">
54                                         
55                                         <li><a href="#M000328">::absolute_path?</a></li>
56                                         
57                                         <li><a href="#M000318">::align_text</a></li>
58                                         
59                                         <li><a href="#M000313">::color</a></li>
60                                         
61                                         <li><a href="#M000315">::colorize</a></li>
62                                         
63                                         <li><a href="#M000325">::command_in_path?</a></li>
64                                         
65                                         <li><a href="#M000303">::config_file_for_user</a></li>
66                                         
67                                         <li><a href="#M000304">::default_options</a></li>
68                                         
69                                         <li><a href="#M000301">::empty_filter</a></li>
70                                         
71                                         <li><a href="#M000300">::empty_filter?</a></li>
72                                         
73                                         <li><a href="#M000297">::get_fact</a></li>
74                                         
75                                         <li><a href="#M000294">::has_agent?</a></li>
76                                         
77                                         <li><a href="#M000296">::has_cf_class?</a></li>
78                                         
79                                         <li><a href="#M000298">::has_fact?</a></li>
80                                         
81                                         <li><a href="#M000299">::has_identity?</a></li>
82                                         
83                                         <li><a href="#M000308">::loadclass</a></li>
84                                         
85                                         <li><a href="#M000305">::make_subscriptions</a></li>
86                                         
87                                         <li><a href="#M000317">::mcollective_version</a></li>
88                                         
89                                         <li><a href="#M000309">::parse_fact_string</a></li>
90                                         
91                                         <li><a href="#M000316">::ruby_version</a></li>
92                                         
93                                         <li><a href="#M000295">::setup_windows_sleeper</a></li>
94                                         
95                                         <li><a href="#M000311">::shellescape</a></li>
96                                         
97                                         <li><a href="#M000329">::str_to_bool</a></li>
98                                         
99                                         <li><a href="#M000306">::subscribe</a></li>
100                                         
101                                         <li><a href="#M000330">::t</a></li>
102                                         
103                                         <li><a href="#M000331">::templatepath</a></li>
104                                         
105                                         <li><a href="#M000322">::terminal_dimensions</a></li>
106                                         
107                                         <li><a href="#M000307">::unsubscribe</a></li>
108                                         
109                                         <li><a href="#M000326">::versioncmp</a></li>
110                                         
111                                         <li><a href="#M000312">::windows?</a></li>
112                                         
113                                         <li><a href="#M000302">::windows_prefix</a></li>
114                                         
115                                 </ul>
116                         </div>
117                         
118
119                         <!-- Included Modules -->
120                         
121                 </div>
122
123                 <div id="project-metadata">
124                         
125                         
126                         <div id="fileindex-section" class="section project-section">
127                                 <h3 class="section-header">Files</h3>
128                                 <ul>
129                                 
130                                         <li class="file"><a href="../COPYING.html">COPYING</a></li>
131                                 
132                                         <li class="file"><a href="../Gemfile.html">Gemfile</a></li>
133                                 
134                                         <li class="file"><a href="../README.html">README</a></li>
135                                 
136                                         <li class="file"><a href="../Rakefile.html">Rakefile</a></li>
137                                 
138                                         <li class="file"><a href="../etc/client_cfg_dist.html">client.cfg.dist</a></li>
139                                 
140                                         <li class="file"><a href="../etc/data-help_erb.html">data-help.erb</a></li>
141                                 
142                                         <li class="file"><a href="../etc/discovery-help_erb.html">discovery-help.erb</a></li>
143                                 
144                                         <li class="file"><a href="../etc/facts_yaml_dist.html">facts.yaml.dist</a></li>
145                                 
146                                         <li class="file"><a href="../etc/metadata-help_erb.html">metadata-help.erb</a></li>
147                                 
148                                         <li class="file"><a href="../etc/msg-help_erb.html">msg-help.erb</a></li>
149                                 
150                                         <li class="file"><a href="../etc/rpc-help_erb.html">rpc-help.erb</a></li>
151                                 
152                                         <li class="file"><a href="../etc/server_cfg_dist.html">server.cfg.dist</a></li>
153                                 
154                                         <li class="file"><a href="../etc/ssl/PLACEHOLDER.html">PLACEHOLDER</a></li>
155                                 
156                                         <li class="file"><a href="../etc/ssl/clients/PLACEHOLDER.html">PLACEHOLDER</a></li>
157                                 
158                                         <li class="file"><a href="../lib/mcollective/generators/templates/action_snippet_erb.html">action_snippet.erb</a></li>
159                                 
160                                         <li class="file"><a href="../lib/mcollective/generators/templates/data_input_snippet_erb.html">data_input_snippet.erb</a></li>
161                                 
162                                         <li class="file"><a href="../lib/mcollective/generators/templates/ddl_erb.html">ddl.erb</a></li>
163                                 
164                                         <li class="file"><a href="../lib/mcollective/generators/templates/plugin_erb.html">plugin.erb</a></li>
165                                 
166                                         <li class="file"><a href="../lib/mcollective/locales/en_yml.html">en.yml</a></li>
167                                 
168                                         <li class="file"><a href="../mcollective_init.html">mcollective.init</a></li>
169                                 
170                                 </ul>
171                         </div>
172                         
173
174                         <div id="classindex-section" class="section project-section">
175                                 <h3 class="section-header">Class Index
176                                         <span class="search-toggle"><img src="../images/find.png"
177                                                 height="16" width="16" alt="[+]"
178                                                 title="show/hide quicksearch" /></span></h3>
179                                 <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
180                                 <fieldset>
181                                         <legend>Quicksearch</legend>
182                                         <input type="text" name="quicksearch" value=""
183                                                 class="quicksearch-field" />
184                                 </fieldset>
185                                 </form>
186
187                                 <ul class="link-list">
188                                 
189                                         <li><a href="../MCollective.html">MCollective</a></li>
190                                 
191                                         <li><a href="../MCollective/Agent.html">MCollective::Agent</a></li>
192                                 
193                                         <li><a href="../MCollective/Agents.html">MCollective::Agents</a></li>
194                                 
195                                         <li><a href="../MCollective/Aggregate.html">MCollective::Aggregate</a></li>
196                                 
197                                         <li><a href="../MCollective/Aggregate/Base.html">MCollective::Aggregate::Base</a></li>
198                                 
199                                         <li><a href="../MCollective/Aggregate/Result.html">MCollective::Aggregate::Result</a></li>
200                                 
201                                         <li><a href="../MCollective/Aggregate/Result/Base.html">MCollective::Aggregate::Result::Base</a></li>
202                                 
203                                         <li><a href="../MCollective/Aggregate/Result/CollectionResult.html">MCollective::Aggregate::Result::CollectionResult</a></li>
204                                 
205                                         <li><a href="../MCollective/Aggregate/Result/NumericResult.html">MCollective::Aggregate::Result::NumericResult</a></li>
206                                 
207                                         <li><a href="../MCollective/Application.html">MCollective::Application</a></li>
208                                 
209                                         <li><a href="../MCollective/Applications.html">MCollective::Applications</a></li>
210                                 
211                                         <li><a href="../MCollective/Cache.html">MCollective::Cache</a></li>
212                                 
213                                         <li><a href="../MCollective/Client.html">MCollective::Client</a></li>
214                                 
215                                         <li><a href="../MCollective/CodedError.html">MCollective::CodedError</a></li>
216                                 
217                                         <li><a href="../MCollective/Config.html">MCollective::Config</a></li>
218                                 
219                                         <li><a href="../MCollective/Connector.html">MCollective::Connector</a></li>
220                                 
221                                         <li><a href="../MCollective/Connector/Base.html">MCollective::Connector::Base</a></li>
222                                 
223                                         <li><a href="../MCollective/DDL.html">MCollective::DDL</a></li>
224                                 
225                                         <li><a href="../MCollective/DDL/AgentDDL.html">MCollective::DDL::AgentDDL</a></li>
226                                 
227                                         <li><a href="../MCollective/DDL/Base.html">MCollective::DDL::Base</a></li>
228                                 
229                                         <li><a href="../MCollective/DDL/DataDDL.html">MCollective::DDL::DataDDL</a></li>
230                                 
231                                         <li><a href="../MCollective/DDL/DiscoveryDDL.html">MCollective::DDL::DiscoveryDDL</a></li>
232                                 
233                                         <li><a href="../MCollective/DDL/ValidatorDDL.html">MCollective::DDL::ValidatorDDL</a></li>
234                                 
235                                         <li><a href="../MCollective/DDLValidationError.html">MCollective::DDLValidationError</a></li>
236                                 
237                                         <li><a href="../MCollective/Data.html">MCollective::Data</a></li>
238                                 
239                                         <li><a href="../MCollective/Data/Base.html">MCollective::Data::Base</a></li>
240                                 
241                                         <li><a href="../MCollective/Data/Result.html">MCollective::Data::Result</a></li>
242                                 
243                                         <li><a href="../MCollective/Discovery.html">MCollective::Discovery</a></li>
244                                 
245                                         <li><a href="../MCollective/Facts.html">MCollective::Facts</a></li>
246                                 
247                                         <li><a href="../MCollective/Facts/Base.html">MCollective::Facts::Base</a></li>
248                                 
249                                         <li><a href="../MCollective/Generators.html">MCollective::Generators</a></li>
250                                 
251                                         <li><a href="../MCollective/Generators/AgentGenerator.html">MCollective::Generators::AgentGenerator</a></li>
252                                 
253                                         <li><a href="../MCollective/Generators/Base.html">MCollective::Generators::Base</a></li>
254                                 
255                                         <li><a href="../MCollective/Generators/DataGenerator.html">MCollective::Generators::DataGenerator</a></li>
256                                 
257                                         <li><a href="../MCollective/InvalidRPCData.html">MCollective::InvalidRPCData</a></li>
258                                 
259                                         <li><a href="../MCollective/Log.html">MCollective::Log</a></li>
260                                 
261                                         <li><a href="../MCollective/Logger.html">MCollective::Logger</a></li>
262                                 
263                                         <li><a href="../MCollective/Logger/Base.html">MCollective::Logger::Base</a></li>
264                                 
265                                         <li><a href="../MCollective/Logger/Console_logger.html">MCollective::Logger::Console_logger</a></li>
266                                 
267                                         <li><a href="../MCollective/Logger/File_logger.html">MCollective::Logger::File_logger</a></li>
268                                 
269                                         <li><a href="../MCollective/Logger/Syslog_logger.html">MCollective::Logger::Syslog_logger</a></li>
270                                 
271                                         <li><a href="../MCollective/Matcher.html">MCollective::Matcher</a></li>
272                                 
273                                         <li><a href="../MCollective/Matcher/Parser.html">MCollective::Matcher::Parser</a></li>
274                                 
275                                         <li><a href="../MCollective/Matcher/Scanner.html">MCollective::Matcher::Scanner</a></li>
276                                 
277                                         <li><a href="../MCollective/Message.html">MCollective::Message</a></li>
278                                 
279                                         <li><a href="../MCollective/MissingRPCData.html">MCollective::MissingRPCData</a></li>
280                                 
281                                         <li><a href="../MCollective/MsgDoesNotMatchRequestID.html">MCollective::MsgDoesNotMatchRequestID</a></li>
282                                 
283                                         <li><a href="../MCollective/MsgTTLExpired.html">MCollective::MsgTTLExpired</a></li>
284                                 
285                                         <li><a href="../MCollective/NotTargettedAtUs.html">MCollective::NotTargettedAtUs</a></li>
286                                 
287                                         <li><a href="../MCollective/Optionparser.html">MCollective::Optionparser</a></li>
288                                 
289                                         <li><a href="../MCollective/PluginManager.html">MCollective::PluginManager</a></li>
290                                 
291                                         <li><a href="../MCollective/PluginPackager.html">MCollective::PluginPackager</a></li>
292                                 
293                                         <li><a href="../MCollective/PluginPackager/AgentDefinition.html">MCollective::PluginPackager::AgentDefinition</a></li>
294                                 
295                                         <li><a href="../MCollective/PluginPackager/StandardDefinition.html">MCollective::PluginPackager::StandardDefinition</a></li>
296                                 
297                                         <li><a href="../MCollective/RPC.html">MCollective::RPC</a></li>
298                                 
299                                         <li><a href="../MCollective/RPC/ActionRunner.html">MCollective::RPC::ActionRunner</a></li>
300                                 
301                                         <li><a href="../MCollective/RPC/Agent.html">MCollective::RPC::Agent</a></li>
302                                 
303                                         <li><a href="../MCollective/RPC/Audit.html">MCollective::RPC::Audit</a></li>
304                                 
305                                         <li><a href="../MCollective/RPC/Client.html">MCollective::RPC::Client</a></li>
306                                 
307                                         <li><a href="../MCollective/RPC/Helpers.html">MCollective::RPC::Helpers</a></li>
308                                 
309                                         <li><a href="../MCollective/RPC/Progress.html">MCollective::RPC::Progress</a></li>
310                                 
311                                         <li><a href="../MCollective/RPC/Reply.html">MCollective::RPC::Reply</a></li>
312                                 
313                                         <li><a href="../MCollective/RPC/Request.html">MCollective::RPC::Request</a></li>
314                                 
315                                         <li><a href="../MCollective/RPC/Result.html">MCollective::RPC::Result</a></li>
316                                 
317                                         <li><a href="../MCollective/RPC/Stats.html">MCollective::RPC::Stats</a></li>
318                                 
319                                         <li><a href="../MCollective/RPCAborted.html">MCollective::RPCAborted</a></li>
320                                 
321                                         <li><a href="../MCollective/RPCError.html">MCollective::RPCError</a></li>
322                                 
323                                         <li><a href="../MCollective/Registration.html">MCollective::Registration</a></li>
324                                 
325                                         <li><a href="../MCollective/Registration/Base.html">MCollective::Registration::Base</a></li>
326                                 
327                                         <li><a href="../MCollective/Runner.html">MCollective::Runner</a></li>
328                                 
329                                         <li><a href="../MCollective/RunnerStats.html">MCollective::RunnerStats</a></li>
330                                 
331                                         <li><a href="../MCollective/SSL.html">MCollective::SSL</a></li>
332                                 
333                                         <li><a href="../MCollective/Security.html">MCollective::Security</a></li>
334                                 
335                                         <li><a href="../MCollective/Security/Base.html">MCollective::Security::Base</a></li>
336                                 
337                                         <li><a href="../MCollective/SecurityValidationFailed.html">MCollective::SecurityValidationFailed</a></li>
338                                 
339                                         <li><a href="../MCollective/Shell.html">MCollective::Shell</a></li>
340                                 
341                                         <li><a href="../MCollective/Translatable.html">MCollective::Translatable</a></li>
342                                 
343                                         <li><a href="../MCollective/UnixDaemon.html">MCollective::UnixDaemon</a></li>
344                                 
345                                         <li><a href="../MCollective/UnknownRPCAction.html">MCollective::UnknownRPCAction</a></li>
346                                 
347                                         <li><a href="../MCollective/UnknownRPCError.html">MCollective::UnknownRPCError</a></li>
348                                 
349                                         <li><a href="../MCollective/Util.html">MCollective::Util</a></li>
350                                 
351                                         <li><a href="../MCollective/Validator.html">MCollective::Validator</a></li>
352                                 
353                                         <li><a href="../MCollective/ValidatorError.html">MCollective::ValidatorError</a></li>
354                                 
355                                         <li><a href="../MCollective/WindowsDaemon.html">MCollective::WindowsDaemon</a></li>
356                                 
357                                         <li><a href="../Array.html">Array</a></li>
358                                 
359                                         <li><a href="../Dir.html">Dir</a></li>
360                                 
361                                         <li><a href="../Object.html">Object</a></li>
362                                 
363                                         <li><a href="../String.html">String</a></li>
364                                 
365                                         <li><a href="../Symbol.html">Symbol</a></li>
366                                 
367                                 </ul>
368                                 <div id="no-class-search-results" style="display: none;">No matching classes.</div>
369                         </div>
370
371                         
372                 </div>
373         </div>
374
375         <div id="documentation">
376                 <h1 class="module">MCollective::Util</h1>
377
378                 <div id="description">
379                         <p>
380 Some basic utility helper methods useful to clients, agents, runner etc.
381 </p>
382
383                 </div>
384
385                 <!-- Constants -->
386                 
387
388                 <!-- Attributes -->
389                 
390
391                 <!-- Methods -->
392                 
393                 <div id="public-class-method-details" class="method-section section">
394                         <h3 class="section-header">Public Class Methods</h3>
395
396                 
397                         <div id="absolute-path--method" class="method-detail ">
398                                 <a name="M000328"></a>
399
400                                 <div class="method-heading">
401                                 
402                                         <span class="method-name">absolute_path?</span><span
403                                                 class="method-args">(path, separator=File::SEPARATOR, alt_separator=File::ALT_SEPARATOR)</span>
404                                         <span class="method-click-advice">click to toggle source</span>
405                                 
406                                 </div>
407
408                                 <div class="method-description">
409                                         
410                                         <p>
411 we should really use Pathname#absolute? but it&#8217;s not in all the ruby
412 versions we support and it comes down to roughly this
413 </p>
414                                         
415
416                                         
417                                         <div class="method-source-code"
418                                                 id="absolute-path--source">
419 <pre>
420      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 464</span>
421 464:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">absolute_path?</span>(<span class="ruby-identifier">path</span>, <span class="ruby-identifier">separator</span>=<span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">SEPARATOR</span>, <span class="ruby-identifier">alt_separator</span>=<span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">ALT_SEPARATOR</span>)
422 465:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">alt_separator</span>
423 466:         <span class="ruby-identifier">path_matcher</span> = <span class="ruby-node">/^([a-zA-Z]:){0,1}[#{Regexp.quote alt_separator}#{Regexp.quote separator}]/</span>
424 467:       <span class="ruby-keyword kw">else</span>
425 468:         <span class="ruby-identifier">path_matcher</span> = <span class="ruby-node">/^#{Regexp.quote separator}/</span>
426 469:       <span class="ruby-keyword kw">end</span>
427 470: 
428 471:       <span class="ruby-operator">!</span><span class="ruby-operator">!</span><span class="ruby-identifier">path</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">path_matcher</span>)
429 472:     <span class="ruby-keyword kw">end</span></pre>
430                                         </div>
431                                         
432                                 </div>
433
434                                 
435                         </div>
436
437                 
438                         <div id="align-text-method" class="method-detail ">
439                                 <a name="M000318"></a>
440
441                                 <div class="method-heading">
442                                 
443                                         <span class="method-name">align_text</span><span
444                                                 class="method-args">(text, console_cols = nil, preamble = 5)</span>
445                                         <span class="method-click-advice">click to toggle source</span>
446                                 
447                                 </div>
448
449                                 <div class="method-description">
450                                         
451                                         <p>
452 Returns an aligned_string of text relative to the size of the terminal
453 window. If a line in the string exceeds the width of the terminal window
454 the line will be chopped off at the whitespace chacter closest to the end
455 of the line and prepended to the next line, keeping all indentation.
456 </p>
457 <p>
458 The terminal size is detected by default, but custom line widths can
459 passed. All strings will also be left aligned with 5 whitespace characters
460 by default.
461 </p>
462                                         
463
464                                         
465                                         <div class="method-source-code"
466                                                 id="align-text-source">
467 <pre>
468      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 310</span>
469 310:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">align_text</span>(<span class="ruby-identifier">text</span>, <span class="ruby-identifier">console_cols</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">preamble</span> = <span class="ruby-value">5</span>)
470 311:       <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">console_cols</span>
471 312:         <span class="ruby-identifier">console_cols</span> = <span class="ruby-identifier">terminal_dimensions</span>[<span class="ruby-value">0</span>]
472 313: 
473 314:         <span class="ruby-comment cmt"># if unknown size we default to the typical unix default</span>
474 315:         <span class="ruby-identifier">console_cols</span> = <span class="ruby-value">80</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">console_cols</span> <span class="ruby-operator">==</span> <span class="ruby-value">0</span>
475 316:       <span class="ruby-keyword kw">end</span>
476 317: 
477 318:       <span class="ruby-identifier">console_cols</span> <span class="ruby-operator">-=</span> <span class="ruby-identifier">preamble</span>
478 319: 
479 320:       <span class="ruby-comment cmt"># Return unaligned text if console window is too small</span>
480 321:       <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">text</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">console_cols</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-value">0</span>
481 322: 
482 323:       <span class="ruby-comment cmt"># If console is 0 this implies unknown so we assume the common</span>
483 324:       <span class="ruby-comment cmt"># minimal unix configuration of 80 characters</span>
484 325:       <span class="ruby-identifier">console_cols</span> = <span class="ruby-value">80</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">console_cols</span> <span class="ruby-operator">&lt;=</span> <span class="ruby-value">0</span>
485 326: 
486 327:       <span class="ruby-identifier">text</span> = <span class="ruby-identifier">text</span>.<span class="ruby-identifier">split</span>(<span class="ruby-value str">&quot;\n&quot;</span>)
487 328:       <span class="ruby-identifier">piece</span> = <span class="ruby-value str">''</span>
488 329:       <span class="ruby-identifier">whitespace</span> = <span class="ruby-value">0</span>
489 330: 
490 331:       <span class="ruby-identifier">text</span>.<span class="ruby-identifier">each_with_index</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">line</span>, <span class="ruby-identifier">i</span><span class="ruby-operator">|</span>
491 332:         <span class="ruby-identifier">whitespace</span> = <span class="ruby-value">0</span>
492 333: 
493 334:         <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">whitespace</span> <span class="ruby-operator">&lt;</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">line</span>[<span class="ruby-identifier">whitespace</span>].<span class="ruby-identifier">chr</span> <span class="ruby-operator">==</span> <span class="ruby-value str">' '</span>
494 335:           <span class="ruby-identifier">whitespace</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
495 336:         <span class="ruby-keyword kw">end</span>
496 337: 
497 338:         <span class="ruby-comment cmt"># If the current line is empty, indent it so that a snippet</span>
498 339:         <span class="ruby-comment cmt"># from the previous line is aligned correctly.</span>
499 340:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">line</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;&quot;</span>
500 341:           <span class="ruby-identifier">line</span> = (<span class="ruby-value str">&quot; &quot;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">whitespace</span>)
501 342:         <span class="ruby-keyword kw">end</span>
502 343: 
503 344:         <span class="ruby-comment cmt"># If text was snipped from the previous line, prepend it to the</span>
504 345:         <span class="ruby-comment cmt"># current line after any current indentation.</span>
505 346:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">piece</span> <span class="ruby-operator">!=</span> <span class="ruby-value str">''</span>
506 347:           <span class="ruby-comment cmt"># Reset whitespaces to 0 if there are more whitespaces than there are</span>
507 348:           <span class="ruby-comment cmt"># console columns</span>
508 349:           <span class="ruby-identifier">whitespace</span> = <span class="ruby-value">0</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">whitespace</span> <span class="ruby-operator">&gt;=</span> <span class="ruby-identifier">console_cols</span>
509 350: 
510 351:           <span class="ruby-comment cmt"># If the current line is empty and being prepended to, create a new</span>
511 352:           <span class="ruby-comment cmt"># empty line in the text so that formatting is preserved.</span>
512 353:           <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">text</span>[<span class="ruby-identifier">i</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">line</span> <span class="ruby-operator">==</span> (<span class="ruby-value str">&quot; &quot;</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">whitespace</span>)
513 354:             <span class="ruby-identifier">text</span>.<span class="ruby-identifier">insert</span>(<span class="ruby-identifier">i</span> <span class="ruby-operator">+</span> <span class="ruby-value">1</span>, <span class="ruby-value str">&quot;&quot;</span>)
514 355:           <span class="ruby-keyword kw">end</span>
515 356: 
516 357:           <span class="ruby-comment cmt"># Add the snipped text to the current line</span>
517 358:           <span class="ruby-identifier">line</span>.<span class="ruby-identifier">insert</span>(<span class="ruby-identifier">whitespace</span>, <span class="ruby-node">&quot;#{piece} &quot;</span>)
518 359:         <span class="ruby-keyword kw">end</span>
519 360: 
520 361:         <span class="ruby-identifier">piece</span> = <span class="ruby-value str">''</span>
521 362: 
522 363:         <span class="ruby-comment cmt"># Compare the line length to the allowed line length.</span>
523 364:         <span class="ruby-comment cmt"># If it exceeds it, snip the offending text from the line</span>
524 365:         <span class="ruby-comment cmt"># and store it so that it can be prepended to the next line.</span>
525 366:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">line</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&gt;</span> (<span class="ruby-identifier">console_cols</span> <span class="ruby-operator">+</span> <span class="ruby-identifier">preamble</span>)
526 367:           <span class="ruby-identifier">reverse</span> = <span class="ruby-identifier">console_cols</span>
527 368: 
528 369:           <span class="ruby-keyword kw">while</span> <span class="ruby-identifier">line</span>[<span class="ruby-identifier">reverse</span>].<span class="ruby-identifier">chr</span> <span class="ruby-operator">!=</span> <span class="ruby-value str">' '</span>
529 370:             <span class="ruby-identifier">reverse</span> <span class="ruby-operator">-=</span> <span class="ruby-value">1</span>
530 371:           <span class="ruby-keyword kw">end</span>
531 372: 
532 373:           <span class="ruby-identifier">piece</span> = <span class="ruby-identifier">line</span>.<span class="ruby-identifier">slice!</span>(<span class="ruby-identifier">reverse</span>, (<span class="ruby-identifier">line</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>)).<span class="ruby-identifier">lstrip</span>
533 374:         <span class="ruby-keyword kw">end</span>
534 375: 
535 376:         <span class="ruby-comment cmt"># If a snippet exists when all the columns in the text have been</span>
536 377:         <span class="ruby-comment cmt"># updated, create a new line and append the snippet to it, using</span>
537 378:         <span class="ruby-comment cmt"># the same left alignment as the last line in the text.</span>
538 379:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">piece</span> <span class="ruby-operator">!=</span> <span class="ruby-value str">''</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">text</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>].<span class="ruby-identifier">nil?</span>
539 380:           <span class="ruby-identifier">text</span>[<span class="ruby-identifier">i</span><span class="ruby-operator">+</span><span class="ruby-value">1</span>] = <span class="ruby-node">&quot;#{' ' * (whitespace)}#{piece}&quot;</span>
540 381:           <span class="ruby-identifier">piece</span> = <span class="ruby-value str">''</span>
541 382:         <span class="ruby-keyword kw">end</span>
542 383: 
543 384:         <span class="ruby-comment cmt"># Add the preamble to the line and add it to the text</span>
544 385:         <span class="ruby-identifier">line</span> = ((<span class="ruby-value str">' '</span> <span class="ruby-operator">*</span> <span class="ruby-identifier">preamble</span>) <span class="ruby-operator">+</span> <span class="ruby-identifier">line</span>)
545 386:         <span class="ruby-identifier">text</span>[<span class="ruby-identifier">i</span>] = <span class="ruby-identifier">line</span>
546 387:       <span class="ruby-keyword kw">end</span>
547 388: 
548 389:       <span class="ruby-identifier">text</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;\n&quot;</span>)
549 390:     <span class="ruby-keyword kw">end</span></pre>
550                                         </div>
551                                         
552                                 </div>
553
554                                 
555                         </div>
556
557                 
558                         <div id="color-method" class="method-detail ">
559                                 <a name="M000313"></a>
560
561                                 <div class="method-heading">
562                                 
563                                         <span class="method-name">color</span><span
564                                                 class="method-args">(code)</span>
565                                         <span class="method-click-advice">click to toggle source</span>
566                                 
567                                 </div>
568
569                                 <div class="method-description">
570                                         
571                                         <p>
572 Return color codes, if the config color= option is false just return a
573 empty string
574 </p>
575                                         
576
577                                         
578                                         <div class="method-source-code"
579                                                 id="color-source">
580 <pre>
581      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 270</span>
582 270:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">color</span>(<span class="ruby-identifier">code</span>)
583 271:       <span class="ruby-identifier">colorize</span> = <span class="ruby-constant">Config</span>.<span class="ruby-identifier">instance</span>.<span class="ruby-identifier">color</span>
584 272: 
585 273:       <span class="ruby-identifier">colors</span> = {<span class="ruby-identifier">:red</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;\e[31m&quot;</span>,
586 274:                 <span class="ruby-identifier">:green</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;\e[32m&quot;</span>,
587 275:                 <span class="ruby-identifier">:yellow</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;\e[33m&quot;</span>,
588 276:                 <span class="ruby-identifier">:cyan</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;\e[36m&quot;</span>,
589 277:                 <span class="ruby-identifier">:bold</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;\e[1m&quot;</span>,
590 278:                 <span class="ruby-identifier">:reset</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">&quot;\e[0m&quot;</span>}
591 279: 
592 280:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">colorize</span>
593 281:         <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">colors</span>[<span class="ruby-identifier">code</span>] <span class="ruby-operator">||</span> <span class="ruby-value str">&quot;&quot;</span>
594 282:       <span class="ruby-keyword kw">else</span>
595 283:         <span class="ruby-keyword kw">return</span> <span class="ruby-value str">&quot;&quot;</span>
596 284:       <span class="ruby-keyword kw">end</span>
597 285:     <span class="ruby-keyword kw">end</span></pre>
598                                         </div>
599                                         
600                                 </div>
601
602                                 
603                         </div>
604
605                 
606                         <div id="colorize-method" class="method-detail ">
607                                 <a name="M000315"></a>
608
609                                 <div class="method-heading">
610                                 
611                                         <span class="method-name">colorize</span><span
612                                                 class="method-args">(code, msg)</span>
613                                         <span class="method-click-advice">click to toggle source</span>
614                                 
615                                 </div>
616
617                                 <div class="method-description">
618                                         
619                                         <p>
620 Helper to return a string in specific color
621 </p>
622                                         
623
624                                         
625                                         <div class="method-source-code"
626                                                 id="colorize-source">
627 <pre>
628      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 288</span>
629 288:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">colorize</span>(<span class="ruby-identifier">code</span>, <span class="ruby-identifier">msg</span>)
630 289:       <span class="ruby-value str">&quot;%s%s%s&quot;</span> <span class="ruby-operator">%</span> [ <span class="ruby-identifier">color</span>(<span class="ruby-identifier">code</span>), <span class="ruby-identifier">msg</span>, <span class="ruby-identifier">color</span>(<span class="ruby-identifier">:reset</span>) ]
631 290:     <span class="ruby-keyword kw">end</span></pre>
632                                         </div>
633                                         
634                                 </div>
635
636                                 
637                         </div>
638
639                 
640                         <div id="command-in-path--method" class="method-detail ">
641                                 <a name="M000325"></a>
642
643                                 <div class="method-heading">
644                                 
645                                         <span class="method-name">command_in_path?</span><span
646                                                 class="method-args">(command)</span>
647                                         <span class="method-click-advice">click to toggle source</span>
648                                 
649                                 </div>
650
651                                 <div class="method-description">
652                                         
653                                         <p>
654 Checks in PATH returns true if the command is found
655 </p>
656                                         
657
658                                         
659                                         <div class="method-source-code"
660                                                 id="command-in-path--source">
661 <pre>
662      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 417</span>
663 417:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">command_in_path?</span>(<span class="ruby-identifier">command</span>)
664 418:       <span class="ruby-identifier">found</span> = <span class="ruby-constant">ENV</span>[<span class="ruby-value str">&quot;PATH&quot;</span>].<span class="ruby-identifier">split</span>(<span class="ruby-constant">File</span><span class="ruby-operator">::</span><span class="ruby-constant">PATH_SEPARATOR</span>).<span class="ruby-identifier">map</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">p</span><span class="ruby-operator">|</span>
665 419:         <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">p</span>, <span class="ruby-identifier">command</span>))
666 420:       <span class="ruby-keyword kw">end</span>
667 421: 
668 422:       <span class="ruby-identifier">found</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-keyword kw">true</span>)
669 423:     <span class="ruby-keyword kw">end</span></pre>
670                                         </div>
671                                         
672                                 </div>
673
674                                 
675                         </div>
676
677                 
678                         <div id="config-file-for-user-method" class="method-detail ">
679                                 <a name="M000303"></a>
680
681                                 <div class="method-heading">
682                                 
683                                         <span class="method-name">config_file_for_user</span><span
684                                                 class="method-args">()</span>
685                                         <span class="method-click-advice">click to toggle source</span>
686                                 
687                                 </div>
688
689                                 <div class="method-description">
690                                         
691                                         <p>
692 Picks a config file defaults to ~/.mcollective else
693 /etc/mcollective/client.cfg
694 </p>
695                                         
696
697                                         
698                                         <div class="method-source-code"
699                                                 id="config-file-for-user-source">
700 <pre>
701      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 148</span>
702 148:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">config_file_for_user</span>
703 149:       <span class="ruby-comment cmt"># expand_path is pretty lame, it relies on HOME environment</span>
704 150:       <span class="ruby-comment cmt"># which isnt't always there so just handling all exceptions</span>
705 151:       <span class="ruby-comment cmt"># here as cant find reverting to default</span>
706 152:       <span class="ruby-keyword kw">begin</span>
707 153:         <span class="ruby-identifier">config</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">expand_path</span>(<span class="ruby-value str">&quot;~/.mcollective&quot;</span>)
708 154: 
709 155:         <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">readable?</span>(<span class="ruby-identifier">config</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">file?</span>(<span class="ruby-identifier">config</span>)
710 156:           <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">windows?</span>
711 157:             <span class="ruby-identifier">config</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">windows_prefix</span>, <span class="ruby-value str">&quot;etc&quot;</span>, <span class="ruby-value str">&quot;client.cfg&quot;</span>)
712 158:           <span class="ruby-keyword kw">else</span>
713 159:             <span class="ruby-identifier">config</span> = <span class="ruby-value str">&quot;/etc/mcollective/client.cfg&quot;</span>
714 160:           <span class="ruby-keyword kw">end</span>
715 161:         <span class="ruby-keyword kw">end</span>
716 162:       <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
717 163:         <span class="ruby-keyword kw">if</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">windows?</span>
718 164:           <span class="ruby-identifier">config</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">windows_prefix</span>, <span class="ruby-value str">&quot;etc&quot;</span>, <span class="ruby-value str">&quot;client.cfg&quot;</span>)
719 165:         <span class="ruby-keyword kw">else</span>
720 166:           <span class="ruby-identifier">config</span> = <span class="ruby-value str">&quot;/etc/mcollective/client.cfg&quot;</span>
721 167:         <span class="ruby-keyword kw">end</span>
722 168:       <span class="ruby-keyword kw">end</span>
723 169: 
724 170:       <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">config</span>
725 171:     <span class="ruby-keyword kw">end</span></pre>
726                                         </div>
727                                         
728                                 </div>
729
730                                 
731                         </div>
732
733                 
734                         <div id="default-options-method" class="method-detail ">
735                                 <a name="M000304"></a>
736
737                                 <div class="method-heading">
738                                 
739                                         <span class="method-name">default_options</span><span
740                                                 class="method-args">()</span>
741                                         <span class="method-click-advice">click to toggle source</span>
742                                 
743                                 </div>
744
745                                 <div class="method-description">
746                                         
747                                         <p>
748 Creates a standard options hash
749 </p>
750                                         
751
752                                         
753                                         <div class="method-source-code"
754                                                 id="default-options-source">
755 <pre>
756      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 174</span>
757 174:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">default_options</span>
758 175:       {<span class="ruby-identifier">:verbose</span>           =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">false</span>,
759 176:        <span class="ruby-identifier">:disctimeout</span>       =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
760 177:        <span class="ruby-identifier">:timeout</span>           =<span class="ruby-operator">&gt;</span> <span class="ruby-value">5</span>,
761 178:        <span class="ruby-identifier">:config</span>            =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">config_file_for_user</span>,
762 179:        <span class="ruby-identifier">:collective</span>        =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
763 180:        <span class="ruby-identifier">:discovery_method</span>  =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>,
764 181:        <span class="ruby-identifier">:discovery_options</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Config</span>.<span class="ruby-identifier">instance</span>.<span class="ruby-identifier">default_discovery_options</span>,
765 182:        <span class="ruby-identifier">:filter</span>            =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">empty_filter</span>}
766 183:     <span class="ruby-keyword kw">end</span></pre>
767                                         </div>
768                                         
769                                 </div>
770
771                                 
772                         </div>
773
774                 
775                         <div id="empty-filter-method" class="method-detail ">
776                                 <a name="M000301"></a>
777
778                                 <div class="method-heading">
779                                 
780                                         <span class="method-name">empty_filter</span><span
781                                                 class="method-args">()</span>
782                                         <span class="method-click-advice">click to toggle source</span>
783                                 
784                                 </div>
785
786                                 <div class="method-description">
787                                         
788                                         <p>
789 Creates an empty filter
790 </p>
791                                         
792
793                                         
794                                         <div class="method-source-code"
795                                                 id="empty-filter-source">
796 <pre>
797      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 132</span>
798 132:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">empty_filter</span>
799 133:       {<span class="ruby-value str">&quot;fact&quot;</span>     =<span class="ruby-operator">&gt;</span> [],
800 134:        <span class="ruby-value str">&quot;cf_class&quot;</span> =<span class="ruby-operator">&gt;</span> [],
801 135:        <span class="ruby-value str">&quot;agent&quot;</span>    =<span class="ruby-operator">&gt;</span> [],
802 136:        <span class="ruby-value str">&quot;identity&quot;</span> =<span class="ruby-operator">&gt;</span> [],
803 137:        <span class="ruby-value str">&quot;compound&quot;</span> =<span class="ruby-operator">&gt;</span> []}
804 138:     <span class="ruby-keyword kw">end</span></pre>
805                                         </div>
806                                         
807                                 </div>
808
809                                 
810                         </div>
811
812                 
813                         <div id="empty-filter--method" class="method-detail ">
814                                 <a name="M000300"></a>
815
816                                 <div class="method-heading">
817                                 
818                                         <span class="method-name">empty_filter?</span><span
819                                                 class="method-args">(filter)</span>
820                                         <span class="method-click-advice">click to toggle source</span>
821                                 
822                                 </div>
823
824                                 <div class="method-description">
825                                         
826                                         <p>
827 Checks if the passed in filter is an empty one
828 </p>
829                                         
830
831                                         
832                                         <div class="method-source-code"
833                                                 id="empty-filter--source">
834 <pre>
835      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 127</span>
836 127:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">empty_filter?</span>(<span class="ruby-identifier">filter</span>)
837 128:       <span class="ruby-identifier">filter</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">empty_filter</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">filter</span> <span class="ruby-operator">==</span> {}
838 129:     <span class="ruby-keyword kw">end</span></pre>
839                                         </div>
840                                         
841                                 </div>
842
843                                 
844                         </div>
845
846                 
847                         <div id="get-fact-method" class="method-detail ">
848                                 <a name="M000297"></a>
849
850                                 <div class="method-heading">
851                                 
852                                         <span class="method-name">get_fact</span><span
853                                                 class="method-args">(fact)</span>
854                                         <span class="method-click-advice">click to toggle source</span>
855                                 
856                                 </div>
857
858                                 <div class="method-description">
859                                         
860                                         <p>
861 Gets the value of a specific fact, mostly just a duplicate of <a
862 href="Facts.html#M000483">MCollective::Facts.get_fact</a> but it kind of
863 goes with the other classes here
864 </p>
865                                         
866
867                                         
868                                         <div class="method-source-code"
869                                                 id="get-fact-source">
870 <pre>
871     <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 63</span>
872 63:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">get_fact</span>(<span class="ruby-identifier">fact</span>)
873 64:       <span class="ruby-constant">Facts</span>.<span class="ruby-identifier">get_fact</span>(<span class="ruby-identifier">fact</span>)
874 65:     <span class="ruby-keyword kw">end</span></pre>
875                                         </div>
876                                         
877                                 </div>
878
879                                 
880                         </div>
881
882                 
883                         <div id="has-agent--method" class="method-detail ">
884                                 <a name="M000294"></a>
885
886                                 <div class="method-heading">
887                                 
888                                         <span class="method-name">has_agent?</span><span
889                                                 class="method-args">(agent)</span>
890                                         <span class="method-click-advice">click to toggle source</span>
891                                 
892                                 </div>
893
894                                 <div class="method-description">
895                                         
896                                         <p>
897 Finds out if this <a href="../MCollective.html">MCollective</a> has an
898 agent by the name passed
899 </p>
900 <p>
901 If the passed name starts with a / it&#8217;s assumed to be regex and will
902 use regex to match
903 </p>
904                                         
905
906                                         
907                                         <div class="method-source-code"
908                                                 id="has-agent--source">
909 <pre>
910     <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 10</span>
911 10:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">has_agent?</span>(<span class="ruby-identifier">agent</span>)
912 11:       <span class="ruby-identifier">agent</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">agent</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-value str">&quot;\/&quot;</span>, <span class="ruby-value str">&quot;&quot;</span>)) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">agent</span>.<span class="ruby-identifier">match</span>(<span class="ruby-value str">&quot;^/&quot;</span>)
913 12: 
914 13:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">agent</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Regexp</span>)
915 14:         <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Agents</span>.<span class="ruby-identifier">agentlist</span>.<span class="ruby-identifier">grep</span>(<span class="ruby-identifier">agent</span>).<span class="ruby-identifier">size</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">0</span>
916 15:           <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
917 16:         <span class="ruby-keyword kw">else</span>
918 17:           <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
919 18:         <span class="ruby-keyword kw">end</span>
920 19:       <span class="ruby-keyword kw">else</span>
921 20:         <span class="ruby-keyword kw">return</span> <span class="ruby-constant">Agents</span>.<span class="ruby-identifier">agentlist</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">agent</span>)
922 21:       <span class="ruby-keyword kw">end</span>
923 22: 
924 23:       <span class="ruby-keyword kw">false</span>
925 24:     <span class="ruby-keyword kw">end</span></pre>
926                                         </div>
927                                         
928                                 </div>
929
930                                 
931                         </div>
932
933                 
934                         <div id="has-cf-class--method" class="method-detail ">
935                                 <a name="M000296"></a>
936
937                                 <div class="method-heading">
938                                 
939                                         <span class="method-name">has_cf_class?</span><span
940                                                 class="method-args">(klass)</span>
941                                         <span class="method-click-advice">click to toggle source</span>
942                                 
943                                 </div>
944
945                                 <div class="method-description">
946                                         
947                                         <p>
948 Checks if this node has a configuration management class by parsing the a
949 text file with just a list of classes, recipes, roles etc. This is ala the
950 classes.txt from puppet.
951 </p>
952 <p>
953 If the passed name starts with a / it&#8217;s assumed to be regex and will
954 use regex to match
955 </p>
956                                         
957
958                                         
959                                         <div class="method-source-code"
960                                                 id="has-cf-class--source">
961 <pre>
962     <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 40</span>
963 40:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">has_cf_class?</span>(<span class="ruby-identifier">klass</span>)
964 41:       <span class="ruby-identifier">klass</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">klass</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-value str">&quot;\/&quot;</span>, <span class="ruby-value str">&quot;&quot;</span>)) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">match</span>(<span class="ruby-value str">&quot;^/&quot;</span>)
965 42:       <span class="ruby-identifier">cfile</span> = <span class="ruby-constant">Config</span>.<span class="ruby-identifier">instance</span>.<span class="ruby-identifier">classesfile</span>
966 43: 
967 44:       <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Looking for configuration management classes in #{cfile}&quot;</span>)
968 45: 
969 46:       <span class="ruby-keyword kw">begin</span>
970 47:         <span class="ruby-constant">File</span>.<span class="ruby-identifier">readlines</span>(<span class="ruby-identifier">cfile</span>).<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">k</span><span class="ruby-operator">|</span>
971 48:           <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Regexp</span>)
972 49:             <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">k</span>.<span class="ruby-identifier">chomp</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">klass</span>)
973 50:           <span class="ruby-keyword kw">else</span>
974 51:             <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">k</span>.<span class="ruby-identifier">chomp</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">klass</span>
975 52:           <span class="ruby-keyword kw">end</span>
976 53:         <span class="ruby-keyword kw">end</span>
977 54:       <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">Exception</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">e</span>
978 55:         <span class="ruby-constant">Log</span>.<span class="ruby-identifier">warn</span>(<span class="ruby-node">&quot;Parsing classes file '#{cfile}' failed: #{e.class}: #{e}&quot;</span>)
979 56:       <span class="ruby-keyword kw">end</span>
980 57: 
981 58:       <span class="ruby-keyword kw">false</span>
982 59:     <span class="ruby-keyword kw">end</span></pre>
983                                         </div>
984                                         
985                                 </div>
986
987                                 
988                         </div>
989
990                 
991                         <div id="has-fact--method" class="method-detail ">
992                                 <a name="M000298"></a>
993
994                                 <div class="method-heading">
995                                 
996                                         <span class="method-name">has_fact?</span><span
997                                                 class="method-args">(fact, value, operator)</span>
998                                         <span class="method-click-advice">click to toggle source</span>
999                                 
1000                                 </div>
1001
1002                                 <div class="method-description">
1003                                         
1004                                         <p>
1005 Compares fact == value,
1006 </p>
1007 <p>
1008 If the passed value starts with a / it&#8217;s assumed to be regex and will
1009 use regex to match
1010 </p>
1011                                         
1012
1013                                         
1014                                         <div class="method-source-code"
1015                                                 id="has-fact--source">
1016 <pre>
1017      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 71</span>
1018  71:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">has_fact?</span>(<span class="ruby-identifier">fact</span>, <span class="ruby-identifier">value</span>, <span class="ruby-identifier">operator</span>)
1019  72: 
1020  73:       <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Comparing #{fact} #{operator} #{value}&quot;</span>)
1021  74:       <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;where :fact = '#{fact}', :operator = '#{operator}', :value = '#{value}'&quot;</span>)
1022  75: 
1023  76:       <span class="ruby-identifier">fact</span> = <span class="ruby-constant">Facts</span>[<span class="ruby-identifier">fact</span>]
1024  77:       <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fact</span>.<span class="ruby-identifier">nil?</span>
1025  78: 
1026  79:       <span class="ruby-identifier">fact</span> = <span class="ruby-identifier">fact</span>.<span class="ruby-identifier">clone</span>
1027  80: 
1028  81:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">operator</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'=~'</span>
1029  82:         <span class="ruby-comment cmt"># to maintain backward compat we send the value</span>
1030  83:         <span class="ruby-comment cmt"># as /.../ which is what 1.0.x needed.  this strips</span>
1031  84:         <span class="ruby-comment cmt"># off the /'s wich is what we need here</span>
1032  85:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">value</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^\/(.+)\/$/</span>
1033  86:           <span class="ruby-identifier">value</span> = <span class="ruby-identifier">$1</span>
1034  87:         <span class="ruby-keyword kw">end</span>
1035  88: 
1036  89:         <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fact</span>.<span class="ruby-identifier">match</span>(<span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">value</span>))
1037  90: 
1038  91:       <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">operator</span> <span class="ruby-operator">==</span> <span class="ruby-value str">&quot;==&quot;</span>
1039  92:         <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fact</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">value</span>
1040  93: 
1041  94:       <span class="ruby-keyword kw">elsif</span> [<span class="ruby-value str">'&lt;='</span>, <span class="ruby-value str">'&gt;='</span>, <span class="ruby-value str">'&lt;'</span>, <span class="ruby-value str">'&gt;'</span>, <span class="ruby-value str">'!='</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">operator</span>)
1042  95:         <span class="ruby-comment cmt"># Yuk - need to type cast, but to_i and to_f are overzealous</span>
1043  96:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">value</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^[0-9]+$/</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">fact</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^[0-9]+$/</span>
1044  97:           <span class="ruby-identifier">fact</span> = <span class="ruby-constant">Integer</span>(<span class="ruby-identifier">fact</span>)
1045  98:           <span class="ruby-identifier">value</span> = <span class="ruby-constant">Integer</span>(<span class="ruby-identifier">value</span>)
1046  99:         <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">value</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^[0-9]+.[0-9]+$/</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">fact</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^[0-9]+.[0-9]+$/</span>
1047 100:           <span class="ruby-identifier">fact</span> = <span class="ruby-constant">Float</span>(<span class="ruby-identifier">fact</span>)
1048 101:           <span class="ruby-identifier">value</span> = <span class="ruby-constant">Float</span>(<span class="ruby-identifier">value</span>)
1049 102:         <span class="ruby-keyword kw">end</span>
1050 103: 
1051 104:         <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">eval</span>(<span class="ruby-node">&quot;fact #{operator} value&quot;</span>)
1052 105:       <span class="ruby-keyword kw">end</span>
1053 106: 
1054 107:       <span class="ruby-keyword kw">false</span>
1055 108:     <span class="ruby-keyword kw">end</span></pre>
1056                                         </div>
1057                                         
1058                                 </div>
1059
1060                                 
1061                         </div>
1062
1063                 
1064                         <div id="has-identity--method" class="method-detail ">
1065                                 <a name="M000299"></a>
1066
1067                                 <div class="method-heading">
1068                                 
1069                                         <span class="method-name">has_identity?</span><span
1070                                                 class="method-args">(identity)</span>
1071                                         <span class="method-click-advice">click to toggle source</span>
1072                                 
1073                                 </div>
1074
1075                                 <div class="method-description">
1076                                         
1077                                         <p>
1078 Checks if the configured identity matches the one supplied
1079 </p>
1080 <p>
1081 If the passed name starts with a / it&#8217;s assumed to be regex and will
1082 use regex to match
1083 </p>
1084                                         
1085
1086                                         
1087                                         <div class="method-source-code"
1088                                                 id="has-identity--source">
1089 <pre>
1090      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 114</span>
1091 114:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">has_identity?</span>(<span class="ruby-identifier">identity</span>)
1092 115:       <span class="ruby-identifier">identity</span> = <span class="ruby-constant">Regexp</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">identity</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-value str">&quot;\/&quot;</span>, <span class="ruby-value str">&quot;&quot;</span>)) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">identity</span>.<span class="ruby-identifier">match</span>(<span class="ruby-value str">&quot;^/&quot;</span>)
1093 116: 
1094 117:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">identity</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Regexp</span>)
1095 118:         <span class="ruby-keyword kw">return</span> <span class="ruby-constant">Config</span>.<span class="ruby-identifier">instance</span>.<span class="ruby-identifier">identity</span>.<span class="ruby-identifier">match</span>(<span class="ruby-identifier">identity</span>)
1096 119:       <span class="ruby-keyword kw">else</span>
1097 120:         <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Config</span>.<span class="ruby-identifier">instance</span>.<span class="ruby-identifier">identity</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">identity</span>
1098 121:       <span class="ruby-keyword kw">end</span>
1099 122: 
1100 123:       <span class="ruby-keyword kw">false</span>
1101 124:     <span class="ruby-keyword kw">end</span></pre>
1102                                         </div>
1103                                         
1104                                 </div>
1105
1106                                 
1107                         </div>
1108
1109                 
1110                         <div id="loadclass-method" class="method-detail ">
1111                                 <a name="M000308"></a>
1112
1113                                 <div class="method-heading">
1114                                 
1115                                         <span class="method-name">loadclass</span><span
1116                                                 class="method-args">(klass)</span>
1117                                         <span class="method-click-advice">click to toggle source</span>
1118                                 
1119                                 </div>
1120
1121                                 <div class="method-description">
1122                                         
1123                                         <p>
1124 Wrapper around <a
1125 href="PluginManager.html#M000084">PluginManager.loadclass</a>
1126 </p>
1127                                         
1128
1129                                         
1130                                         <div class="method-source-code"
1131                                                 id="loadclass-source">
1132 <pre>
1133      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 224</span>
1134 224:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">loadclass</span>(<span class="ruby-identifier">klass</span>)
1135 225:       <span class="ruby-constant">PluginManager</span>.<span class="ruby-identifier">loadclass</span>(<span class="ruby-identifier">klass</span>)
1136 226:     <span class="ruby-keyword kw">end</span></pre>
1137                                         </div>
1138                                         
1139                                 </div>
1140
1141                                 
1142                         </div>
1143
1144                 
1145                         <div id="make-subscriptions-method" class="method-detail ">
1146                                 <a name="M000305"></a>
1147
1148                                 <div class="method-heading">
1149                                 
1150                                         <span class="method-name">make_subscriptions</span><span
1151                                                 class="method-args">(agent, type, collective=nil)</span>
1152                                         <span class="method-click-advice">click to toggle source</span>
1153                                 
1154                                 </div>
1155
1156                                 <div class="method-description">
1157                                         
1158                                         <p class="missing-docs">(Not documented)</p>
1159                                         
1160
1161                                         
1162                                         <div class="method-source-code"
1163                                                 id="make-subscriptions-source">
1164 <pre>
1165      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 185</span>
1166 185:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">make_subscriptions</span>(<span class="ruby-identifier">agent</span>, <span class="ruby-identifier">type</span>, <span class="ruby-identifier">collective</span>=<span class="ruby-keyword kw">nil</span>)
1167 186:       <span class="ruby-identifier">config</span> = <span class="ruby-constant">Config</span>.<span class="ruby-identifier">instance</span>
1168 187: 
1169 188:       <span class="ruby-identifier">raise</span>(<span class="ruby-node">&quot;Unknown target type #{type}&quot;</span>) <span class="ruby-keyword kw">unless</span> [<span class="ruby-identifier">:broadcast</span>, <span class="ruby-identifier">:directed</span>, <span class="ruby-identifier">:reply</span>].<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">type</span>)
1170 189: 
1171 190:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">collective</span>.<span class="ruby-identifier">nil?</span>
1172 191:         <span class="ruby-identifier">config</span>.<span class="ruby-identifier">collectives</span>.<span class="ruby-identifier">map</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span>
1173 192:           {<span class="ruby-identifier">:agent</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">agent</span>, <span class="ruby-identifier">:type</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">type</span>, <span class="ruby-identifier">:collective</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">c</span>}
1174 193:         <span class="ruby-keyword kw">end</span>
1175 194:       <span class="ruby-keyword kw">else</span>
1176 195:         <span class="ruby-identifier">raise</span>(<span class="ruby-node">&quot;Unknown collective '#{collective}' known collectives are '#{config.collectives.join ', '}'&quot;</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">config</span>.<span class="ruby-identifier">collectives</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">collective</span>)
1177 196: 
1178 197:         [{<span class="ruby-identifier">:agent</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">agent</span>, <span class="ruby-identifier">:type</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">type</span>, <span class="ruby-identifier">:collective</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">collective</span>}]
1179 198:       <span class="ruby-keyword kw">end</span>
1180 199:     <span class="ruby-keyword kw">end</span></pre>
1181                                         </div>
1182                                         
1183                                 </div>
1184
1185                                 
1186                         </div>
1187
1188                 
1189                         <div id="mcollective-version-method" class="method-detail ">
1190                                 <a name="M000317"></a>
1191
1192                                 <div class="method-heading">
1193                                 
1194                                         <span class="method-name">mcollective_version</span><span
1195                                                 class="method-args">()</span>
1196                                         <span class="method-click-advice">click to toggle source</span>
1197                                 
1198                                 </div>
1199
1200                                 <div class="method-description">
1201                                         
1202                                         <p class="missing-docs">(Not documented)</p>
1203                                         
1204
1205                                         
1206                                         <div class="method-source-code"
1207                                                 id="mcollective-version-source">
1208 <pre>
1209      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 298</span>
1210 298:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">mcollective_version</span>
1211 299:       <span class="ruby-constant">MCollective</span><span class="ruby-operator">::</span><span class="ruby-constant">VERSION</span>
1212 300:     <span class="ruby-keyword kw">end</span></pre>
1213                                         </div>
1214                                         
1215                                 </div>
1216
1217                                 
1218                         </div>
1219
1220                 
1221                         <div id="parse-fact-string-method" class="method-detail ">
1222                                 <a name="M000309"></a>
1223
1224                                 <div class="method-heading">
1225                                 
1226                                         <span class="method-name">parse_fact_string</span><span
1227                                                 class="method-args">(fact)</span>
1228                                         <span class="method-click-advice">click to toggle source</span>
1229                                 
1230                                 </div>
1231
1232                                 <div class="method-description">
1233                                         
1234                                         <p>
1235 Parse a fact filter string like foo=bar into the tuple hash thats needed
1236 </p>
1237                                         
1238
1239                                         
1240                                         <div class="method-source-code"
1241                                                 id="parse-fact-string-source">
1242 <pre>
1243      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 229</span>
1244 229:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">parse_fact_string</span>(<span class="ruby-identifier">fact</span>)
1245 230:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">fact</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^([^ ]+?)[ ]*=&gt;[ ]*(.+)/</span>
1246 231:         <span class="ruby-keyword kw">return</span> {<span class="ruby-identifier">:fact</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">$1</span>, <span class="ruby-identifier">:value</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">$2</span>, <span class="ruby-identifier">:operator</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'&gt;='</span> }
1247 232:       <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">fact</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^([^ ]+?)[ ]*=&lt;[ ]*(.+)/</span>
1248 233:         <span class="ruby-keyword kw">return</span> {<span class="ruby-identifier">:fact</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">$1</span>, <span class="ruby-identifier">:value</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">$2</span>, <span class="ruby-identifier">:operator</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'&lt;='</span> }
1249 234:       <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">fact</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^([^ ]+?)[ ]*(&lt;=|&gt;=|&lt;|&gt;|!=|==|=~)[ ]*(.+)/</span>
1250 235:         <span class="ruby-keyword kw">return</span> {<span class="ruby-identifier">:fact</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">$1</span>, <span class="ruby-identifier">:value</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">$3</span>, <span class="ruby-identifier">:operator</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">$2</span> }
1251 236:       <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">fact</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^(.+?)[ ]*=[ ]*\/(.+)\/$/</span>
1252 237:         <span class="ruby-keyword kw">return</span> {<span class="ruby-identifier">:fact</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">$1</span>, <span class="ruby-identifier">:value</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-node">&quot;/#{$2}/&quot;</span>, <span class="ruby-identifier">:operator</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'=~'</span> }
1253 238:       <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">fact</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^([^= ]+?)[ ]*=[ ]*(.+)/</span>
1254 239:         <span class="ruby-keyword kw">return</span> {<span class="ruby-identifier">:fact</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">$1</span>, <span class="ruby-identifier">:value</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">$2</span>, <span class="ruby-identifier">:operator</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value str">'=='</span> }
1255 240:       <span class="ruby-keyword kw">else</span>
1256 241:         <span class="ruby-identifier">raise</span> <span class="ruby-node">&quot;Could not parse fact #{fact} it does not appear to be in a valid format&quot;</span>
1257 242:       <span class="ruby-keyword kw">end</span>
1258 243:     <span class="ruby-keyword kw">end</span></pre>
1259                                         </div>
1260                                         
1261                                 </div>
1262
1263                                 
1264                         </div>
1265
1266                 
1267                         <div id="ruby-version-method" class="method-detail ">
1268                                 <a name="M000316"></a>
1269
1270                                 <div class="method-heading">
1271                                 
1272                                         <span class="method-name">ruby_version</span><span
1273                                                 class="method-args">()</span>
1274                                         <span class="method-click-advice">click to toggle source</span>
1275                                 
1276                                 </div>
1277
1278                                 <div class="method-description">
1279                                         
1280                                         <p>
1281 Returns the current ruby version as per RUBY_VERSION, mostly doing this
1282 here to aid testing
1283 </p>
1284                                         
1285
1286                                         
1287                                         <div class="method-source-code"
1288                                                 id="ruby-version-source">
1289 <pre>
1290      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 294</span>
1291 294:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">ruby_version</span>
1292 295:       <span class="ruby-constant">RUBY_VERSION</span>
1293 296:     <span class="ruby-keyword kw">end</span></pre>
1294                                         </div>
1295                                         
1296                                 </div>
1297
1298                                 
1299                         </div>
1300
1301                 
1302                         <div id="setup-windows-sleeper-method" class="method-detail ">
1303                                 <a name="M000295"></a>
1304
1305                                 <div class="method-heading">
1306                                 
1307                                         <span class="method-name">setup_windows_sleeper</span><span
1308                                                 class="method-args">()</span>
1309                                         <span class="method-click-advice">click to toggle source</span>
1310                                 
1311                                 </div>
1312
1313                                 <div class="method-description">
1314                                         
1315                                         <p>
1316 On windows ^c can&#8217;t interrupt the VM if its blocking on IO, so this
1317 sets up a dummy thread that sleeps and this will have the end result of
1318 being interruptable at least once a second. This is a common pattern found
1319 in Rails etc
1320 </p>
1321                                         
1322
1323                                         
1324                                         <div class="method-source-code"
1325                                                 id="setup-windows-sleeper-source">
1326 <pre>
1327     <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 30</span>
1328 30:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">setup_windows_sleeper</span>
1329 31:       <span class="ruby-constant">Thread</span>.<span class="ruby-identifier">new</span> { <span class="ruby-identifier">loop</span> { <span class="ruby-identifier">sleep</span> <span class="ruby-value">1</span> } } <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Util</span>.<span class="ruby-identifier">windows?</span>
1330 32:     <span class="ruby-keyword kw">end</span></pre>
1331                                         </div>
1332                                         
1333                                 </div>
1334
1335                                 
1336                         </div>
1337
1338                 
1339                         <div id="shellescape-method" class="method-detail ">
1340                                 <a name="M000311"></a>
1341
1342                                 <div class="method-heading">
1343                                 
1344                                         <span class="method-name">shellescape</span><span
1345                                                 class="method-args">(str)</span>
1346                                         <span class="method-click-advice">click to toggle source</span>
1347                                 
1348                                 </div>
1349
1350                                 <div class="method-description">
1351                                         
1352                                         <p>
1353 Escapes a string so it&#8217;s safe to use in system() or backticks
1354 </p>
1355 <p>
1356 Taken from Shellwords#shellescape since it&#8217;s only in a few ruby
1357 versions
1358 </p>
1359                                         
1360
1361                                         
1362                                         <div class="method-source-code"
1363                                                 id="shellescape-source">
1364 <pre>
1365      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 248</span>
1366 248:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">shellescape</span>(<span class="ruby-identifier">str</span>)
1367 249:       <span class="ruby-keyword kw">return</span> <span class="ruby-value str">&quot;''&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">str</span>.<span class="ruby-identifier">empty?</span>
1368 250: 
1369 251:       <span class="ruby-identifier">str</span> = <span class="ruby-identifier">str</span>.<span class="ruby-identifier">dup</span>
1370 252: 
1371 253:       <span class="ruby-comment cmt"># Process as a single byte sequence because not all shell</span>
1372 254:       <span class="ruby-comment cmt"># implementations are multibyte aware.</span>
1373 255:       <span class="ruby-identifier">str</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/([^A-Za-z0-9_\-.,:\/@\n])/n</span>, <span class="ruby-value str">&quot;\\\\\\1&quot;</span>)
1374 256: 
1375 257:       <span class="ruby-comment cmt"># A LF cannot be escaped with a backslash because a backslash + LF</span>
1376 258:       <span class="ruby-comment cmt"># combo is regarded as line continuation and simply ignored.</span>
1377 259:       <span class="ruby-identifier">str</span>.<span class="ruby-identifier">gsub!</span>(<span class="ruby-regexp re">/\n/</span>, <span class="ruby-value str">&quot;'\n'&quot;</span>)
1378 260: 
1379 261:       <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">str</span>
1380 262:     <span class="ruby-keyword kw">end</span></pre>
1381                                         </div>
1382                                         
1383                                 </div>
1384
1385                                 
1386                         </div>
1387
1388                 
1389                         <div id="str-to-bool-method" class="method-detail ">
1390                                 <a name="M000329"></a>
1391
1392                                 <div class="method-heading">
1393                                 
1394                                         <span class="method-name">str_to_bool</span><span
1395                                                 class="method-args">(val)</span>
1396                                         <span class="method-click-advice">click to toggle source</span>
1397                                 
1398                                 </div>
1399
1400                                 <div class="method-description">
1401                                         
1402                                         <p>
1403 Converts a string into a boolean value Strings matching 1,y,yes,true or t
1404 will return TrueClass Any other value will return FalseClass
1405 </p>
1406                                         
1407
1408                                         
1409                                         <div class="method-source-code"
1410                                                 id="str-to-bool-source">
1411 <pre>
1412      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 477</span>
1413 477:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">str_to_bool</span>(<span class="ruby-identifier">val</span>)
1414 478:       <span class="ruby-identifier">clean_val</span> = <span class="ruby-identifier">val</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">strip</span>
1415 479:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">clean_val</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^(1|yes|true|y|t)$/i</span>
1416 480:         <span class="ruby-keyword kw">return</span>  <span class="ruby-keyword kw">true</span>
1417 481:       <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">clean_val</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^(0|no|false|n|f)$/i</span>
1418 482:         <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
1419 483:       <span class="ruby-keyword kw">else</span>
1420 484:         <span class="ruby-identifier">raise_code</span>(<span class="ruby-identifier">:PLMC42</span>, <span class="ruby-value str">&quot;Cannot convert string value '%{value}' into a boolean.&quot;</span>, <span class="ruby-identifier">:error</span>, <span class="ruby-identifier">:value</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">clean_val</span>)
1421 485:       <span class="ruby-keyword kw">end</span>
1422 486:     <span class="ruby-keyword kw">end</span></pre>
1423                                         </div>
1424                                         
1425                                 </div>
1426
1427                                 
1428                         </div>
1429
1430                 
1431                         <div id="subscribe-method" class="method-detail ">
1432                                 <a name="M000306"></a>
1433
1434                                 <div class="method-heading">
1435                                 
1436                                         <span class="method-name">subscribe</span><span
1437                                                 class="method-args">(targets)</span>
1438                                         <span class="method-click-advice">click to toggle source</span>
1439                                 
1440                                 </div>
1441
1442                                 <div class="method-description">
1443                                         
1444                                         <p>
1445 Helper to subscribe to a topic on multiple collectives or just one
1446 </p>
1447                                         
1448
1449                                         
1450                                         <div class="method-source-code"
1451                                                 id="subscribe-source">
1452 <pre>
1453      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 202</span>
1454 202:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">subscribe</span>(<span class="ruby-identifier">targets</span>)
1455 203:       <span class="ruby-identifier">connection</span> = <span class="ruby-constant">PluginManager</span>[<span class="ruby-value str">&quot;connector_plugin&quot;</span>]
1456 204: 
1457 205:       <span class="ruby-identifier">targets</span> = [<span class="ruby-identifier">targets</span>].<span class="ruby-identifier">flatten</span>
1458 206: 
1459 207:       <span class="ruby-identifier">targets</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">target</span><span class="ruby-operator">|</span>
1460 208:         <span class="ruby-identifier">connection</span>.<span class="ruby-identifier">subscribe</span>(<span class="ruby-identifier">target</span>[<span class="ruby-identifier">:agent</span>], <span class="ruby-identifier">target</span>[<span class="ruby-identifier">:type</span>], <span class="ruby-identifier">target</span>[<span class="ruby-identifier">:collective</span>])
1461 209:       <span class="ruby-keyword kw">end</span>
1462 210:     <span class="ruby-keyword kw">end</span></pre>
1463                                         </div>
1464                                         
1465                                 </div>
1466
1467                                 
1468                         </div>
1469
1470                 
1471                         <div id="t-method" class="method-detail ">
1472                                 <a name="M000330"></a>
1473
1474                                 <div class="method-heading">
1475                                 
1476                                         <span class="method-name">t</span><span
1477                                                 class="method-args">(msgid, args={})</span>
1478                                         <span class="method-click-advice">click to toggle source</span>
1479                                 
1480                                 </div>
1481
1482                                 <div class="method-description">
1483                                         
1484                                         <p>
1485 Looks up and interprolate the hash values into a i18n string
1486 </p>
1487                                         
1488
1489                                         
1490                                         <div class="method-source-code"
1491                                                 id="t-source">
1492 <pre>
1493      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 489</span>
1494 489:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">t</span>(<span class="ruby-identifier">msgid</span>, <span class="ruby-identifier">args</span>={})
1495 490:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">msgid</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Symbol</span>)
1496 491:         <span class="ruby-constant">I18n</span>.<span class="ruby-identifier">t</span>(<span class="ruby-value str">&quot;%s.pattern&quot;</span> <span class="ruby-operator">%</span> <span class="ruby-identifier">msgid</span>, <span class="ruby-identifier">args</span>)
1497 492:       <span class="ruby-keyword kw">else</span>
1498 493:         <span class="ruby-constant">I18n</span>.<span class="ruby-identifier">t</span>(<span class="ruby-identifier">msgid</span>, <span class="ruby-identifier">args</span>)
1499 494:       <span class="ruby-keyword kw">end</span>
1500 495:     <span class="ruby-keyword kw">end</span></pre>
1501                                         </div>
1502                                         
1503                                 </div>
1504
1505                                 
1506                         </div>
1507
1508                 
1509                         <div id="templatepath-method" class="method-detail ">
1510                                 <a name="M000331"></a>
1511
1512                                 <div class="method-heading">
1513                                 
1514                                         <span class="method-name">templatepath</span><span
1515                                                 class="method-args">(template_file)</span>
1516                                         <span class="method-click-advice">click to toggle source</span>
1517                                 
1518                                 </div>
1519
1520                                 <div class="method-description">
1521                                         
1522                                         <p>
1523 Looks up the template directory and returns its full path
1524 </p>
1525                                         
1526
1527                                         
1528                                         <div class="method-source-code"
1529                                                 id="templatepath-source">
1530 <pre>
1531      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 498</span>
1532 498:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">templatepath</span>(<span class="ruby-identifier">template_file</span>)
1533 499:       <span class="ruby-identifier">config_dir</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">dirname</span>(<span class="ruby-constant">Config</span>.<span class="ruby-identifier">instance</span>.<span class="ruby-identifier">configfile</span>)
1534 500:       <span class="ruby-identifier">template_path</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-identifier">config_dir</span>, <span class="ruby-identifier">template_file</span>)
1535 501:       <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">template_path</span> <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-identifier">template_path</span>)
1536 502: 
1537 503:       <span class="ruby-identifier">template_path</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">&quot;/etc/mcollective&quot;</span>, <span class="ruby-identifier">template_file</span>)
1538 504:       <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">template_path</span>
1539 505:     <span class="ruby-keyword kw">end</span></pre>
1540                                         </div>
1541                                         
1542                                 </div>
1543
1544                                 
1545                         </div>
1546
1547                 
1548                         <div id="terminal-dimensions-method" class="method-detail ">
1549                                 <a name="M000322"></a>
1550
1551                                 <div class="method-heading">
1552                                 
1553                                         <span class="method-name">terminal_dimensions</span><span
1554                                                 class="method-args">(stdout = STDOUT, environment = ENV)</span>
1555                                         <span class="method-click-advice">click to toggle source</span>
1556                                 
1557                                 </div>
1558
1559                                 <div class="method-description">
1560                                         
1561                                         <p>
1562 Figures out the columns and lines of the current tty
1563 </p>
1564 <p>
1565 Returns [0, 0] if it can&#8217;t figure it out or if you&#8217;re not
1566 running on a tty
1567 </p>
1568                                         
1569
1570                                         
1571                                         <div class="method-source-code"
1572                                                 id="terminal-dimensions-source">
1573 <pre>
1574      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 396</span>
1575 396:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">terminal_dimensions</span>(<span class="ruby-identifier">stdout</span> = <span class="ruby-constant">STDOUT</span>, <span class="ruby-identifier">environment</span> = <span class="ruby-constant">ENV</span>)
1576 397:       <span class="ruby-keyword kw">return</span> [<span class="ruby-value">0</span>, <span class="ruby-value">0</span>] <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">stdout</span>.<span class="ruby-identifier">tty?</span>
1577 398: 
1578 399:       <span class="ruby-keyword kw">return</span> [<span class="ruby-value">80</span>, <span class="ruby-value">40</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Util</span>.<span class="ruby-identifier">windows?</span>
1579 400: 
1580 401:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">environment</span>[<span class="ruby-value str">&quot;COLUMNS&quot;</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">environment</span>[<span class="ruby-value str">&quot;LINES&quot;</span>]
1581 402:         <span class="ruby-keyword kw">return</span> [<span class="ruby-identifier">environment</span>[<span class="ruby-value str">&quot;COLUMNS&quot;</span>].<span class="ruby-identifier">to_i</span>, <span class="ruby-identifier">environment</span>[<span class="ruby-value str">&quot;LINES&quot;</span>].<span class="ruby-identifier">to_i</span>]
1582 403: 
1583 404:       <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">environment</span>[<span class="ruby-value str">&quot;TERM&quot;</span>] <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">command_in_path?</span>(<span class="ruby-value str">&quot;tput&quot;</span>)
1584 405:         <span class="ruby-keyword kw">return</span> [<span class="ruby-value">`tput cols`</span>.<span class="ruby-identifier">to_i</span>, <span class="ruby-value">`tput lines`</span>.<span class="ruby-identifier">to_i</span>]
1585 406: 
1586 407:       <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">command_in_path?</span>(<span class="ruby-value str">'stty'</span>)
1587 408:         <span class="ruby-keyword kw">return</span> <span class="ruby-value">`stty size`</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-regexp re">/\d+/</span>).<span class="ruby-identifier">map</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">s</span><span class="ruby-operator">|</span> <span class="ruby-identifier">s</span>.<span class="ruby-identifier">to_i</span> }
1588 409:       <span class="ruby-keyword kw">else</span>
1589 410:         <span class="ruby-keyword kw">return</span> [<span class="ruby-value">0</span>, <span class="ruby-value">0</span>]
1590 411:       <span class="ruby-keyword kw">end</span>
1591 412:     <span class="ruby-keyword kw">rescue</span>
1592 413:       [<span class="ruby-value">0</span>, <span class="ruby-value">0</span>]
1593 414:     <span class="ruby-keyword kw">end</span></pre>
1594                                         </div>
1595                                         
1596                                 </div>
1597
1598                                 
1599                         </div>
1600
1601                 
1602                         <div id="unsubscribe-method" class="method-detail ">
1603                                 <a name="M000307"></a>
1604
1605                                 <div class="method-heading">
1606                                 
1607                                         <span class="method-name">unsubscribe</span><span
1608                                                 class="method-args">(targets)</span>
1609                                         <span class="method-click-advice">click to toggle source</span>
1610                                 
1611                                 </div>
1612
1613                                 <div class="method-description">
1614                                         
1615                                         <p>
1616 Helper to unsubscribe to a topic on multiple collectives or just one
1617 </p>
1618                                         
1619
1620                                         
1621                                         <div class="method-source-code"
1622                                                 id="unsubscribe-source">
1623 <pre>
1624      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 213</span>
1625 213:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">unsubscribe</span>(<span class="ruby-identifier">targets</span>)
1626 214:       <span class="ruby-identifier">connection</span> = <span class="ruby-constant">PluginManager</span>[<span class="ruby-value str">&quot;connector_plugin&quot;</span>]
1627 215: 
1628 216:       <span class="ruby-identifier">targets</span> = [<span class="ruby-identifier">targets</span>].<span class="ruby-identifier">flatten</span>
1629 217: 
1630 218:       <span class="ruby-identifier">targets</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">target</span><span class="ruby-operator">|</span>
1631 219:         <span class="ruby-identifier">connection</span>.<span class="ruby-identifier">unsubscribe</span>(<span class="ruby-identifier">target</span>[<span class="ruby-identifier">:agent</span>], <span class="ruby-identifier">target</span>[<span class="ruby-identifier">:type</span>], <span class="ruby-identifier">target</span>[<span class="ruby-identifier">:collective</span>])
1632 220:       <span class="ruby-keyword kw">end</span>
1633 221:     <span class="ruby-keyword kw">end</span></pre>
1634                                         </div>
1635                                         
1636                                 </div>
1637
1638                                 
1639                         </div>
1640
1641                 
1642                         <div id="versioncmp-method" class="method-detail ">
1643                                 <a name="M000326"></a>
1644
1645                                 <div class="method-heading">
1646                                 
1647                                         <span class="method-name">versioncmp</span><span
1648                                                 class="method-args">(version_a, version_b)</span>
1649                                         <span class="method-click-advice">click to toggle source</span>
1650                                 
1651                                 </div>
1652
1653                                 <div class="method-description">
1654                                         
1655                                         <p>
1656 compare two software versions as commonly found in package versions.
1657 </p>
1658 <p>
1659 returns 0 if a == b returns -1 if a < b returns 1 if a > b
1660 </p>
1661 <p>
1662 Code originally from Puppet
1663 </p>
1664                                         
1665
1666                                         
1667                                         <div class="method-source-code"
1668                                                 id="versioncmp-source">
1669 <pre>
1670      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 433</span>
1671 433:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">versioncmp</span>(<span class="ruby-identifier">version_a</span>, <span class="ruby-identifier">version_b</span>)
1672 434:       <span class="ruby-identifier">vre</span> = <span class="ruby-regexp re">/[-.]|\d+|[^-.\d]+/</span>
1673 435:       <span class="ruby-identifier">ax</span> = <span class="ruby-identifier">version_a</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-identifier">vre</span>)
1674 436:       <span class="ruby-identifier">bx</span> = <span class="ruby-identifier">version_b</span>.<span class="ruby-identifier">scan</span>(<span class="ruby-identifier">vre</span>)
1675 437: 
1676 438:       <span class="ruby-keyword kw">while</span> (<span class="ruby-identifier">ax</span>.<span class="ruby-identifier">length</span><span class="ruby-operator">&gt;</span><span class="ruby-value">0</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">bx</span>.<span class="ruby-identifier">length</span><span class="ruby-operator">&gt;</span><span class="ruby-value">0</span>)
1677 439:         <span class="ruby-identifier">a</span> = <span class="ruby-identifier">ax</span>.<span class="ruby-identifier">shift</span>
1678 440:         <span class="ruby-identifier">b</span> = <span class="ruby-identifier">bx</span>.<span class="ruby-identifier">shift</span>
1679 441: 
1680 442:         <span class="ruby-keyword kw">if</span>( <span class="ruby-identifier">a</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">b</span> )                 <span class="ruby-keyword kw">then</span> <span class="ruby-keyword kw">next</span>
1681 443:         <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">a</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'-'</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">b</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'-'</span>) <span class="ruby-keyword kw">then</span> <span class="ruby-keyword kw">next</span>
1682 444:         <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">a</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'-'</span>)             <span class="ruby-keyword kw">then</span> <span class="ruby-keyword kw">return</span> <span class="ruby-value">-1</span>
1683 445:         <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">b</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'-'</span>)             <span class="ruby-keyword kw">then</span> <span class="ruby-keyword kw">return</span> <span class="ruby-value">1</span>
1684 446:         <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">a</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">b</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span>) <span class="ruby-keyword kw">then</span> <span class="ruby-keyword kw">next</span>
1685 447:         <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">a</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> )            <span class="ruby-keyword kw">then</span> <span class="ruby-keyword kw">return</span> <span class="ruby-value">-1</span>
1686 448:         <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">b</span> <span class="ruby-operator">==</span> <span class="ruby-value str">'.'</span> )            <span class="ruby-keyword kw">then</span> <span class="ruby-keyword kw">return</span> <span class="ruby-value">1</span>
1687 449:         <span class="ruby-keyword kw">elsif</span> (<span class="ruby-identifier">a</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^\d+$/</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-identifier">b</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^\d+$/</span>) <span class="ruby-keyword kw">then</span>
1688 450:           <span class="ruby-keyword kw">if</span>( <span class="ruby-identifier">a</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^0/</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">b</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^0/</span> ) <span class="ruby-keyword kw">then</span>
1689 451:             <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">a</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">upcase</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">upcase</span>
1690 452:           <span class="ruby-keyword kw">end</span>
1691 453:           <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">a</span>.<span class="ruby-identifier">to_i</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">to_i</span>
1692 454:         <span class="ruby-keyword kw">else</span>
1693 455:           <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">a</span>.<span class="ruby-identifier">upcase</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">b</span>.<span class="ruby-identifier">upcase</span>
1694 456:         <span class="ruby-keyword kw">end</span>
1695 457:       <span class="ruby-keyword kw">end</span>
1696 458: 
1697 459:       <span class="ruby-identifier">version_a</span> <span class="ruby-operator">&lt;=&gt;</span> <span class="ruby-identifier">version_b</span>;
1698 460:     <span class="ruby-keyword kw">end</span></pre>
1699                                         </div>
1700                                         
1701                                 </div>
1702
1703                                 
1704                         </div>
1705
1706                 
1707                         <div id="windows--method" class="method-detail ">
1708                                 <a name="M000312"></a>
1709
1710                                 <div class="method-heading">
1711                                 
1712                                         <span class="method-name">windows?</span><span
1713                                                 class="method-args">()</span>
1714                                         <span class="method-click-advice">click to toggle source</span>
1715                                 
1716                                 </div>
1717
1718                                 <div class="method-description">
1719                                         
1720                                         <p class="missing-docs">(Not documented)</p>
1721                                         
1722
1723                                         
1724                                         <div class="method-source-code"
1725                                                 id="windows--source">
1726 <pre>
1727      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 264</span>
1728 264:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">windows?</span>
1729 265:       <span class="ruby-operator">!</span><span class="ruby-operator">!</span>(<span class="ruby-constant">RbConfig</span><span class="ruby-operator">::</span><span class="ruby-constant">CONFIG</span>[<span class="ruby-value str">'host_os'</span>] <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/mswin|win32|dos|mingw|cygwin/i</span>)
1730 266:     <span class="ruby-keyword kw">end</span></pre>
1731                                         </div>
1732                                         
1733                                 </div>
1734
1735                                 
1736                         </div>
1737
1738                 
1739                         <div id="windows-prefix-method" class="method-detail ">
1740                                 <a name="M000302"></a>
1741
1742                                 <div class="method-heading">
1743                                 
1744                                         <span class="method-name">windows_prefix</span><span
1745                                                 class="method-args">()</span>
1746                                         <span class="method-click-advice">click to toggle source</span>
1747                                 
1748                                 </div>
1749
1750                                 <div class="method-description">
1751                                         
1752                                         <p>
1753 Returns the PuppetLabs mcollective path for windows
1754 </p>
1755                                         
1756
1757                                         
1758                                         <div class="method-source-code"
1759                                                 id="windows-prefix-source">
1760 <pre>
1761      <span class="ruby-comment cmt"># File lib/mcollective/util.rb, line 141</span>
1762 141:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">windows_prefix</span>
1763 142:       <span class="ruby-identifier">require</span> <span class="ruby-value str">'win32/dir'</span>
1764 143:       <span class="ruby-identifier">prefix</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>(<span class="ruby-constant">Dir</span><span class="ruby-operator">::</span><span class="ruby-constant">COMMON_APPDATA</span>, <span class="ruby-value str">&quot;PuppetLabs&quot;</span>, <span class="ruby-value str">&quot;mcollective&quot;</span>)
1765 144:     <span class="ruby-keyword kw">end</span></pre>
1766                                         </div>
1767                                         
1768                                 </div>
1769
1770                                 
1771                         </div>
1772
1773                 
1774                 </div>
1775         
1776
1777         </div>
1778
1779
1780         <div id="rdoc-debugging-section-dump" class="debugging-section">
1781         
1782                 <p>Disabled; run with --debug to generate this.</p>
1783         
1784         </div>
1785
1786         <div id="validator-badges">
1787                 <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
1788                 <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
1789                         Rdoc Generator</a> 1.1.6</small>.</p>
1790         </div>
1791
1792 </body>
1793 </html>
1794