1 <?xml version="1.0" encoding="iso-8859-1"?>
3 PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
8 <title>Class: MCollective::DDL::Base</title>
9 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10 <meta http-equiv="Content-Script-Type" content="text/javascript" />
11 <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
12 <script type="text/javascript">
15 function popupCode( url ) {
16 window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
19 function toggleCode( id ) {
20 if ( document.getElementById )
21 elem = document.getElementById( id );
22 else if ( document.all )
23 elem = eval( "document.all." + id );
27 elemStyle = elem.style;
29 if ( elemStyle.display != "block" ) {
30 elemStyle.display = "block"
32 elemStyle.display = "none"
38 // Make codeblocks hidden by default
39 document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
49 <div id="classHeader">
50 <table class="header-table">
51 <tr class="top-aligned-row">
52 <td><strong>Class</strong></td>
53 <td class="class-name-in-header">MCollective::DDL::Base</td>
55 <tr class="top-aligned-row">
56 <td><strong>In:</strong></td>
58 <a href="../../../files/lib/mcollective/ddl/base_rb.html">
59 lib/mcollective/ddl/base.rb
65 <tr class="top-aligned-row">
66 <td><strong>Parent:</strong></td>
73 <!-- banner header -->
75 <div id="bodyContent">
79 <div id="contextContent">
81 <div id="description">
83 The base class for all kinds of <a href="../DDL.html">DDL</a> files. <a
84 href="../DDL.html">DDL</a> files when run gets parsed and builds up a hash
85 of the basic primitive types, ideally restricted so it can be converted to
86 JSON though today there are some Ruby Symbols in them which might be fixed
90 The Hash being built should be stored in @entities, the format is generally
91 not prescribed but there‘s a definite feel to how <a
92 href="../DDL.html">DDL</a> files look so study the agent and discovery ones
93 to see how the structure applies to very different use cases.
96 For every plugin type you should have a single word name - that corresponds
97 to the directory in the libdir where these plugins live. If you need
98 anything above and beyond ‘<a
99 href="Base.html#M000177">metadata</a>’ in your plugin <a
100 href="../DDL.html">DDL</a> then add a PlugintypeDDL class here and add your
101 specific behaviors to those.
109 <div id="method-list">
110 <h3 class="section-bar">Methods</h3>
112 <div class="name-list">
113 <a href="#M000171">findddlfile</a>
114 <a href="#M000167">help</a>
115 <a href="#M000174">input</a>
116 <a href="#M000170">loadddlfile</a>
117 <a href="#M000177">metadata</a>
118 <a href="#M000166">new</a>
119 <a href="#M000175">output</a>
120 <a href="#M000176">requires</a>
121 <a href="#M000169">template_for_plugintype</a>
122 <a href="#M000168">usage</a>
123 <a href="#M000173">validate_input_argument</a>
124 <a href="#M000172">validate_requirements</a>
133 <h3 class="section-bar">Included Modules</h3>
135 <div id="includes-list">
136 <span class="include-name"><a href="../Translatable.html">Translatable</a></span>
146 <div id="attribute-list">
147 <h3 class="section-bar">Attributes</h3>
149 <div class="name-list">
151 <tr class="top-aligned-row context-row">
152 <td class="context-item-name">entities</td>
153 <td class="context-item-value"> [R] </td>
154 <td class="context-item-desc"></td>
156 <tr class="top-aligned-row context-row">
157 <td class="context-item-name">meta</td>
158 <td class="context-item-value"> [R] </td>
159 <td class="context-item-desc"></td>
161 <tr class="top-aligned-row context-row">
162 <td class="context-item-name">pluginname</td>
163 <td class="context-item-value"> [R] </td>
164 <td class="context-item-desc"></td>
166 <tr class="top-aligned-row context-row">
167 <td class="context-item-name">plugintype</td>
168 <td class="context-item-value"> [R] </td>
169 <td class="context-item-desc"></td>
171 <tr class="top-aligned-row context-row">
172 <td class="context-item-name">requirements</td>
173 <td class="context-item-value"> [R] </td>
174 <td class="context-item-desc"></td>
176 <tr class="top-aligned-row context-row">
177 <td class="context-item-name">usage</td>
178 <td class="context-item-value"> [R] </td>
179 <td class="context-item-desc"></td>
187 <!-- if method_list -->
189 <h3 class="section-bar">Public Class methods</h3>
191 <div id="method-M000166" class="method-detail">
192 <a name="M000166"></a>
194 <div class="method-heading">
195 <a href="#M000166" class="method-signature">
196 <span class="method-name">new</span><span class="method-args">(plugin, plugintype=:agent, loadddl=true)</span>
200 <div class="method-description">
201 <p><a class="source-toggle" href="#"
202 onclick="toggleCode('M000166-source');return false;">[Source]</a></p>
203 <div class="method-source-code" id="M000166-source">
205 <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 24</span>
206 24: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">plugin</span>, <span class="ruby-identifier">plugintype</span>=<span class="ruby-identifier">:agent</span>, <span class="ruby-identifier">loadddl</span>=<span class="ruby-keyword kw">true</span>)
207 25: <span class="ruby-ivar">@entities</span> = {}
208 26: <span class="ruby-ivar">@meta</span> = {}
209 27: <span class="ruby-ivar">@usage</span> = <span class="ruby-value str">""</span>
210 28: <span class="ruby-ivar">@config</span> = <span class="ruby-constant">Config</span>.<span class="ruby-identifier">instance</span>
211 29: <span class="ruby-ivar">@pluginname</span> = <span class="ruby-identifier">plugin</span>
212 30: <span class="ruby-ivar">@plugintype</span> = <span class="ruby-identifier">plugintype</span>.<span class="ruby-identifier">to_sym</span>
213 31: <span class="ruby-ivar">@requirements</span> = {}
215 33: <span class="ruby-identifier">loadddlfile</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">loadddl</span>
216 34: <span class="ruby-keyword kw">end</span>
222 <h3 class="section-bar">Public Instance methods</h3>
224 <div id="method-M000171" class="method-detail">
225 <a name="M000171"></a>
227 <div class="method-heading">
228 <a href="#M000171" class="method-signature">
229 <span class="method-name">findddlfile</span><span class="method-args">(ddlname=nil, ddltype=nil)</span>
233 <div class="method-description">
234 <p><a class="source-toggle" href="#"
235 onclick="toggleCode('M000171-source');return false;">[Source]</a></p>
236 <div class="method-source-code" id="M000171-source">
238 <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 89</span>
239 89: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">findddlfile</span>(<span class="ruby-identifier">ddlname</span>=<span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">ddltype</span>=<span class="ruby-keyword kw">nil</span>)
240 90: <span class="ruby-identifier">ddlname</span> = <span class="ruby-ivar">@pluginname</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">ddlname</span>
241 91: <span class="ruby-identifier">ddltype</span> = <span class="ruby-ivar">@plugintype</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">ddltype</span>
243 93: <span class="ruby-ivar">@config</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>
244 94: <span class="ruby-identifier">ddlfile</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">join</span>([<span class="ruby-identifier">libdir</span>, <span class="ruby-value str">"mcollective"</span>, <span class="ruby-identifier">ddltype</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-node">"#{ddlname}.ddl"</span>])
245 95: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exist?</span>(<span class="ruby-identifier">ddlfile</span>)
246 96: <span class="ruby-identifier">log_code</span>(<span class="ruby-identifier">:PLMC18</span>, <span class="ruby-value str">"Found %{ddlname} ddl at %{ddlfile}"</span>, <span class="ruby-identifier">:debug</span>, <span class="ruby-identifier">:ddlname</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">ddlname</span>, <span class="ruby-identifier">:ddlfile</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">ddlfile</span>)
247 97: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">ddlfile</span>
248 98: <span class="ruby-keyword kw">end</span>
249 99: <span class="ruby-keyword kw">end</span>
250 100: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
251 101: <span class="ruby-keyword kw">end</span>
257 <div id="method-M000167" class="method-detail">
258 <a name="M000167"></a>
260 <div class="method-heading">
261 <a href="#M000167" class="method-signature">
262 <span class="method-name">help</span><span class="method-args">(template=nil)</span>
266 <div class="method-description">
268 Generates <a href="Base.html#M000167">help</a> using the template based on
269 the data created with <a href="Base.html#M000177">metadata</a> and <a
270 href="Base.html#M000174">input</a>.
273 If no template name is provided one will be chosen based on the plugin
274 type. If the provided template path is not absolute then the template will
275 be loaded either from the config dir and if that does not exist, default to
278 <p><a class="source-toggle" href="#"
279 onclick="toggleCode('M000167-source');return false;">[Source]</a></p>
280 <div class="method-source-code" id="M000167-source">
282 <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 44</span>
283 44: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">help</span>(<span class="ruby-identifier">template</span>=<span class="ruby-keyword kw">nil</span>)
284 45: <span class="ruby-identifier">template</span> = <span class="ruby-identifier">template_for_plugintype</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">template</span>
285 46: <span class="ruby-identifier">template</span> = <span class="ruby-constant">Util</span>.<span class="ruby-identifier">templatepath</span>(<span class="ruby-identifier">template</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">Util</span>.<span class="ruby-identifier">absolute_path?</span>(<span class="ruby-identifier">template</span>)
287 48: <span class="ruby-identifier">template</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">template</span>)
288 49: <span class="ruby-identifier">meta</span> = <span class="ruby-ivar">@meta</span>
289 50: <span class="ruby-identifier">entities</span> = <span class="ruby-ivar">@entities</span>
291 52: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">template</span> <span class="ruby-operator">==</span> <span class="ruby-value str">"metadata-help.erb"</span>
292 53: <span class="ruby-identifier">metadata_template</span> = <span class="ruby-constant">Util</span>.<span class="ruby-identifier">templatepath</span>(<span class="ruby-value str">"metadata-help.erb"</span>)
293 54: <span class="ruby-identifier">metadata_template</span> = <span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">metadata_template</span>)
294 55: <span class="ruby-identifier">metastring</span> = <span class="ruby-constant">ERB</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">metadata_template</span>, <span class="ruby-value">0</span>, <span class="ruby-value str">'%'</span>)
295 56: <span class="ruby-identifier">metastring</span> = <span class="ruby-identifier">metastring</span>.<span class="ruby-identifier">result</span>(<span class="ruby-identifier">binding</span>)
296 57: <span class="ruby-keyword kw">end</span>
298 59: <span class="ruby-identifier">erb</span> = <span class="ruby-constant">ERB</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">template</span>, <span class="ruby-value">0</span>, <span class="ruby-value str">'%'</span>)
299 60: <span class="ruby-identifier">erb</span>.<span class="ruby-identifier">result</span>(<span class="ruby-identifier">binding</span>)
300 61: <span class="ruby-keyword kw">end</span>
306 <div id="method-M000174" class="method-detail">
307 <a name="M000174"></a>
309 <div class="method-heading">
310 <a href="#M000174" class="method-signature">
311 <span class="method-name">input</span><span class="method-args">(argument, properties)</span>
315 <div class="method-description">
317 Registers an <a href="Base.html#M000174">input</a> argument for a given
321 See the documentation for action for how to use this
323 <p><a class="source-toggle" href="#"
324 onclick="toggleCode('M000174-source');return false;">[Source]</a></p>
325 <div class="method-source-code" id="M000174-source">
327 <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 153</span>
328 153: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">input</span>(<span class="ruby-identifier">argument</span>, <span class="ruby-identifier">properties</span>)
329 154: <span class="ruby-identifier">raise_code</span>(<span class="ruby-identifier">:PLMC22</span>, <span class="ruby-value str">"Cannot determine what entity input '%{entity}' belongs to"</span>, <span class="ruby-identifier">:error</span>, <span class="ruby-identifier">:entity</span> =<span class="ruby-operator">></span> <span class="ruby-ivar">@current_entity</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@current_entity</span>
331 156: <span class="ruby-identifier">entity</span> = <span class="ruby-ivar">@current_entity</span>
333 158: [<span class="ruby-identifier">:prompt</span>, <span class="ruby-identifier">:description</span>, <span class="ruby-identifier">:type</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arg</span><span class="ruby-operator">|</span>
334 159: <span class="ruby-identifier">raise_code</span>(<span class="ruby-identifier">:PLMC23</span>, <span class="ruby-value str">"Input needs a :%{property} property"</span>, <span class="ruby-identifier">:debug</span>, <span class="ruby-identifier">:property</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">arg</span>) <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">properties</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">arg</span>)
335 160: <span class="ruby-keyword kw">end</span>
337 162: <span class="ruby-ivar">@entities</span>[<span class="ruby-identifier">entity</span>][<span class="ruby-identifier">:input</span>][<span class="ruby-identifier">argument</span>] = {<span class="ruby-identifier">:prompt</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:prompt</span>],
338 163: <span class="ruby-identifier">:description</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:description</span>],
339 164: <span class="ruby-identifier">:type</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:type</span>],
340 165: <span class="ruby-identifier">:default</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:default</span>],
341 166: <span class="ruby-identifier">:optional</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:optional</span>]}
343 168: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:type</span>]
344 169: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:string</span>
345 170: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"Input type :string needs a :validation argument"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">properties</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">:validation</span>)
346 171: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"Input type :string needs a :maxlength argument"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">properties</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">:maxlength</span>)
348 173: <span class="ruby-ivar">@entities</span>[<span class="ruby-identifier">entity</span>][<span class="ruby-identifier">:input</span>][<span class="ruby-identifier">argument</span>][<span class="ruby-identifier">:validation</span>] = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:validation</span>]
349 174: <span class="ruby-ivar">@entities</span>[<span class="ruby-identifier">entity</span>][<span class="ruby-identifier">:input</span>][<span class="ruby-identifier">argument</span>][<span class="ruby-identifier">:maxlength</span>] = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:maxlength</span>]
351 176: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:list</span>
352 177: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"Input type :list needs a :list argument"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">properties</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">:list</span>)
354 179: <span class="ruby-ivar">@entities</span>[<span class="ruby-identifier">entity</span>][<span class="ruby-identifier">:input</span>][<span class="ruby-identifier">argument</span>][<span class="ruby-identifier">:list</span>] = <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:list</span>]
355 180: <span class="ruby-keyword kw">end</span>
356 181: <span class="ruby-keyword kw">end</span>
362 <div id="method-M000170" class="method-detail">
363 <a name="M000170"></a>
365 <div class="method-heading">
366 <a href="#M000170" class="method-signature">
367 <span class="method-name">loadddlfile</span><span class="method-args">()</span>
371 <div class="method-description">
372 <p><a class="source-toggle" href="#"
373 onclick="toggleCode('M000170-source');return false;">[Source]</a></p>
374 <div class="method-source-code" id="M000170-source">
376 <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 81</span>
377 81: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">loadddlfile</span>
378 82: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">ddlfile</span> = <span class="ruby-identifier">findddlfile</span>
379 83: <span class="ruby-identifier">instance_eval</span>(<span class="ruby-constant">File</span>.<span class="ruby-identifier">read</span>(<span class="ruby-identifier">ddlfile</span>), <span class="ruby-identifier">ddlfile</span>, <span class="ruby-value">1</span>)
380 84: <span class="ruby-keyword kw">else</span>
381 85: <span class="ruby-identifier">raise_code</span>(<span class="ruby-identifier">:PLMC40</span>, <span class="ruby-value str">"Can't find DDL for %{type} plugin '%{name}'"</span>, <span class="ruby-identifier">:debug</span>, <span class="ruby-identifier">:type</span> =<span class="ruby-operator">></span> <span class="ruby-ivar">@plugintype</span>, <span class="ruby-identifier">:name</span> =<span class="ruby-operator">></span> <span class="ruby-ivar">@pluginname</span>)
382 86: <span class="ruby-keyword kw">end</span>
383 87: <span class="ruby-keyword kw">end</span>
389 <div id="method-M000177" class="method-detail">
390 <a name="M000177"></a>
392 <div class="method-heading">
393 <a href="#M000177" class="method-signature">
394 <span class="method-name">metadata</span><span class="method-args">(meta)</span>
398 <div class="method-description">
400 Registers meta data for the introspection hash
402 <p><a class="source-toggle" href="#"
403 onclick="toggleCode('M000177-source');return false;">[Source]</a></p>
404 <div class="method-source-code" id="M000177-source">
406 <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 215</span>
407 215: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">metadata</span>(<span class="ruby-identifier">meta</span>)
408 216: [<span class="ruby-identifier">:name</span>, <span class="ruby-identifier">:description</span>, <span class="ruby-identifier">:author</span>, <span class="ruby-identifier">:license</span>, <span class="ruby-identifier">:version</span>, <span class="ruby-identifier">:url</span>, <span class="ruby-identifier">:timeout</span>].<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">arg</span><span class="ruby-operator">|</span>
409 217: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Metadata needs a :#{arg} property"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">meta</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">arg</span>)
410 218: <span class="ruby-keyword kw">end</span>
412 220: <span class="ruby-ivar">@meta</span> = <span class="ruby-identifier">meta</span>
413 221: <span class="ruby-keyword kw">end</span>
419 <div id="method-M000175" class="method-detail">
420 <a name="M000175"></a>
422 <div class="method-heading">
423 <a href="#M000175" class="method-signature">
424 <span class="method-name">output</span><span class="method-args">(argument, properties)</span>
428 <div class="method-description">
430 Registers an <a href="Base.html#M000175">output</a> argument for a given
434 See the documentation for action for how to use this
436 <p><a class="source-toggle" href="#"
437 onclick="toggleCode('M000175-source');return false;">[Source]</a></p>
438 <div class="method-source-code" id="M000175-source">
440 <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 186</span>
441 186: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">output</span>(<span class="ruby-identifier">argument</span>, <span class="ruby-identifier">properties</span>)
442 187: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Cannot figure out what action input #{argument} belongs to"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@current_entity</span>
443 188: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Output #{argument} needs a description argument"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">properties</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">:description</span>)
444 189: <span class="ruby-identifier">raise</span> <span class="ruby-node">"Output #{argument} needs a display_as argument"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">properties</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">:display_as</span>)
446 191: <span class="ruby-identifier">action</span> = <span class="ruby-ivar">@current_entity</span>
448 193: <span class="ruby-ivar">@entities</span>[<span class="ruby-identifier">action</span>][<span class="ruby-identifier">:output</span>][<span class="ruby-identifier">argument</span>] = {<span class="ruby-identifier">:description</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:description</span>],
449 194: <span class="ruby-identifier">:display_as</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:display_as</span>],
450 195: <span class="ruby-identifier">:default</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:default</span>]}
451 196: <span class="ruby-keyword kw">end</span>
457 <div id="method-M000176" class="method-detail">
458 <a name="M000176"></a>
460 <div class="method-heading">
461 <a href="#M000176" class="method-signature">
462 <span class="method-name">requires</span><span class="method-args">(requirement)</span>
466 <div class="method-description">
467 <p><a class="source-toggle" href="#"
468 onclick="toggleCode('M000176-source');return false;">[Source]</a></p>
469 <div class="method-source-code" id="M000176-source">
471 <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 198</span>
472 198: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">requires</span>(<span class="ruby-identifier">requirement</span>)
473 199: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"Requirement should be a hash in the form :item => 'requirement'"</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">requirement</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Hash</span>)
475 201: <span class="ruby-identifier">valid_requirements</span> = [<span class="ruby-identifier">:mcollective</span>]
477 203: <span class="ruby-identifier">requirement</span>.<span class="ruby-identifier">keys</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">key</span><span class="ruby-operator">|</span>
478 204: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">valid_requirements</span>.<span class="ruby-identifier">include?</span>(<span class="ruby-identifier">key</span>)
479 205: <span class="ruby-identifier">raise</span> <span class="ruby-value str">"Requirement %s is not a valid requirement, only %s is supported"</span> <span class="ruby-operator">%</span> [<span class="ruby-identifier">key</span>, <span class="ruby-identifier">valid_requirements</span>.<span class="ruby-identifier">join</span>(<span class="ruby-value str">", "</span>)]
480 206: <span class="ruby-keyword kw">end</span>
482 208: <span class="ruby-ivar">@requirements</span>[<span class="ruby-identifier">key</span>] = <span class="ruby-identifier">requirement</span>[<span class="ruby-identifier">key</span>]
483 209: <span class="ruby-keyword kw">end</span>
485 211: <span class="ruby-identifier">validate_requirements</span>
486 212: <span class="ruby-keyword kw">end</span>
492 <div id="method-M000169" class="method-detail">
493 <a name="M000169"></a>
495 <div class="method-heading">
496 <a href="#M000169" class="method-signature">
497 <span class="method-name">template_for_plugintype</span><span class="method-args">()</span>
501 <div class="method-description">
502 <p><a class="source-toggle" href="#"
503 onclick="toggleCode('M000169-source');return false;">[Source]</a></p>
504 <div class="method-source-code" id="M000169-source">
506 <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 67</span>
507 67: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">template_for_plugintype</span>
508 68: <span class="ruby-keyword kw">case</span> <span class="ruby-ivar">@plugintype</span>
509 69: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:agent</span>
510 70: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">"rpc-help.erb"</span>
511 71: <span class="ruby-keyword kw">else</span>
512 72: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">File</span>.<span class="ruby-identifier">exists?</span>(<span class="ruby-constant">Util</span>.<span class="ruby-identifier">templatepath</span>(<span class="ruby-node">"#{@plugintype}-help.erb"</span>))
513 73: <span class="ruby-keyword kw">return</span> <span class="ruby-node">"#{@plugintype}-help.erb"</span>
514 74: <span class="ruby-keyword kw">else</span>
515 75: <span class="ruby-comment cmt"># Default help template gets loaded if plugintype-help does not exist.</span>
516 76: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">"metadata-help.erb"</span>
517 77: <span class="ruby-keyword kw">end</span>
518 78: <span class="ruby-keyword kw">end</span>
519 79: <span class="ruby-keyword kw">end</span>
525 <div id="method-M000168" class="method-detail">
526 <a name="M000168"></a>
528 <div class="method-heading">
529 <a href="#M000168" class="method-signature">
530 <span class="method-name">usage</span><span class="method-args">(usage_text)</span>
534 <div class="method-description">
535 <p><a class="source-toggle" href="#"
536 onclick="toggleCode('M000168-source');return false;">[Source]</a></p>
537 <div class="method-source-code" id="M000168-source">
539 <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 63</span>
540 63: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">usage</span>(<span class="ruby-identifier">usage_text</span>)
541 64: <span class="ruby-ivar">@usage</span> = <span class="ruby-identifier">usage_text</span>
542 65: <span class="ruby-keyword kw">end</span>
548 <div id="method-M000173" class="method-detail">
549 <a name="M000173"></a>
551 <div class="method-heading">
552 <a href="#M000173" class="method-signature">
553 <span class="method-name">validate_input_argument</span><span class="method-args">(input, key, argument)</span>
557 <div class="method-description">
559 validate strings, lists and booleans, we‘ll add more types of
560 validators when all the use cases are clear
563 only does validation for arguments actually given, since some might be
564 optional. We validate the presense of the argument earlier so this is a
565 safe assumption, just to skip them.
568 :string can have maxlength and regex. A maxlength of 0 will bypasss checks
569 :list has a array of valid values
571 <p><a class="source-toggle" href="#"
572 onclick="toggleCode('M000173-source');return false;">[Source]</a></p>
573 <div class="method-source-code" id="M000173-source">
575 <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 127</span>
576 127: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">validate_input_argument</span>(<span class="ruby-identifier">input</span>, <span class="ruby-identifier">key</span>, <span class="ruby-identifier">argument</span>)
577 128: <span class="ruby-constant">Validator</span>.<span class="ruby-identifier">load_validators</span>
579 130: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">input</span>[<span class="ruby-identifier">key</span>][<span class="ruby-identifier">:type</span>]
580 131: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:string</span>
581 132: <span class="ruby-constant">Validator</span>.<span class="ruby-identifier">validate</span>(<span class="ruby-identifier">argument</span>, <span class="ruby-identifier">:string</span>)
583 134: <span class="ruby-constant">Validator</span>.<span class="ruby-identifier">length</span>(<span class="ruby-identifier">argument</span>, <span class="ruby-identifier">input</span>[<span class="ruby-identifier">key</span>][<span class="ruby-identifier">:maxlength</span>].<span class="ruby-identifier">to_i</span>)
585 136: <span class="ruby-constant">Validator</span>.<span class="ruby-identifier">validate</span>(<span class="ruby-identifier">argument</span>, <span class="ruby-identifier">input</span>[<span class="ruby-identifier">key</span>][<span class="ruby-identifier">:validation</span>])
587 138: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:list</span>
588 139: <span class="ruby-constant">Validator</span>.<span class="ruby-identifier">validate</span>(<span class="ruby-identifier">argument</span>, <span class="ruby-identifier">input</span>[<span class="ruby-identifier">key</span>][<span class="ruby-identifier">:list</span>])
590 141: <span class="ruby-keyword kw">else</span>
591 142: <span class="ruby-constant">Validator</span>.<span class="ruby-identifier">validate</span>(<span class="ruby-identifier">argument</span>, <span class="ruby-identifier">input</span>[<span class="ruby-identifier">key</span>][<span class="ruby-identifier">:type</span>])
592 143: <span class="ruby-keyword kw">end</span>
594 145: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
595 146: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">e</span>
596 147: <span class="ruby-constant">DDL</span>.<span class="ruby-identifier">validation_fail!</span>(<span class="ruby-identifier">:PLMC21</span>, <span class="ruby-value str">"Cannot validate input '%{input}': %{error}"</span>, <span class="ruby-identifier">:debug</span>, <span class="ruby-identifier">:input</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">key</span>, <span class="ruby-identifier">:error</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">e</span>.<span class="ruby-identifier">to_s</span>)
597 148: <span class="ruby-keyword kw">end</span>
603 <div id="method-M000172" class="method-detail">
604 <a name="M000172"></a>
606 <div class="method-heading">
607 <a href="#M000172" class="method-signature">
608 <span class="method-name">validate_requirements</span><span class="method-args">()</span>
612 <div class="method-description">
613 <p><a class="source-toggle" href="#"
614 onclick="toggleCode('M000172-source');return false;">[Source]</a></p>
615 <div class="method-source-code" id="M000172-source">
617 <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 103</span>
618 103: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">validate_requirements</span>
619 104: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">requirement</span> = <span class="ruby-ivar">@requirements</span>[<span class="ruby-identifier">:mcollective</span>]
620 105: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Util</span>.<span class="ruby-identifier">mcollective_version</span> <span class="ruby-operator">==</span> <span class="ruby-value str">"@DEVELOPMENT_VERSION@"</span>
621 106: <span class="ruby-identifier">log_code</span>(<span class="ruby-identifier">:PLMC19</span>, <span class="ruby-value str">"DDL requirements validation being skipped in development"</span>, <span class="ruby-identifier">:warn</span>)
622 107: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
623 108: <span class="ruby-keyword kw">end</span>
625 110: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">Util</span>.<span class="ruby-identifier">versioncmp</span>(<span class="ruby-constant">Util</span>.<span class="ruby-identifier">mcollective_version</span>, <span class="ruby-identifier">requirement</span>) <span class="ruby-operator"><</span> <span class="ruby-value">0</span>
626 111: <span class="ruby-constant">DDL</span>.<span class="ruby-identifier">validation_fail!</span>(<span class="ruby-identifier">:PLMC20</span>, <span class="ruby-value str">"%{type} plugin '%{name}' requires MCollective version %{requirement} or newer"</span>, <span class="ruby-identifier">:debug</span>, <span class="ruby-identifier">:type</span> =<span class="ruby-operator">></span> <span class="ruby-ivar">@plugintype</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">capitalize</span>, <span class="ruby-identifier">:name</span> =<span class="ruby-operator">></span> <span class="ruby-ivar">@pluginname</span>, <span class="ruby-identifier">:requirement</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">requirement</span>)
627 112: <span class="ruby-keyword kw">end</span>
628 113: <span class="ruby-keyword kw">end</span>
630 115: <span class="ruby-keyword kw">true</span>
631 116: <span class="ruby-keyword kw">end</span>
644 <div id="validator-badges">
645 <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>