--- /dev/null
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title>Class: MCollective::DDL::Base</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
+ <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
+ <script type="text/javascript">
+ // <![CDATA[
+
+ function popupCode( url ) {
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
+ }
+
+ function toggleCode( id ) {
+ if ( document.getElementById )
+ elem = document.getElementById( id );
+ else if ( document.all )
+ elem = eval( "document.all." + id );
+ else
+ return false;
+
+ elemStyle = elem.style;
+
+ if ( elemStyle.display != "block" ) {
+ elemStyle.display = "block"
+ } else {
+ elemStyle.display = "none"
+ }
+
+ return true;
+ }
+
+ // Make codeblocks hidden by default
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
+
+ // ]]>
+ </script>
+
+</head>
+<body>
+
+
+
+ <div id="classHeader">
+ <table class="header-table">
+ <tr class="top-aligned-row">
+ <td><strong>Class</strong></td>
+ <td class="class-name-in-header">MCollective::DDL::Base</td>
+ </tr>
+ <tr class="top-aligned-row">
+ <td><strong>In:</strong></td>
+ <td>
+ <a href="../../../files/lib/mcollective/ddl/base_rb.html">
+ lib/mcollective/ddl/base.rb
+ </a>
+ <br />
+ </td>
+ </tr>
+
+ <tr class="top-aligned-row">
+ <td><strong>Parent:</strong></td>
+ <td>
+ Object
+ </td>
+ </tr>
+ </table>
+ </div>
+ <!-- banner header -->
+
+ <div id="bodyContent">
+
+
+
+ <div id="contextContent">
+
+ <div id="description">
+ <p>
+The base class for all kinds of <a href="../DDL.html">DDL</a> files. <a
+href="../DDL.html">DDL</a> files when run gets parsed and builds up a hash
+of the basic primitive types, ideally restricted so it can be converted to
+JSON though today there are some Ruby Symbols in them which might be fixed
+laster on.
+</p>
+<p>
+The Hash being built should be stored in @entities, the format is generally
+not prescribed but there‘s a definite feel to how <a
+href="../DDL.html">DDL</a> files look so study the agent and discovery ones
+to see how the structure applies to very different use cases.
+</p>
+<p>
+For every plugin type you should have a single word name - that corresponds
+to the directory in the libdir where these plugins live. If you need
+anything above and beyond ‘<a
+href="Base.html#M000177">metadata</a>’ in your plugin <a
+href="../DDL.html">DDL</a> then add a PlugintypeDDL class here and add your
+specific behaviors to those.
+</p>
+
+ </div>
+
+
+ </div>
+
+ <div id="method-list">
+ <h3 class="section-bar">Methods</h3>
+
+ <div class="name-list">
+ <a href="#M000171">findddlfile</a>
+ <a href="#M000167">help</a>
+ <a href="#M000174">input</a>
+ <a href="#M000170">loadddlfile</a>
+ <a href="#M000177">metadata</a>
+ <a href="#M000166">new</a>
+ <a href="#M000175">output</a>
+ <a href="#M000176">requires</a>
+ <a href="#M000169">template_for_plugintype</a>
+ <a href="#M000168">usage</a>
+ <a href="#M000173">validate_input_argument</a>
+ <a href="#M000172">validate_requirements</a>
+ </div>
+ </div>
+
+ </div>
+
+
+ <!-- if includes -->
+ <div id="includes">
+ <h3 class="section-bar">Included Modules</h3>
+
+ <div id="includes-list">
+ <span class="include-name"><a href="../Translatable.html">Translatable</a></span>
+ </div>
+ </div>
+
+ <div id="section">
+
+
+
+
+
+ <div id="attribute-list">
+ <h3 class="section-bar">Attributes</h3>
+
+ <div class="name-list">
+ <table>
+ <tr class="top-aligned-row context-row">
+ <td class="context-item-name">entities</td>
+ <td class="context-item-value"> [R] </td>
+ <td class="context-item-desc"></td>
+ </tr>
+ <tr class="top-aligned-row context-row">
+ <td class="context-item-name">meta</td>
+ <td class="context-item-value"> [R] </td>
+ <td class="context-item-desc"></td>
+ </tr>
+ <tr class="top-aligned-row context-row">
+ <td class="context-item-name">pluginname</td>
+ <td class="context-item-value"> [R] </td>
+ <td class="context-item-desc"></td>
+ </tr>
+ <tr class="top-aligned-row context-row">
+ <td class="context-item-name">plugintype</td>
+ <td class="context-item-value"> [R] </td>
+ <td class="context-item-desc"></td>
+ </tr>
+ <tr class="top-aligned-row context-row">
+ <td class="context-item-name">requirements</td>
+ <td class="context-item-value"> [R] </td>
+ <td class="context-item-desc"></td>
+ </tr>
+ <tr class="top-aligned-row context-row">
+ <td class="context-item-name">usage</td>
+ <td class="context-item-value"> [R] </td>
+ <td class="context-item-desc"></td>
+ </tr>
+ </table>
+ </div>
+ </div>
+
+
+
+ <!-- if method_list -->
+ <div id="methods">
+ <h3 class="section-bar">Public Class methods</h3>
+
+ <div id="method-M000166" class="method-detail">
+ <a name="M000166"></a>
+
+ <div class="method-heading">
+ <a href="#M000166" class="method-signature">
+ <span class="method-name">new</span><span class="method-args">(plugin, plugintype=:agent, loadddl=true)</span>
+ </a>
+ </div>
+
+ <div class="method-description">
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('M000166-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000166-source">
+<pre>
+ <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 24</span>
+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>)
+25: <span class="ruby-ivar">@entities</span> = {}
+26: <span class="ruby-ivar">@meta</span> = {}
+27: <span class="ruby-ivar">@usage</span> = <span class="ruby-value str">""</span>
+28: <span class="ruby-ivar">@config</span> = <span class="ruby-constant">Config</span>.<span class="ruby-identifier">instance</span>
+29: <span class="ruby-ivar">@pluginname</span> = <span class="ruby-identifier">plugin</span>
+30: <span class="ruby-ivar">@plugintype</span> = <span class="ruby-identifier">plugintype</span>.<span class="ruby-identifier">to_sym</span>
+31: <span class="ruby-ivar">@requirements</span> = {}
+32:
+33: <span class="ruby-identifier">loadddlfile</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">loadddl</span>
+34: <span class="ruby-keyword kw">end</span>
+</pre>
+ </div>
+ </div>
+ </div>
+
+ <h3 class="section-bar">Public Instance methods</h3>
+
+ <div id="method-M000171" class="method-detail">
+ <a name="M000171"></a>
+
+ <div class="method-heading">
+ <a href="#M000171" class="method-signature">
+ <span class="method-name">findddlfile</span><span class="method-args">(ddlname=nil, ddltype=nil)</span>
+ </a>
+ </div>
+
+ <div class="method-description">
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('M000171-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000171-source">
+<pre>
+ <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 89</span>
+ 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>)
+ 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>
+ 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>
+ 92:
+ 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>
+ 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>])
+ 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>)
+ 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>)
+ 97: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">ddlfile</span>
+ 98: <span class="ruby-keyword kw">end</span>
+ 99: <span class="ruby-keyword kw">end</span>
+100: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>
+101: <span class="ruby-keyword kw">end</span>
+</pre>
+ </div>
+ </div>
+ </div>
+
+ <div id="method-M000167" class="method-detail">
+ <a name="M000167"></a>
+
+ <div class="method-heading">
+ <a href="#M000167" class="method-signature">
+ <span class="method-name">help</span><span class="method-args">(template=nil)</span>
+ </a>
+ </div>
+
+ <div class="method-description">
+ <p>
+Generates <a href="Base.html#M000167">help</a> using the template based on
+the data created with <a href="Base.html#M000177">metadata</a> and <a
+href="Base.html#M000174">input</a>.
+</p>
+<p>
+If no template name is provided one will be chosen based on the plugin
+type. If the provided template path is not absolute then the template will
+be loaded either from the config dir and if that does not exist, default to
+/etc/mcollective
+</p>
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('M000167-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000167-source">
+<pre>
+ <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 44</span>
+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>)
+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>
+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>)
+47:
+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>)
+49: <span class="ruby-identifier">meta</span> = <span class="ruby-ivar">@meta</span>
+50: <span class="ruby-identifier">entities</span> = <span class="ruby-ivar">@entities</span>
+51:
+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>
+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>)
+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>)
+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>)
+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>)
+57: <span class="ruby-keyword kw">end</span>
+58:
+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>)
+60: <span class="ruby-identifier">erb</span>.<span class="ruby-identifier">result</span>(<span class="ruby-identifier">binding</span>)
+61: <span class="ruby-keyword kw">end</span>
+</pre>
+ </div>
+ </div>
+ </div>
+
+ <div id="method-M000174" class="method-detail">
+ <a name="M000174"></a>
+
+ <div class="method-heading">
+ <a href="#M000174" class="method-signature">
+ <span class="method-name">input</span><span class="method-args">(argument, properties)</span>
+ </a>
+ </div>
+
+ <div class="method-description">
+ <p>
+Registers an <a href="Base.html#M000174">input</a> argument for a given
+action
+</p>
+<p>
+See the documentation for action for how to use this
+</p>
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('M000174-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000174-source">
+<pre>
+ <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 153</span>
+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>)
+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>
+155:
+156: <span class="ruby-identifier">entity</span> = <span class="ruby-ivar">@current_entity</span>
+157:
+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>
+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>)
+160: <span class="ruby-keyword kw">end</span>
+161:
+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>],
+163: <span class="ruby-identifier">:description</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:description</span>],
+164: <span class="ruby-identifier">:type</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:type</span>],
+165: <span class="ruby-identifier">:default</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:default</span>],
+166: <span class="ruby-identifier">:optional</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:optional</span>]}
+167:
+168: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:type</span>]
+169: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:string</span>
+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>)
+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>)
+172:
+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>]
+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>]
+175:
+176: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:list</span>
+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>)
+178:
+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>]
+180: <span class="ruby-keyword kw">end</span>
+181: <span class="ruby-keyword kw">end</span>
+</pre>
+ </div>
+ </div>
+ </div>
+
+ <div id="method-M000170" class="method-detail">
+ <a name="M000170"></a>
+
+ <div class="method-heading">
+ <a href="#M000170" class="method-signature">
+ <span class="method-name">loadddlfile</span><span class="method-args">()</span>
+ </a>
+ </div>
+
+ <div class="method-description">
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('M000170-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000170-source">
+<pre>
+ <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 81</span>
+81: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">loadddlfile</span>
+82: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">ddlfile</span> = <span class="ruby-identifier">findddlfile</span>
+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>)
+84: <span class="ruby-keyword kw">else</span>
+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>)
+86: <span class="ruby-keyword kw">end</span>
+87: <span class="ruby-keyword kw">end</span>
+</pre>
+ </div>
+ </div>
+ </div>
+
+ <div id="method-M000177" class="method-detail">
+ <a name="M000177"></a>
+
+ <div class="method-heading">
+ <a href="#M000177" class="method-signature">
+ <span class="method-name">metadata</span><span class="method-args">(meta)</span>
+ </a>
+ </div>
+
+ <div class="method-description">
+ <p>
+Registers meta data for the introspection hash
+</p>
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('M000177-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000177-source">
+<pre>
+ <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 215</span>
+215: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">metadata</span>(<span class="ruby-identifier">meta</span>)
+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>
+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>)
+218: <span class="ruby-keyword kw">end</span>
+219:
+220: <span class="ruby-ivar">@meta</span> = <span class="ruby-identifier">meta</span>
+221: <span class="ruby-keyword kw">end</span>
+</pre>
+ </div>
+ </div>
+ </div>
+
+ <div id="method-M000175" class="method-detail">
+ <a name="M000175"></a>
+
+ <div class="method-heading">
+ <a href="#M000175" class="method-signature">
+ <span class="method-name">output</span><span class="method-args">(argument, properties)</span>
+ </a>
+ </div>
+
+ <div class="method-description">
+ <p>
+Registers an <a href="Base.html#M000175">output</a> argument for a given
+action
+</p>
+<p>
+See the documentation for action for how to use this
+</p>
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('M000175-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000175-source">
+<pre>
+ <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 186</span>
+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>)
+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>
+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>)
+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>)
+190:
+191: <span class="ruby-identifier">action</span> = <span class="ruby-ivar">@current_entity</span>
+192:
+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>],
+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>],
+195: <span class="ruby-identifier">:default</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">properties</span>[<span class="ruby-identifier">:default</span>]}
+196: <span class="ruby-keyword kw">end</span>
+</pre>
+ </div>
+ </div>
+ </div>
+
+ <div id="method-M000176" class="method-detail">
+ <a name="M000176"></a>
+
+ <div class="method-heading">
+ <a href="#M000176" class="method-signature">
+ <span class="method-name">requires</span><span class="method-args">(requirement)</span>
+ </a>
+ </div>
+
+ <div class="method-description">
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('M000176-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000176-source">
+<pre>
+ <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 198</span>
+198: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">requires</span>(<span class="ruby-identifier">requirement</span>)
+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>)
+200:
+201: <span class="ruby-identifier">valid_requirements</span> = [<span class="ruby-identifier">:mcollective</span>]
+202:
+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>
+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>)
+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>)]
+206: <span class="ruby-keyword kw">end</span>
+207:
+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>]
+209: <span class="ruby-keyword kw">end</span>
+210:
+211: <span class="ruby-identifier">validate_requirements</span>
+212: <span class="ruby-keyword kw">end</span>
+</pre>
+ </div>
+ </div>
+ </div>
+
+ <div id="method-M000169" class="method-detail">
+ <a name="M000169"></a>
+
+ <div class="method-heading">
+ <a href="#M000169" class="method-signature">
+ <span class="method-name">template_for_plugintype</span><span class="method-args">()</span>
+ </a>
+ </div>
+
+ <div class="method-description">
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('M000169-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000169-source">
+<pre>
+ <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 67</span>
+67: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">template_for_plugintype</span>
+68: <span class="ruby-keyword kw">case</span> <span class="ruby-ivar">@plugintype</span>
+69: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:agent</span>
+70: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">"rpc-help.erb"</span>
+71: <span class="ruby-keyword kw">else</span>
+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>))
+73: <span class="ruby-keyword kw">return</span> <span class="ruby-node">"#{@plugintype}-help.erb"</span>
+74: <span class="ruby-keyword kw">else</span>
+75: <span class="ruby-comment cmt"># Default help template gets loaded if plugintype-help does not exist.</span>
+76: <span class="ruby-keyword kw">return</span> <span class="ruby-value str">"metadata-help.erb"</span>
+77: <span class="ruby-keyword kw">end</span>
+78: <span class="ruby-keyword kw">end</span>
+79: <span class="ruby-keyword kw">end</span>
+</pre>
+ </div>
+ </div>
+ </div>
+
+ <div id="method-M000168" class="method-detail">
+ <a name="M000168"></a>
+
+ <div class="method-heading">
+ <a href="#M000168" class="method-signature">
+ <span class="method-name">usage</span><span class="method-args">(usage_text)</span>
+ </a>
+ </div>
+
+ <div class="method-description">
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('M000168-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000168-source">
+<pre>
+ <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 63</span>
+63: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">usage</span>(<span class="ruby-identifier">usage_text</span>)
+64: <span class="ruby-ivar">@usage</span> = <span class="ruby-identifier">usage_text</span>
+65: <span class="ruby-keyword kw">end</span>
+</pre>
+ </div>
+ </div>
+ </div>
+
+ <div id="method-M000173" class="method-detail">
+ <a name="M000173"></a>
+
+ <div class="method-heading">
+ <a href="#M000173" class="method-signature">
+ <span class="method-name">validate_input_argument</span><span class="method-args">(input, key, argument)</span>
+ </a>
+ </div>
+
+ <div class="method-description">
+ <p>
+validate strings, lists and booleans, we‘ll add more types of
+validators when all the use cases are clear
+</p>
+<p>
+only does validation for arguments actually given, since some might be
+optional. We validate the presense of the argument earlier so this is a
+safe assumption, just to skip them.
+</p>
+<p>
+:string can have maxlength and regex. A maxlength of 0 will bypasss checks
+:list has a array of valid values
+</p>
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('M000173-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000173-source">
+<pre>
+ <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 127</span>
+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>)
+128: <span class="ruby-constant">Validator</span>.<span class="ruby-identifier">load_validators</span>
+129:
+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>]
+131: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:string</span>
+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>)
+133:
+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>)
+135:
+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>])
+137:
+138: <span class="ruby-keyword kw">when</span> <span class="ruby-identifier">:list</span>
+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>])
+140:
+141: <span class="ruby-keyword kw">else</span>
+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>])
+143: <span class="ruby-keyword kw">end</span>
+144:
+145: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
+146: <span class="ruby-keyword kw">rescue</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">e</span>
+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>)
+148: <span class="ruby-keyword kw">end</span>
+</pre>
+ </div>
+ </div>
+ </div>
+
+ <div id="method-M000172" class="method-detail">
+ <a name="M000172"></a>
+
+ <div class="method-heading">
+ <a href="#M000172" class="method-signature">
+ <span class="method-name">validate_requirements</span><span class="method-args">()</span>
+ </a>
+ </div>
+
+ <div class="method-description">
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('M000172-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="M000172-source">
+<pre>
+ <span class="ruby-comment cmt"># File lib/mcollective/ddl/base.rb, line 103</span>
+103: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">validate_requirements</span>
+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>]
+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>
+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>)
+107: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>
+108: <span class="ruby-keyword kw">end</span>
+109:
+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>
+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>)
+112: <span class="ruby-keyword kw">end</span>
+113: <span class="ruby-keyword kw">end</span>
+114:
+115: <span class="ruby-keyword kw">true</span>
+116: <span class="ruby-keyword kw">end</span>
+</pre>
+ </div>
+ </div>
+ </div>
+
+
+ </div>
+
+
+ </div>
+
+
+<div id="validator-badges">
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
+</div>
+
+</body>
+</html>
\ No newline at end of file