Update version according to OSCI-856
[packages/precise/mcollective.git] / doc / classes / MCollective / PluginManager.html
1 <?xml version="1.0" encoding="iso-8859-1"?>
2 <!DOCTYPE html 
3      PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
6 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7 <head>
8   <title>Module: MCollective::PluginManager</title>
9   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10   <meta http-equiv="Content-Script-Type" content="text/javascript" />
11   <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12   <script type="text/javascript">
13   // <![CDATA[
14
15   function popupCode( url ) {
16     window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17   }
18
19   function toggleCode( id ) {
20     if ( document.getElementById )
21       elem = document.getElementById( id );
22     else if ( document.all )
23       elem = eval( "document.all." + id );
24     else
25       return false;
26
27     elemStyle = elem.style;
28     
29     if ( elemStyle.display != "block" ) {
30       elemStyle.display = "block"
31     } else {
32       elemStyle.display = "none"
33     }
34
35     return true;
36   }
37   
38   // Make codeblocks hidden by default
39   document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40   
41   // ]]>
42   </script>
43
44 </head>
45 <body>
46
47
48
49     <div id="classHeader">
50         <table class="header-table">
51         <tr class="top-aligned-row">
52           <td><strong>Module</strong></td>
53           <td class="class-name-in-header">MCollective::PluginManager</td>
54         </tr>
55         <tr class="top-aligned-row">
56             <td><strong>In:</strong></td>
57             <td>
58                 <a href="../../files/lib/mcollective/pluginmanager_rb.html">
59                 lib/mcollective/pluginmanager.rb
60                 </a>
61         <br />
62             </td>
63         </tr>
64
65         </table>
66     </div>
67   <!-- banner header -->
68
69   <div id="bodyContent">
70
71
72
73   <div id="contextContent">
74
75     <div id="description">
76       <p>
77 A simple plugin manager, it stores one plugin each of a specific type the
78 idea is that we can only have one security provider, one connector etc.
79 </p>
80
81     </div>
82
83
84    </div>
85
86     <div id="method-list">
87       <h3 class="section-bar">Methods</h3>
88
89       <div class="name-list">
90       <a href="#M000025">&lt;&lt;</a>&nbsp;&nbsp;
91       <a href="#M000030">[]</a>&nbsp;&nbsp;
92       <a href="#M000029">clear</a>&nbsp;&nbsp;
93       <a href="#M000031">create_instance</a>&nbsp;&nbsp;
94       <a href="#M000026">delete</a>&nbsp;&nbsp;
95       <a href="#M000032">find</a>&nbsp;&nbsp;
96       <a href="#M000033">find_and_load</a>&nbsp;&nbsp;
97       <a href="#M000035">grep</a>&nbsp;&nbsp;
98       <a href="#M000027">include?</a>&nbsp;&nbsp;
99       <a href="#M000034">loadclass</a>&nbsp;&nbsp;
100       <a href="#M000028">pluginlist</a>&nbsp;&nbsp;
101       </div>
102     </div>
103
104   </div>
105
106
107     <!-- if includes -->
108
109     <div id="section">
110
111
112
113
114
115       
116
117
118     <!-- if method_list -->
119     <div id="methods">
120       <h3 class="section-bar">Public Class methods</h3>
121
122       <div id="method-M000025" class="method-detail">
123         <a name="M000025"></a>
124
125         <div class="method-heading">
126           <a href="#M000025" class="method-signature">
127           <span class="method-name">&lt;&lt;</span><span class="method-args">(plugin)</span>
128           </a>
129         </div>
130       
131         <div class="method-description">
132           <p>
133 Adds a plugin to the list of plugins, we expect a hash like:
134 </p>
135 <pre>
136    {:type =&gt; &quot;base&quot;,
137     :class =&gt; foo.new}
138 </pre>
139 <p>
140 or like:
141 </p>
142 <pre>
143    {:type =&gt; &quot;base&quot;,
144     :class =&gt; &quot;Foo::Bar&quot;}
145 </pre>
146 <p>
147 In the event that we already have a class with the given type an exception
148 will be raised.
149 </p>
150 <p>
151 If the :class passed is a <a href="../String.html">String</a> then we will
152 delay instantiation till the first time someone asks for the plugin, this
153 is because most likely the registration gets done by inherited() hooks, at
154 which point the plugin class is not final.
155 </p>
156 <p>
157 If we were to do a .new here the Class initialize method would get called
158 and not the plugins, we there for only initialize the classes when they get
159 requested via []
160 </p>
161 <p>
162 By default all plugin instances are cached and returned later so
163 there&#8216;s always a single instance. You can pass :single_instance =&gt;
164 false when calling this to instruct it to always return a new instance when
165 a copy is requested. This only works with sending a <a
166 href="../String.html">String</a> for :class.
167 </p>
168           <p><a class="source-toggle" href="#"
169             onclick="toggleCode('M000025-source');return false;">[Source]</a></p>
170           <div class="method-source-code" id="M000025-source">
171 <pre>
172     <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 30</span>
173 30:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-operator">&lt;&lt;</span>(<span class="ruby-identifier">plugin</span>)
174 31:       <span class="ruby-identifier">plugin</span>[<span class="ruby-identifier">:single_instance</span>] = <span class="ruby-keyword kw">true</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">plugin</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">:single_instance</span>)
175 32: 
176 33:       <span class="ruby-identifier">type</span> = <span class="ruby-identifier">plugin</span>[<span class="ruby-identifier">:type</span>]
177 34:       <span class="ruby-identifier">klass</span> = <span class="ruby-identifier">plugin</span>[<span class="ruby-identifier">:class</span>]
178 35:       <span class="ruby-identifier">single</span> = <span class="ruby-identifier">plugin</span>[<span class="ruby-identifier">:single_instance</span>]
179 36: 
180 37:       <span class="ruby-identifier">raise</span>(<span class="ruby-node">&quot;Plugin #{type} already loaded&quot;</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">type</span>)
181 38: 
182 39: 
183 40:       <span class="ruby-comment cmt"># If we get a string then store 'nil' as the instance, signalling that we'll</span>
184 41:       <span class="ruby-comment cmt"># create the class later on demand.</span>
185 42:       <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">String</span>)
186 43:         <span class="ruby-ivar">@plugins</span>[<span class="ruby-identifier">type</span>] = {<span class="ruby-identifier">:loadtime</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>, <span class="ruby-identifier">:class</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">klass</span>, <span class="ruby-identifier">:instance</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">:single</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">single</span>}
187 44:         <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Registering plugin #{type} with class #{klass} single_instance: #{single}&quot;</span>)
188 45:       <span class="ruby-keyword kw">else</span>
189 46:         <span class="ruby-ivar">@plugins</span>[<span class="ruby-identifier">type</span>] = {<span class="ruby-identifier">:loadtime</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-constant">Time</span>.<span class="ruby-identifier">now</span>, <span class="ruby-identifier">:class</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">class</span>, <span class="ruby-identifier">:instance</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">klass</span>, <span class="ruby-identifier">:single</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">true</span>}
190 47:         <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Registering plugin #{type} with class #{klass.class} single_instance: true&quot;</span>)
191 48:       <span class="ruby-keyword kw">end</span>
192 49:     <span class="ruby-keyword kw">end</span>
193 </pre>
194           </div>
195         </div>
196       </div>
197
198       <div id="method-M000030" class="method-detail">
199         <a name="M000030"></a>
200
201         <div class="method-heading">
202           <a href="#M000030" class="method-signature">
203           <span class="method-name">[]</span><span class="method-args">(plugin)</span>
204           </a>
205         </div>
206       
207         <div class="method-description">
208           <p>
209 Gets a plugin by type
210 </p>
211           <p><a class="source-toggle" href="#"
212             onclick="toggleCode('M000030-source');return false;">[Source]</a></p>
213           <div class="method-source-code" id="M000030-source">
214 <pre>
215     <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 72</span>
216 72:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-operator">[]</span>(<span class="ruby-identifier">plugin</span>)
217 73:       <span class="ruby-identifier">raise</span>(<span class="ruby-node">&quot;No plugin #{plugin} defined&quot;</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">plugin</span>)
218 74: 
219 75:       <span class="ruby-identifier">klass</span> = <span class="ruby-ivar">@plugins</span>[<span class="ruby-identifier">plugin</span>][<span class="ruby-identifier">:class</span>]
220 76: 
221 77:       <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@plugins</span>[<span class="ruby-identifier">plugin</span>][<span class="ruby-identifier">:single</span>]
222 78:         <span class="ruby-comment cmt"># Create an instance of the class if one hasn't been done before</span>
223 79:         <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@plugins</span>[<span class="ruby-identifier">plugin</span>][<span class="ruby-identifier">:instance</span>] <span class="ruby-operator">==</span> <span class="ruby-keyword kw">nil</span>
224 80:           <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Returning new plugin #{plugin} with class #{klass}&quot;</span>)
225 81:           <span class="ruby-ivar">@plugins</span>[<span class="ruby-identifier">plugin</span>][<span class="ruby-identifier">:instance</span>] = <span class="ruby-identifier">create_instance</span>(<span class="ruby-identifier">klass</span>)
226 82:         <span class="ruby-keyword kw">else</span>
227 83:           <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Returning cached plugin #{plugin} with class #{klass}&quot;</span>)
228 84:         <span class="ruby-keyword kw">end</span>
229 85: 
230 86:         <span class="ruby-ivar">@plugins</span>[<span class="ruby-identifier">plugin</span>][<span class="ruby-identifier">:instance</span>]
231 87:       <span class="ruby-keyword kw">else</span>
232 88:         <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Returning new plugin #{plugin} with class #{klass}&quot;</span>)
233 89:         <span class="ruby-identifier">create_instance</span>(<span class="ruby-identifier">klass</span>)
234 90:       <span class="ruby-keyword kw">end</span>
235 91:     <span class="ruby-keyword kw">end</span>
236 </pre>
237           </div>
238         </div>
239       </div>
240
241       <div id="method-M000029" class="method-detail">
242         <a name="M000029"></a>
243
244         <div class="method-heading">
245           <a href="#M000029" class="method-signature">
246           <span class="method-name">clear</span><span class="method-args">()</span>
247           </a>
248         </div>
249       
250         <div class="method-description">
251           <p>
252 deletes all registered plugins
253 </p>
254           <p><a class="source-toggle" href="#"
255             onclick="toggleCode('M000029-source');return false;">[Source]</a></p>
256           <div class="method-source-code" id="M000029-source">
257 <pre>
258     <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 67</span>
259 67:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">clear</span>
260 68:       <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">clear</span>
261 69:     <span class="ruby-keyword kw">end</span>
262 </pre>
263           </div>
264         </div>
265       </div>
266
267       <div id="method-M000031" class="method-detail">
268         <a name="M000031"></a>
269
270         <div class="method-heading">
271           <a href="#M000031" class="method-signature">
272           <span class="method-name">create_instance</span><span class="method-args">(klass)</span>
273           </a>
274         </div>
275       
276         <div class="method-description">
277           <p>
278 use eval to create an instance of a class
279 </p>
280           <p><a class="source-toggle" href="#"
281             onclick="toggleCode('M000031-source');return false;">[Source]</a></p>
282           <div class="method-source-code" id="M000031-source">
283 <pre>
284      <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 94</span>
285  94:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">create_instance</span>(<span class="ruby-identifier">klass</span>)
286  95:       <span class="ruby-keyword kw">begin</span>
287  96:         <span class="ruby-identifier">eval</span>(<span class="ruby-node">&quot;#{klass}.new&quot;</span>)
288  97:       <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>
289  98:         <span class="ruby-identifier">raise</span>(<span class="ruby-node">&quot;Could not create instance of plugin #{klass}: #{e}&quot;</span>)
290  99:       <span class="ruby-keyword kw">end</span>
291 100:     <span class="ruby-keyword kw">end</span>
292 </pre>
293           </div>
294         </div>
295       </div>
296
297       <div id="method-M000026" class="method-detail">
298         <a name="M000026"></a>
299
300         <div class="method-heading">
301           <a href="#M000026" class="method-signature">
302           <span class="method-name">delete</span><span class="method-args">(plugin)</span>
303           </a>
304         </div>
305       
306         <div class="method-description">
307           <p>
308 Removes a plugim the list
309 </p>
310           <p><a class="source-toggle" href="#"
311             onclick="toggleCode('M000026-source');return false;">[Source]</a></p>
312           <div class="method-source-code" id="M000026-source">
313 <pre>
314     <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 52</span>
315 52:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">plugin</span>)
316 53:       <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">plugin</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">plugin</span>)
317 54:     <span class="ruby-keyword kw">end</span>
318 </pre>
319           </div>
320         </div>
321       </div>
322
323       <div id="method-M000032" class="method-detail">
324         <a name="M000032"></a>
325
326         <div class="method-heading">
327           <a href="#M000032" class="method-signature">
328           <span class="method-name">find</span><span class="method-args">(type, extension=&quot;rb&quot;)</span>
329           </a>
330         </div>
331       
332         <div class="method-description">
333           <p>
334 Finds plugins in all configured libdirs
335 </p>
336 <pre>
337   find(&quot;agent&quot;)
338 </pre>
339 <p>
340 will return an array of just agent names, for example:
341 </p>
342 <pre>
343   [&quot;puppetd&quot;, &quot;package&quot;]
344 </pre>
345 <p>
346 Can also be used to <a href="PluginManager.html#M000032">find</a> files of
347 other extensions:
348 </p>
349 <pre>
350   find(&quot;agent&quot;, &quot;ddl&quot;)
351 </pre>
352 <p>
353 Will return the same list but only of files with extension .ddl in the
354 agent subdirectory
355 </p>
356           <p><a class="source-toggle" href="#"
357             onclick="toggleCode('M000032-source');return false;">[Source]</a></p>
358           <div class="method-source-code" id="M000032-source">
359 <pre>
360      <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 116</span>
361 116:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">find</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">extension</span>=<span class="ruby-value str">&quot;rb&quot;</span>)
362 117:       <span class="ruby-identifier">extension</span> = <span class="ruby-node">&quot;.#{extension}&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">extension</span>.<span class="ruby-identifier">match</span>(<span class="ruby-regexp re">/^\./</span>)
363 118: 
364 119:       <span class="ruby-identifier">plugins</span> = []
365 120: 
366 121:       <span class="ruby-constant">Config</span>.<span class="ruby-identifier">instance</span>.<span class="ruby-identifier">libdir</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">libdir</span><span class="ruby-operator">|</span>
367 122:         <span class="ruby-identifier">plugdir</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>([<span class="ruby-identifier">libdir</span>, <span class="ruby-value str">&quot;mcollective&quot;</span>, <span class="ruby-identifier">type</span>.<span class="ruby-identifier">to_s</span>])
368 123:         <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">directory?</span>(<span class="ruby-identifier">plugdir</span>)
369 124: 
370 125:         <span class="ruby-constant">Dir</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">plugdir</span>).<span class="ruby-identifier">grep</span>(<span class="ruby-node">/#{extension}$/</span>).<span class="ruby-identifier">map</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">plugin</span><span class="ruby-operator">|</span>
371 126:           <span class="ruby-identifier">plugins</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">basename</span>(<span class="ruby-identifier">plugin</span>, <span class="ruby-identifier">extension</span>)
372 127:         <span class="ruby-keyword kw">end</span>
373 128:       <span class="ruby-keyword kw">end</span>
374 129: 
375 130:       <span class="ruby-identifier">plugins</span>.<span class="ruby-identifier">sort</span>.<span class="ruby-identifier">uniq</span>
376 131:     <span class="ruby-keyword kw">end</span>
377 </pre>
378           </div>
379         </div>
380       </div>
381
382       <div id="method-M000033" class="method-detail">
383         <a name="M000033"></a>
384
385         <div class="method-heading">
386           <a href="#M000033" class="method-signature">
387           <span class="method-name">find_and_load</span><span class="method-args">(type, extension=&quot;rb&quot;) {|plugin| ...}</span>
388           </a>
389         </div>
390       
391         <div class="method-description">
392           <p>
393 Finds and loads from disk all plugins from all libdirs that match certain
394 criteria.
395 </p>
396 <pre>
397    find_and_load(&quot;pluginpackager&quot;)
398 </pre>
399 <p>
400 Will <a href="PluginManager.html#M000032">find</a> all .rb files in the
401 libdir/mcollective/pluginpackager/ directory in all libdirs and load them
402 from disk.
403 </p>
404 <p>
405 You can influence what plugins get loaded using a block notation:
406 </p>
407 <pre>
408    find_and_load(&quot;pluginpackager&quot;) do |plugin|
409       plugin.match(/puppet/)
410    end
411 </pre>
412 <p>
413 This will load only plugins matching /puppet/
414 </p>
415           <p><a class="source-toggle" href="#"
416             onclick="toggleCode('M000033-source');return false;">[Source]</a></p>
417           <div class="method-source-code" id="M000033-source">
418 <pre>
419      <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 148</span>
420 148:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">find_and_load</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">extension</span>=<span class="ruby-value str">&quot;rb&quot;</span>)
421 149:       <span class="ruby-identifier">extension</span> = <span class="ruby-node">&quot;.#{extension}&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">extension</span>.<span class="ruby-identifier">match</span>(<span class="ruby-regexp re">/^\./</span>)
422 150: 
423 151:       <span class="ruby-identifier">klasses</span> = <span class="ruby-identifier">find</span>(<span class="ruby-identifier">type</span>, <span class="ruby-identifier">extension</span>).<span class="ruby-identifier">map</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">plugin</span><span class="ruby-operator">|</span>
424 152:         <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">block_given?</span>
425 153:           <span class="ruby-keyword kw">next</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-keyword kw">yield</span>(<span class="ruby-identifier">plugin</span>)
426 154:         <span class="ruby-keyword kw">end</span>
427 155: 
428 156:         <span class="ruby-value str">&quot;%s::%s::%s&quot;</span> <span class="ruby-operator">%</span> [ <span class="ruby-value str">&quot;MCollective&quot;</span>, <span class="ruby-identifier">type</span>.<span class="ruby-identifier">capitalize</span>, <span class="ruby-identifier">plugin</span>.<span class="ruby-identifier">capitalize</span> ]
429 157:       <span class="ruby-keyword kw">end</span>.<span class="ruby-identifier">compact</span>
430 158: 
431 159:       <span class="ruby-identifier">klasses</span>.<span class="ruby-identifier">sort</span>.<span class="ruby-identifier">uniq</span>.<span class="ruby-identifier">each</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">klass</span><span class="ruby-operator">|</span> <span class="ruby-identifier">loadclass</span>(<span class="ruby-identifier">klass</span>, <span class="ruby-keyword kw">true</span>)}
432 160:     <span class="ruby-keyword kw">end</span>
433 </pre>
434           </div>
435         </div>
436       </div>
437
438       <div id="method-M000035" class="method-detail">
439         <a name="M000035"></a>
440
441         <div class="method-heading">
442           <a href="#M000035" class="method-signature">
443           <span class="method-name">grep</span><span class="method-args">(regex)</span>
444           </a>
445         </div>
446       
447         <div class="method-description">
448           <p>
449 Grep&#8216;s over the plugin list and returns the list found
450 </p>
451           <p><a class="source-toggle" href="#"
452             onclick="toggleCode('M000035-source');return false;">[Source]</a></p>
453           <div class="method-source-code" id="M000035-source">
454 <pre>
455      <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 176</span>
456 176:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">grep</span>(<span class="ruby-identifier">regex</span>)
457 177:       <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">grep</span>(<span class="ruby-identifier">regex</span>)
458 178:     <span class="ruby-keyword kw">end</span>
459 </pre>
460           </div>
461         </div>
462       </div>
463
464       <div id="method-M000027" class="method-detail">
465         <a name="M000027"></a>
466
467         <div class="method-heading">
468           <a href="#M000027" class="method-signature">
469           <span class="method-name">include?</span><span class="method-args">(plugin)</span>
470           </a>
471         </div>
472       
473         <div class="method-description">
474           <p>
475 Finds out if we have a plugin with the given name
476 </p>
477           <p><a class="source-toggle" href="#"
478             onclick="toggleCode('M000027-source');return false;">[Source]</a></p>
479           <div class="method-source-code" id="M000027-source">
480 <pre>
481     <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 57</span>
482 57:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">plugin</span>)
483 58:       <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">plugin</span>)
484 59:     <span class="ruby-keyword kw">end</span>
485 </pre>
486           </div>
487         </div>
488       </div>
489
490       <div id="method-M000034" class="method-detail">
491         <a name="M000034"></a>
492
493         <div class="method-heading">
494           <a href="#M000034" class="method-signature">
495           <span class="method-name">loadclass</span><span class="method-args">(klass, squash_failures=false)</span>
496           </a>
497         </div>
498       
499         <div class="method-description">
500           <p>
501 Loads a class from file by doing some simple search/replace on class names
502 and then doing a require.
503 </p>
504           <p><a class="source-toggle" href="#"
505             onclick="toggleCode('M000034-source');return false;">[Source]</a></p>
506           <div class="method-source-code" id="M000034-source">
507 <pre>
508      <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 164</span>
509 164:     <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>, <span class="ruby-identifier">squash_failures</span>=<span class="ruby-keyword kw">false</span>)
510 165:       <span class="ruby-identifier">fname</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-identifier">downcase</span> <span class="ruby-operator">+</span> <span class="ruby-value str">&quot;.rb&quot;</span>
511 166: 
512 167:       <span class="ruby-constant">Log</span>.<span class="ruby-identifier">debug</span>(<span class="ruby-node">&quot;Loading #{klass} from #{fname}&quot;</span>)
513 168: 
514 169:       <span class="ruby-identifier">load</span> <span class="ruby-identifier">fname</span>
515 170:     <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>
516 171:       <span class="ruby-constant">Log</span>.<span class="ruby-identifier">error</span>(<span class="ruby-node">&quot;Failed to load #{klass}: #{e}&quot;</span>)
517 172:       <span class="ruby-identifier">raise</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">squash_failures</span>
518 173:     <span class="ruby-keyword kw">end</span>
519 </pre>
520           </div>
521         </div>
522       </div>
523
524       <div id="method-M000028" class="method-detail">
525         <a name="M000028"></a>
526
527         <div class="method-heading">
528           <a href="#M000028" class="method-signature">
529           <span class="method-name">pluginlist</span><span class="method-args">()</span>
530           </a>
531         </div>
532       
533         <div class="method-description">
534           <p>
535 Provides a list of plugins we know about
536 </p>
537           <p><a class="source-toggle" href="#"
538             onclick="toggleCode('M000028-source');return false;">[Source]</a></p>
539           <div class="method-source-code" id="M000028-source">
540 <pre>
541     <span class="ruby-comment cmt"># File lib/mcollective/pluginmanager.rb, line 62</span>
542 62:     <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">pluginlist</span>
543 63:       <span class="ruby-ivar">@plugins</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">sort</span>
544 64:     <span class="ruby-keyword kw">end</span>
545 </pre>
546           </div>
547         </div>
548       </div>
549
550
551     </div>
552
553
554   </div>
555
556
557 <div id="validator-badges">
558   <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
559 </div>
560
561 </body>
562 </html>