<?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>Module: OpenStructable</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>Module</strong></td> <td class="class-name-in-header">OpenStructable</td> </tr> <tr class="top-aligned-row"> <td><strong>In:</strong></td> <td> <a href="../files/lib/carat/ostructable_rb.html"> lib/carat/ostructable.rb </a> <br /> </td> </tr> </table> </div> <!-- banner header --> <div id="bodyContent"> <div id="contextContent"> <div id="description"> <h1><a href="OpenStructable.html">OpenStructable</a></h1> <p> OpensStructable is a mixin module which can provide OpenStruct behavior to any class or object. <a href="OpenStructable.html">OpenStructable</a> allows extention of data objects with arbitrary attributes. </p> <h2>Usage</h2> <pre> require 'raspberry/new/ostructable' class Record include OpenStructable end record = Record.new record.name = "John Smith" record.age = 70 record.pension = 300 puts record.name # -> "John Smith" puts record.address # -> nil </pre> <h2>TODO</h2> <ul> <li>Keep this uptodate with ostruct.rb. </li> <li>See if Matz will accept it into core so we don’t have to anymore! </li> <li>As with OpenStruct, marshalling is problematic at the moment. </li> </ul> <h2>Author(s)</h2> <ul> <li>Yukihiro Matsumoto </li> <li>Gavin Sinclair (Documentation) </li> <li>Thomas Sawyer </li> </ul> <h2>History</h2> <ul> <li>2005.04.11 Passed basic test. </li> </ul> </div> </div> <div id="method-list"> <h3 class="section-bar">Methods</h3> <div class="name-list"> <a href="#M000625">==</a> <a href="#M000623">delete_field</a> <a href="#M000620">initialize_copy</a> <a href="#M000624">inspect</a> <a href="#M000621">new_ostruct_member</a> <a href="#M000622">update</a> </div> </div> </div> <!-- if includes --> <div id="section"> <!-- if method_list --> <div id="methods"> <h3 class="section-bar">Public Instance methods</h3> <div id="method-M000625" class="method-detail"> <a name="M000625"></a> <div class="method-heading"> <a href="#M000625" class="method-signature"> <span class="method-name">==</span><span class="method-args">(other)</span> </a> </div> <div class="method-description"> <p> Compare this object and <tt>other</tt> for equality. </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000625-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000625-source"> <pre> <span class="ruby-comment cmt"># File lib/carat/ostructable.rb, line 120</span> <span class="ruby-keyword kw">def</span> <span class="ruby-operator">==</span>(<span class="ruby-identifier">other</span>) <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span> <span class="ruby-keyword kw">unless</span>(<span class="ruby-identifier">other</span>.<span class="ruby-identifier">kind_of?</span>(<span class="ruby-constant">OpenStruct</span>)) <span class="ruby-keyword kw">return</span> <span class="ruby-ivar">@__table__</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">other</span>.<span class="ruby-identifier">table</span> <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000623" class="method-detail"> <a name="M000623"></a> <div class="method-heading"> <a href="#M000623" class="method-signature"> <span class="method-name">delete_field</span><span class="method-args">(name)</span> </a> </div> <div class="method-description"> <p> Remove the named field from the object. </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000623-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000623-source"> <pre> <span class="ruby-comment cmt"># File lib/carat/ostructable.rb, line 96</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">delete_field</span>(<span class="ruby-identifier">name</span>) <span class="ruby-ivar">@__table__</span> <span class="ruby-operator">||=</span> {} <span class="ruby-ivar">@__table__</span>.<span class="ruby-identifier">delete</span> <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_sym</span> <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000620" class="method-detail"> <a name="M000620"></a> <div class="method-heading"> <a href="#M000620" class="method-signature"> <span class="method-name">initialize_copy</span><span class="method-args">(orig)</span> </a> </div> <div class="method-description"> <p> Duplicate an OpenStruct object members. </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000620-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000620-source"> <pre> <span class="ruby-comment cmt"># File lib/carat/ostructable.rb, line 46</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize_copy</span>(<span class="ruby-identifier">orig</span>) <span class="ruby-keyword kw">super</span> <span class="ruby-ivar">@__table__</span> = <span class="ruby-ivar">@__table__</span>.<span class="ruby-identifier">dup</span> <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000624" class="method-detail"> <a name="M000624"></a> <div class="method-heading"> <a href="#M000624" class="method-signature"> <span class="method-name">inspect</span><span class="method-args">()</span> </a> </div> <div class="method-description"> <p> Returns a string containing a detailed summary of the keys and values. </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000624-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000624-source"> <pre> <span class="ruby-comment cmt"># File lib/carat/ostructable.rb, line 104</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">inspect</span> <span class="ruby-identifier">str</span> = <span class="ruby-node">"<#{self.class}"</span> <span class="ruby-keyword kw">for</span> <span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span> <span class="ruby-keyword kw">in</span> (<span class="ruby-ivar">@__table__</span> <span class="ruby-operator">||=</span> {}) <span class="ruby-identifier">str</span> <span class="ruby-operator"><<</span> <span class="ruby-node">" #{k}=#{v.inspect}"</span> <span class="ruby-keyword kw">end</span> <span class="ruby-identifier">str</span> <span class="ruby-operator"><<</span> <span class="ruby-value str">">"</span> <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000621" class="method-detail"> <a name="M000621"></a> <div class="method-heading"> <a href="#M000621" class="method-signature"> <span class="method-name">new_ostruct_member</span><span class="method-args">(name)</span> </a> </div> <div class="method-description"> <p><a class="source-toggle" href="#" onclick="toggleCode('M000621-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000621-source"> <pre> <span class="ruby-comment cmt"># File lib/carat/ostructable.rb, line 51</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">new_ostruct_member</span>(<span class="ruby-identifier">name</span>) <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">instance_eval</span> <span class="ruby-node">%{ def #{name}; @__table__[:#{name}]; end def #{name}=(x); @__table__[:#{name}] = x; end }</span> <span class="ruby-keyword kw">end</span> </pre> </div> </div> </div> <div id="method-M000622" class="method-detail"> <a name="M000622"></a> <div class="method-heading"> <a href="#M000622" class="method-signature"> <span class="method-name">update</span><span class="method-args">(hash)</span> </a> </div> <div class="method-description"> <p> Generate additional attributes and values. </p> <p><a class="source-toggle" href="#" onclick="toggleCode('M000622-source');return false;">[Source]</a></p> <div class="method-source-code" id="M000622-source"> <pre> <span class="ruby-comment cmt"># File lib/carat/ostructable.rb, line 61</span> <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">update</span>(<span class="ruby-identifier">hash</span>) <span class="ruby-ivar">@__table__</span> <span class="ruby-operator">||=</span> {} <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">hash</span> <span class="ruby-keyword kw">for</span> <span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span> <span class="ruby-keyword kw">in</span> <span class="ruby-identifier">hash</span> <span class="ruby-ivar">@__table__</span>[<span class="ruby-identifier">k</span>.<span class="ruby-identifier">to_sym</span>] = <span class="ruby-identifier">v</span> <span class="ruby-identifier">new_ostruct_member</span>(<span class="ruby-identifier">k</span>) <span class="ruby-keyword kw">end</span> <span class="ruby-keyword kw">end</span> <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>