<?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> <head> <title>Class: SQLite3::Translator</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" /> <script language="JavaScript" type="text/javascript"> // <![CDATA[ function toggleSource( id ) { var elem var link if( document.getElementById ) { elem = document.getElementById( id ) link = document.getElementById( "l_" + id ) } else if ( document.all ) { elem = eval( "document.all." + id ) link = eval( "document.all.l_" + id ) } else return false; if( elem.style.display == "block" ) { elem.style.display = "none" link.innerHTML = "show source" } else { elem.style.display = "block" link.innerHTML = "hide source" } } function openCode( url ) { window.open( url, "SOURCE_CODE", "width=400,height=400,scrollbars=yes" ) } // ]]> </script> </head> <body> <table width="100%" border='0' cellpadding='0' cellspacing='0' class='banner'><tr> <td class="file-title"><span class="file-title-prefix">Class</span><br />SQLite3::Translator</td> <td align="right"> <table cellspacing=0 cellpadding=2> <tr valign="top"> <td>In:</td> <td> <a href="../../files/lib/sqlite3/translator_rb.html">lib/sqlite3/translator.rb</a> </td> </tr> <tr> <td>Parent:</td> <td> Object </td> </tr> </table> </td> </tr> </table> <!-- banner header --> <div id="bodyContent"> <div id="content"> <div class="description"><p> The <a href="Translator.html">Translator</a> class encapsulates the logic and callbacks necessary for converting string data to a value of some specified type. Every <a href="Database.html">Database</a> instance may have a <a href="Translator.html">Translator</a> instance, in order to assist in type translation (Database#type_translation). </p> <p> Further, applications may define their own custom type translation logic by registering translator blocks with the corresponding database‘s translator instance (<a href="Database.html#M000099">Database#translator</a>). </p> </div> <div class="sectiontitle">Methods</div> <ul> <li><a href="#M000072">add_translator</a></li> <li><a href="#M000071">new</a></li> <li><a href="#M000073">translate</a></li> </ul> <div class="sectiontitle">Public Class methods</div> <div class="method"> <div class="title"> <a name="M000071"></a><b>new</b>() </div> <div class="description"> <p> Create a <a href="Translator.html#M000071">new</a> <a href="Translator.html">Translator</a> instance. It will be preinitialized with default translators for most SQL data types. </p> </div> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000071_source')" id="l_M000071_source">show source</a> ]</p> <div id="M000071_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/sqlite3/translator.rb, line 18</span> 18: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span> 19: <span class="ruby-ivar">@translators</span> = <span class="ruby-constant">Hash</span>.<span class="ruby-identifier">new</span>( <span class="ruby-identifier">proc</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">type</span>,<span class="ruby-identifier">value</span><span class="ruby-operator">|</span> <span class="ruby-identifier">value</span> } ) 20: <span class="ruby-ivar">@type_name_cache</span> = {} 21: <span class="ruby-identifier">register_default_translators</span> 22: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div class="sectiontitle">Public Instance methods</div> <div class="method"> <div class="title"> <a name="M000072"></a><b>add_translator</b>( type ) {|type, value| ...} </div> <div class="description"> <p> Add a <a href="Translator.html#M000071">new</a> translator block, which will be invoked to process type translations to the given type. The type should be an SQL datatype, and may include parentheses (i.e., "VARCHAR(30)"). However, any parenthetical information is stripped off and discarded, so type translation decisions are made solely on the "base" type name. </p> <p> The translator block itself should accept two parameters, "type" and "value". In this case, the "type" is the full type name (including parentheses), so the block itself may include logic for changing how a type is translated based on the additional data. The "value" parameter is the (string) data to convert. </p> <p> The block should return the translated value. </p> </div> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000072_source')" id="l_M000072_source">show source</a> ]</p> <div id="M000072_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/sqlite3/translator.rb, line 37</span> 37: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">add_translator</span>( <span class="ruby-identifier">type</span>, <span class="ruby-operator">&</span><span class="ruby-identifier">block</span> ) <span class="ruby-comment cmt"># :yields: type, value</span> 38: <span class="ruby-ivar">@translators</span>[ <span class="ruby-identifier">type_name</span>( <span class="ruby-identifier">type</span> ) ] = <span class="ruby-identifier">block</span> 39: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div class="method"> <div class="title"> <a name="M000073"></a><b>translate</b>( type, value ) </div> <div class="description"> <p> Translate the given string value to a value of the given type. In the absense of an installed translator block for the given type, the value itself is always returned. Further, <tt>nil</tt> values are never translated, and are always passed straight through regardless of the type parameter. </p> </div> <div class="sourcecode"> <p class="source-link">[ <a href="javascript:toggleSource('M000073_source')" id="l_M000073_source">show source</a> ]</p> <div id="M000073_source" class="dyn-source"> <pre> <span class="ruby-comment cmt"># File lib/sqlite3/translator.rb, line 45</span> 45: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">translate</span>( <span class="ruby-identifier">type</span>, <span class="ruby-identifier">value</span> ) 46: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">value</span>.<span class="ruby-identifier">nil?</span> 47: <span class="ruby-ivar">@translators</span>[ <span class="ruby-identifier">type_name</span>( <span class="ruby-identifier">type</span> ) ].<span class="ruby-identifier">call</span>( <span class="ruby-identifier">type</span>, <span class="ruby-identifier">value</span> ) 48: <span class="ruby-keyword kw">end</span> 49: <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> </div> </div> </body> </html>