Sweet. If I can get away from the tedious front-end stuff, I will try to build a TD patch.<br><br><div><span class="gmail_quote">On 7/16/07, <b class="gmail_sendername">Jesse Vincent</b> &lt;<a href="mailto:jesse@bestpractical.com">
jesse@bestpractical.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>On Jul 13, 2007, at 11:25 PM, Andrew Sterling Hanenkamp wrote:
<br><br>&gt; I was thinking of porting CAS+ from Mason to Template::Declare, but<br>&gt; I&#39;d have to use something like XML::Writer to handle the XML pages.<br>&gt; That&#39;s not so bad really, but it&#39;s not quite as nice as the typical
<br>&gt; Template::Declare templates. So, I was trying to think of a way to get<br>&gt; something better going. I tried to emulate the Jifty::DBI::Schema and<br>&gt; Jifty::Action::Param declarations.<br>&gt;<br>&gt; Here&#39;s a sample of what I was thinking:
<br>&gt;<br><br>Yes! I&#39;d love to see a T::D subclass to do this.<br><br><br>&gt; use Template::Declare::XML;<br>&gt; use Jifty::View::Declare schema {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;namespace cas =&gt; &#39;<a href="http://www.yale.edu/tp/cas">
http://www.yale.edu/tp/cas</a>&#39;;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;default_prefix is &#39;cas&#39;;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;tag serviceResponse =&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is not_empty;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;tag authenticationSuccess =&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is not_empty;
<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;tag user =&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is data;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;tag proxyGrantingTicket =&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is data;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;tag authenticationFailure =&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attributes {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attribute code =&gt;
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is required;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is not_empty;<br>&gt; };<br>&gt;<br>&gt; template &#39;serviceValidate&#39; =&gt; sub {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;my $result = get &#39;result&#39;;<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;xml_decl { version =&gt; 
1.0, encoding =&gt; &#39;UTF-8&#39; };<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;serviceResponse {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($result-&gt;success) {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;authenticationSuccess {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;user { $result-&gt;content(&#39;username&#39;); };
<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($result-&gt;content(&#39;proxy_granting_ticket&#39;)) {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proxyGrantingTicket {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result-&gt;content(&#39;proxy_granting_ticket&#39;);
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;authenticationFailure {<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attr { code =&gt; $result-&gt;content(&#39;code&#39;) };
<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result-&gt;error;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;};<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;};<br>&gt; };<br>&gt;<br>&gt; Not shown are some additional properties like:<br>&gt;<br>&gt; tag &#39;serviceResponse&#39; =&gt;
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;prefix is &#39;cas&#39;,<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;local_name is &#39;serviceResponse&#39;,<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;is not_empty;<br>&gt;<br>&gt; With the default_prefix I show, the prefix property would be assumed.<br>&gt; The local_name is inferred from the tag name, but can be overridden
<br>&gt; for some cases, like if:<br>&gt;<br>&gt; tag &#39;service_response&#39; =&gt; local_name &#39;service-response&#39;;<br>&gt;<br>&gt; An addition heuristic would be handling prefixes in the tag name like:<br>&gt;<br>
&gt; tag &#39;cas_serviceResponse&#39; =&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;is not_empty;<br>&gt;<br>&gt; If there&#39;s a namespace prefix &quot;cas&quot; then it can infer this to be<br>&gt; shorthand for:<br>&gt;<br>&gt; tag &#39;cas_serviceResponse&#39; =&gt;
<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;prefix &#39;cas&#39;,<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;local_name &#39;serviceResponse&#39;,<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp;is not_empty;<br>&gt;<br>&gt; The &quot;not_empty&quot; and &quot;data&quot; provide simple validation checks to warn<br>&gt; you when a tag is expected to have content, but didn&#39;t have any or
<br>&gt; when a tag contained tags and only text nodes were expected. An<br>&gt; addition &quot;empty&quot; could also be used to indicate that a tag is expected<br>&gt; to be empty. These wouldn&#39;t need to be implemented in the first
<br>&gt; revision.<br>&gt;<br>&gt; I&#39;m not certain that the &quot;attributes&quot; property is really necessary<br>&gt; either, but it could again provide an extra validation check to let<br>&gt; the engine know that things are sane.
<br>&gt;<br>&gt; Questions? Comments?<br>&gt; _______________________________________________<br>&gt; jifty-devel mailing list<br>&gt; <a href="mailto:jifty-devel@lists.jifty.org">jifty-devel@lists.jifty.org</a><br>&gt; <a href="http://lists.jifty.org/cgi-bin/mailman/listinfo/jifty-devel">
http://lists.jifty.org/cgi-bin/mailman/listinfo/jifty-devel</a><br>&gt;<br><br><br>_______________________________________________<br>jifty-devel mailing list<br><a href="mailto:jifty-devel@lists.jifty.org">jifty-devel@lists.jifty.org
</a><br><a href="http://lists.jifty.org/cgi-bin/mailman/listinfo/jifty-devel">http://lists.jifty.org/cgi-bin/mailman/listinfo/jifty-devel</a><br><br><br></blockquote></div><br>