rdoc/RubyXL/OOXMLObject.html in rubyXL-2.2.0 vs rdoc/RubyXL/OOXMLObject.html in rubyXL-2.3.0
- old
+ new
@@ -2,11 +2,11 @@
<html>
<head>
<meta charset="UTF-8">
-<title>class RubyXL::OOXMLObject - rubyXL 2.1.3</title>
+<title>class RubyXL::OOXMLObject - rubyXL 2.3.0</title>
<link href="../fonts.css" rel="stylesheet">
<link href="../rdoc.css" rel="stylesheet">
<script type="text/javascript">
@@ -65,55 +65,21 @@
</div>
- <!-- Method Quickref -->
-<div id="method-list-section" class="nav-section">
- <h3>Methods</h3>
-
- <ul class="link-list" role="directory">
- <li ><a href="#method-c-define_attribute">::define_attribute</a>
-
- <li ><a href="#method-c-define_child_node">::define_child_node</a>
-
- <li ><a href="#method-c-define_element_name">::define_element_name</a>
-
- <li ><a href="#method-c-new">::new</a>
-
- <li ><a href="#method-c-obtain_class_variable">::obtain_class_variable</a>
-
- <li ><a href="#method-c-parse">::parse</a>
-
- <li ><a href="#method-c-set_countable">::set_countable</a>
-
- <li ><a href="#method-i-before_write_xml">#before_write_xml</a>
-
- <li class="calls-super" ><a href="#method-i-dup">#dup</a>
-
- <li ><a href="#method-i-index_in_collection">#index_in_collection</a>
-
- <li ><a href="#method-i-write_xml">#write_xml</a>
-
- </ul>
-</div>
-
</div>
</nav>
<main role="main" aria-labelledby="class-RubyXL::OOXMLObject">
<h1 id="class-RubyXL::OOXMLObject" class="class">
class RubyXL::OOXMLObject
</h1>
<section class="description">
-<p>Parent class for defining OOXML based objects (not unlike Rails’
-<code>ActiveRecord</code>!) Most importantly, provides functionality of
-parsing such objects from XML, and marshalling them to XML.</p>
-
</section>
@@ -125,732 +91,9 @@
- <section id="public-class-5Buntitled-5D-method-details" class="method-section">
- <header>
- <h3>Public Class Methods</h3>
- </header>
-
-
- <div id="method-c-define_attribute" class="method-detail ">
-
- <div class="method-heading">
- <span class="method-name">define_attribute</span><span
- class="method-args">(attr_name, attr_type, extra_params = {})</span>
-
- <span class="method-click-advice">click to toggle source</span>
-
- </div>
-
-
- <div class="method-description">
-
- <p>Defines an attribute of OOXML object.</p>
-
-<h3 id="method-c-define_attribute-label-Parameters">Parameters<span><a href="#method-c-define_attribute-label-Parameters">¶</a> <a href="#documentation">↑</a></span></h3>
-<ul><li>
-<p><code>attribute_name</code> - Name of the element attribute as seen in the
-source XML. Can be either <code>"String"</code> or
-<code>:Symbol</code></p>
-<ul><li>
-<p>Special attibute name <code>'_'</code> (underscore) denotes the value of
-the element rather than attribute.</p>
-</li></ul>
-</li><li>
-<p><code>attribute_type</code> - Specifies the conversion type for the
-attribute when parsing. Available options are:</p>
-<ul><li>
-<p><code>:int</code> - <code>Integer</code></p>
-</li><li>
-<p><code>:float</code> - <code>Float</code></p>
-</li><li>
-<p><code>:string</code> - <code>String</code> (no conversion)</p>
-</li><li>
-<p><code>:sqref</code> - <a href="Sqref.html">RubyXL::Sqref</a></p>
-</li><li>
-<p><code>:ref</code> - <a href="Reference.html">RubyXL::Reference</a></p>
-</li><li>
-<p><code>:bool</code> - <code>Boolean</code> ("1" and "true" convert to
-<code>true</code>, others to <code>false</code>)</p>
-</li><li>
-<p>one of <code>simple_types</code> - <code>String</code>, plus the list of
-acceptable values is saved for future validation (not used yet).</p>
-</li></ul>
-</li><li>
-<p><code>extra_parameters</code> - Hash of optional parameters as follows:</p>
-<ul><li>
-<p><code>:accessor</code> - Name of the accessor for this attribute to be
-defined on the object. If not provided, defaults to classidied
-<code>attribute_name</code>.</p>
-</li><li>
-<p><code>:default</code> - Value this attribute defaults to if not explicitly
-provided.</p>
-</li><li>
-<p><code>:required</code> - Whether this attribute is required when writing
-XML. If the value of the attrinute is not explicitly provided,
-<code>:default</code> is written instead.</p>
-</li></ul>
-</li></ul>
-
-<h4 id="method-c-define_attribute-label-Examples">Examples<span><a href="#method-c-define_attribute-label-Examples">¶</a> <a href="#documentation">↑</a></span></h4>
-
-<pre class="ruby"><span class="ruby-identifier">define_attribute</span>(:<span class="ruby-identifier">outline</span>, :<span class="ruby-identifier">bool</span>, :<span class="ruby-identifier">default</span> =<span class="ruby-operator">></span> <span class="ruby-keyword">true</span>)
-</pre>
-
-<p>A <code>Boolean</code> attribute ‘outline’ with default value
-<code>true</code> will be accessible by calling <code>obj.outline</code></p>
-
-<pre>define_attribute(:uniqueCount, :int)</pre>
-
-<p>An <code>Integer</code> attribute ‘uniqueCount’ accessible as
-<code>obj.unique_count</code></p>
-
-<pre class="ruby"><span class="ruby-identifier">define_attribute</span>(:<span class="ruby-identifier">_</span>, :<span class="ruby-identifier">string</span>, :<span class="ruby-identifier">accessor</span> =<span class="ruby-operator">></span> :<span class="ruby-identifier">expression</span>)
-</pre>
-
-<p>The value of the element will be accessible as a <code>String</code> by
-calling <code>obj.expression</code></p>
-
-<pre class="ruby"><span class="ruby-identifier">define_attribute</span>(:<span class="ruby-identifier">errorStyle</span>, :<span class="ruby-identifier">string</span>, :<span class="ruby-identifier">default</span> =<span class="ruby-operator">></span> <span class="ruby-string">'stop'</span>, :<span class="ruby-identifier">values</span> =<span class="ruby-operator">></span> <span class="ruby-node">%w{ stop warning information }</span>)
-</pre>
-
-<p>A <code>String</code> attribute named ‘errorStyle’ will be accessible as
-<code>obj.error_style</code>, valid values are
-<code>"stop"</code>, <code>"warning"</code>,
-<code>"information"</code></p>
-
-
-
-
- <div class="method-source-code" id="define_attribute-source">
- <pre><span class="ruby-comment"># File lib/rubyXL/objects/ooxml_object.rb, line 53</span>
-<span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">define_attribute</span>(<span class="ruby-identifier">attr_name</span>, <span class="ruby-identifier">attr_type</span>, <span class="ruby-identifier">extra_params</span> = {})
- <span class="ruby-identifier">attrs</span> = <span class="ruby-identifier">obtain_class_variable</span>(<span class="ruby-value">:@@ooxml_attributes</span>)
-
- <span class="ruby-identifier">accessor</span> = <span class="ruby-identifier">extra_params</span>[<span class="ruby-value">:accessor</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">accessorize</span>(<span class="ruby-identifier">attr_name</span>)
- <span class="ruby-identifier">attr_name</span> = <span class="ruby-identifier">attr_name</span>.<span class="ruby-identifier">to_s</span>
-
- <span class="ruby-identifier">attr_hash</span> = {
- <span class="ruby-value">:accessor</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">accessor</span>,
- <span class="ruby-value">:attr_type</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">attr_type</span>,
- <span class="ruby-value">:optional</span> =<span class="ruby-operator">></span> <span class="ruby-operator">!</span><span class="ruby-identifier">extra_params</span>[<span class="ruby-value">:required</span>],
- <span class="ruby-value">:default</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">extra_params</span>[<span class="ruby-value">:default</span>],
- }
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">attr_type</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Array</span>) <span class="ruby-keyword">then</span>
- <span class="ruby-identifier">attr_hash</span>[<span class="ruby-value">:values</span>] = <span class="ruby-identifier">attr_type</span>
- <span class="ruby-identifier">attr_hash</span>[<span class="ruby-value">:attr_type</span>] = <span class="ruby-value">:string</span>
- <span class="ruby-keyword">end</span>
-
-
- <span class="ruby-identifier">attrs</span>[<span class="ruby-identifier">attr_name</span>] = <span class="ruby-identifier">attr_hash</span>
-
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">send</span>(<span class="ruby-value">:attr_accessor</span>, <span class="ruby-identifier">accessor</span>)
-<span class="ruby-keyword">end</span></pre>
- </div>
-
- </div>
-
-
-
-
- </div>
-
-
- <div id="method-c-define_child_node" class="method-detail ">
-
- <div class="method-heading">
- <span class="method-name">define_child_node</span><span
- class="method-args">(klass, extra_params = {})</span>
-
- <span class="method-click-advice">click to toggle source</span>
-
- </div>
-
-
- <div class="method-description">
-
- <p>Defines a child node of OOXML object.</p>
-
-<h3 id="method-c-define_child_node-label-Parameters">Parameters<span><a href="#method-c-define_child_node-label-Parameters">¶</a> <a href="#documentation">↑</a></span></h3>
-<ul><li>
-<p><code>klass</code> - Class (descendant of <a
-href="OOXMLObject.html">RubyXL::OOXMLObject</a>) of the child nodes. Child
-node objects will be produced by calling <code>parse</code> method of that
-class.</p>
-</li><li>
-<p><code>extra_parameters</code> - Hash of optional parameters as follows:</p>
-<ul><li>
-<p><code>:accessor</code> - Name of the accessor for this attribute to be
-defined on the object. If not provided, defaults to classidied
-<code>attribute_name</code>.</p>
-</li><li>
-<p><code>:node_name</code> - Node name for the child node, in case it does not
-match the one defined by the <code>klass</code>.</p>
-</li><li>
-<p><code>:collection</code> - Whether the child node should be treated as a
-single node or a collection of nodes:</p>
-<ul><li>
-<p><code>false</code> (default) - child node is directly accessible through
-the respective accessor;</p>
-</li><li>
-<p><code>true</code> - a collection of child nodes is accessed as
-<code>Array</code> through the respective accessor;</p>
-</li><li>
-<p><code>:with_count</code> - same as <code>true</code>, but in addition, the
-attribute <code>count</code> is defined on the current object, that will be
-automatically set to the number of elements in the collection at the start
-of <code>write_xml</code> call.</p>
-</li></ul>
-</li></ul>
-</li></ul>
-
-<h4 id="method-c-define_child_node-label-Examples">Examples<span><a href="#method-c-define_child_node-label-Examples">¶</a> <a href="#documentation">↑</a></span></h4>
-
-<pre>define_child_node(RubyXL::Alignment)</pre>
-
-<p>Define a singular child node parsed by the RubyXL::BorderEdge.parse() and
-accessed by the default <code>obj.alignment</code> accessor</p>
-
-<pre class="ruby"><span class="ruby-identifier">define_child_node</span>(<span class="ruby-constant">RubyXL</span><span class="ruby-operator">::</span><span class="ruby-constant">Hyperlink</span>, :<span class="ruby-identifier">colection</span> =<span class="ruby-operator">></span> <span class="ruby-keyword">true</span>, :<span class="ruby-identifier">accessor</span> =<span class="ruby-operator">></span> :<span class="ruby-identifier">hyperlinks</span>)
-</pre>
-
-<p>Define an array of nodes accessed by <code>obj.hyperlinks</code> accessor,
-each of which will be parsed by the <a
-href="OOXMLObject.html#method-c-parse">::parse</a></p>
-
-<pre class="ruby"><span class="ruby-identifier">define_child_node</span>(<span class="ruby-constant">RubyXL</span><span class="ruby-operator">::</span><span class="ruby-constant">BorderEdge</span>, :<span class="ruby-identifier">node_name</span> =<span class="ruby-operator">></span> :<span class="ruby-identifier">left</span>)
-<span class="ruby-identifier">define_child_node</span>(<span class="ruby-constant">RubyXL</span><span class="ruby-operator">::</span><span class="ruby-constant">BorderEdge</span>, :<span class="ruby-identifier">node_name</span> =<span class="ruby-operator">></span> :<span class="ruby-identifier">right</span>)
-</pre>
-
-<p>Use class <a href="BorderEdge.html">RubyXL::BorderEdge</a> when parsing
-both the elements <code><left ...></code> and <code><right
-...></code> elements.</p>
-
-<pre class="ruby"><span class="ruby-identifier">define_child_node</span>(<span class="ruby-constant">RubyXL</span><span class="ruby-operator">::</span><span class="ruby-constant">Font</span>, :<span class="ruby-identifier">collection</span> =<span class="ruby-operator">></span> :<span class="ruby-identifier">with_count</span>, :<span class="ruby-identifier">accessor</span> =<span class="ruby-operator">></span> :<span class="ruby-identifier">fonts</span>)
-</pre>
-
-<p>Upon writing of the object this was defined on, its <code>count</code>
-attribute will be set to the count of nodes in <code>fonts</code> array</p>
-
-
-
-
- <div class="method-source-code" id="define_child_node-source">
- <pre><span class="ruby-comment"># File lib/rubyXL/objects/ooxml_object.rb, line 97</span>
-<span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">define_child_node</span>(<span class="ruby-identifier">klass</span>, <span class="ruby-identifier">extra_params</span> = {})
- <span class="ruby-identifier">child_nodes</span> = <span class="ruby-identifier">obtain_class_variable</span>(<span class="ruby-value">:@@ooxml_child_nodes</span>)
- <span class="ruby-identifier">child_node_name</span> = (<span class="ruby-identifier">extra_params</span>[<span class="ruby-value">:node_name</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">klass</span>.<span class="ruby-identifier">class_variable_get</span>(<span class="ruby-value">:@@ooxml_tag_name</span>)).<span class="ruby-identifier">to_s</span>
- <span class="ruby-identifier">accessor</span> = (<span class="ruby-identifier">extra_params</span>[<span class="ruby-value">:accessor</span>] <span class="ruby-operator">||</span> <span class="ruby-identifier">accessorize</span>(<span class="ruby-identifier">child_node_name</span>)).<span class="ruby-identifier">to_sym</span>
-
- <span class="ruby-identifier">child_nodes</span>[<span class="ruby-identifier">child_node_name</span>] = {
- <span class="ruby-value">:class</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">klass</span>,
- <span class="ruby-value">:is_array</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">extra_params</span>[<span class="ruby-value">:collection</span>],
- <span class="ruby-value">:accessor</span> =<span class="ruby-operator">></span> <span class="ruby-identifier">accessor</span>
- }
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">extra_params</span>[<span class="ruby-value">:collection</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:with_count</span> <span class="ruby-keyword">then</span>
- <span class="ruby-identifier">define_attribute</span>(<span class="ruby-value">:count</span>, <span class="ruby-value">:int</span>, <span class="ruby-value">:required</span> =<span class="ruby-operator">></span> <span class="ruby-keyword">true</span>)
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">send</span>(<span class="ruby-value">:attr_accessor</span>, <span class="ruby-identifier">accessor</span>)
-<span class="ruby-keyword">end</span></pre>
- </div>
-
- </div>
-
-
-
-
- </div>
-
-
- <div id="method-c-define_element_name" class="method-detail ">
-
- <div class="method-heading">
- <span class="method-name">define_element_name</span><span
- class="method-args">(element_name)</span>
-
- <span class="method-click-advice">click to toggle source</span>
-
- </div>
-
-
- <div class="method-description">
-
- <p>Defines the name of the element that represents the current OOXML object.
-Should only be used once per object. In case of different objects
-represented by the same class in different parts of OOXML tree,
-<code>:node_name</code> extra parameter can be used to override the
-default element name.</p>
-
-<h3 id="method-c-define_element_name-label-Parameters">Parameters<span><a href="#method-c-define_element_name-label-Parameters">¶</a> <a href="#documentation">↑</a></span></h3>
-<ul><li>
-<p><code>element_name</code></p>
-</li></ul>
-
-<h4 id="method-c-define_element_name-label-Examples">Examples<span><a href="#method-c-define_element_name-label-Examples">¶</a> <a href="#documentation">↑</a></span></h4>
-
-<pre>define_element_name 'externalReference'</pre>
-
-
-
-
- <div class="method-source-code" id="define_element_name-source">
- <pre><span class="ruby-comment"># File lib/rubyXL/objects/ooxml_object.rb, line 122</span>
-<span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">define_element_name</span>(<span class="ruby-identifier">element_name</span>)
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">class_variable_set</span>(<span class="ruby-value">:@@ooxml_tag_name</span>, <span class="ruby-identifier">element_name</span>)
-<span class="ruby-keyword">end</span></pre>
- </div>
-
- </div>
-
-
-
-
- </div>
-
-
- <div id="method-c-new" class="method-detail ">
-
- <div class="method-heading">
- <span class="method-name">new</span><span
- class="method-args">(params = {})</span>
-
- <span class="method-click-advice">click to toggle source</span>
-
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
-
- <div class="method-source-code" id="new-source">
- <pre><span class="ruby-comment"># File lib/rubyXL/objects/ooxml_object.rb, line 188</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">params</span> = {})
- <span class="ruby-identifier">obtain_class_variable</span>(<span class="ruby-value">:@@ooxml_attributes</span>).<span class="ruby-identifier">each_value</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">instance_variable_set</span>(<span class="ruby-node">"@#{v[:accessor]}"</span>, <span class="ruby-identifier">params</span>[<span class="ruby-identifier">v</span>[<span class="ruby-value">:accessor</span>]])
- }
-
- <span class="ruby-identifier">obtain_class_variable</span>(<span class="ruby-value">:@@ooxml_child_nodes</span>).<span class="ruby-identifier">each_value</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
-
- <span class="ruby-identifier">initial_value</span> =
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">params</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">v</span>[<span class="ruby-value">:accessor</span>]) <span class="ruby-keyword">then</span> <span class="ruby-identifier">params</span>[<span class="ruby-identifier">v</span>[<span class="ruby-value">:accessor</span>]]
- <span class="ruby-keyword">elsif</span> <span class="ruby-identifier">v</span>[<span class="ruby-value">:is_array</span>] <span class="ruby-keyword">then</span> []
- <span class="ruby-keyword">else</span> <span class="ruby-keyword">nil</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">instance_variable_set</span>(<span class="ruby-node">"@#{v[:accessor]}"</span>, <span class="ruby-identifier">initial_value</span>)
- }
-
- <span class="ruby-identifier">instance_variable_set</span>(<span class="ruby-string">"@count"</span>, <span class="ruby-value">0</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">obtain_class_variable</span>(<span class="ruby-value">:@@ooxml_countable</span>, <span class="ruby-keyword">false</span>)
-<span class="ruby-keyword">end</span></pre>
- </div>
-
- </div>
-
-
-
-
- </div>
-
-
- <div id="method-c-obtain_class_variable" class="method-detail ">
-
- <div class="method-heading">
- <span class="method-name">obtain_class_variable</span><span
- class="method-args">(var_name, default = {})</span>
-
- <span class="method-click-advice">click to toggle source</span>
-
- </div>
-
-
- <div class="method-description">
-
- <p>Get the value of a [sub]class variable if it exists, or create the
-respective variable with the passed-in <code>default</code> (or +{}+, if
-not specified)</p>
-
-<p>Throughout this class, we are setting class variables through explicit
-method calls rather than by directly addressing the name of the variable
-because of context issues: addressing variable by name creates it in the
-context of defining class, while calling the setter/getter method addresses
-it in the context of descendant class, which is what we need.</p>
-
-
-
-
- <div class="method-source-code" id="obtain_class_variable-source">
- <pre><span class="ruby-comment"># File lib/rubyXL/objects/ooxml_object.rb, line 15</span>
-<span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">obtain_class_variable</span>(<span class="ruby-identifier">var_name</span>, <span class="ruby-identifier">default</span> = {})
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">class_variable_defined?</span>(<span class="ruby-identifier">var_name</span>) <span class="ruby-keyword">then</span>
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">class_variable_get</span>(<span class="ruby-identifier">var_name</span>)
- <span class="ruby-keyword">else</span>
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">class_variable_set</span>(<span class="ruby-identifier">var_name</span>, <span class="ruby-identifier">default</span>)
- <span class="ruby-keyword">end</span>
-<span class="ruby-keyword">end</span></pre>
- </div>
-
- </div>
-
-
-
-
- </div>
-
-
- <div id="method-c-parse" class="method-detail ">
-
- <div class="method-heading">
- <span class="method-name">parse</span><span
- class="method-args">(node)</span>
-
- <span class="method-click-advice">click to toggle source</span>
-
- </div>
-
-
- <div class="method-description">
-
-
-
-
-
-
- <div class="method-source-code" id="parse-source">
- <pre><span class="ruby-comment"># File lib/rubyXL/objects/ooxml_object.rb, line 207</span>
- <span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">node</span>)
- <span class="ruby-identifier">node</span> = <span class="ruby-constant">Nokogiri</span><span class="ruby-operator">::</span><span class="ruby-constant">XML</span>.<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">node</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">node</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">IO</span>) <span class="ruby-operator">||</span> <span class="ruby-identifier">node</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">String</span>)
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">node</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Nokogiri</span><span class="ruby-operator">::</span><span class="ruby-constant">XML</span><span class="ruby-operator">::</span><span class="ruby-constant">Document</span>) <span class="ruby-keyword">then</span>
-<span class="ruby-comment"># @namespaces = node.namespaces
</span>
- <span class="ruby-identifier">node</span> = <span class="ruby-identifier">node</span>.<span class="ruby-identifier">root</span>
-<span class="ruby-comment"># ignorable_attr = node.attributes['Ignorable']
</span>
-<span class="ruby-comment"># @ignorables << ignorable_attr.value if ignorable_attr
</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">obj</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">new</span>
-
- <span class="ruby-identifier">known_attributes</span> = <span class="ruby-identifier">obtain_class_variable</span>(<span class="ruby-value">:@@ooxml_attributes</span>)
-
- <span class="ruby-identifier">content_params</span> = <span class="ruby-identifier">known_attributes</span>[<span class="ruby-string">'_'</span>]
- <span class="ruby-identifier">process_attribute</span>(<span class="ruby-identifier">obj</span>, <span class="ruby-identifier">node</span>.<span class="ruby-identifier">text</span>, <span class="ruby-identifier">content_params</span>) <span class="ruby-keyword">if</span> <span class="ruby-identifier">content_params</span>
-
- <span class="ruby-identifier">node</span>.<span class="ruby-identifier">attributes</span>.<span class="ruby-identifier">each_pair</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">attr_name</span>, <span class="ruby-identifier">attr</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">attr_name</span> = <span class="ruby-keyword">if</span> <span class="ruby-identifier">attr</span>.<span class="ruby-identifier">namespace</span> <span class="ruby-keyword">then</span> <span class="ruby-node">"#{attr.namespace.prefix}:#{attr.name}"</span>
- <span class="ruby-keyword">else</span> <span class="ruby-identifier">attr</span>.<span class="ruby-identifier">name</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">attr_params</span> = <span class="ruby-identifier">known_attributes</span>[<span class="ruby-identifier">attr_name</span>]
-
- <span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">attr_params</span>.<span class="ruby-identifier">nil?</span>
- <span class="ruby-comment"># raise "Unknown attribute: #{attr_name}" if attr_params.nil?
</span>
- <span class="ruby-identifier">process_attribute</span>(<span class="ruby-identifier">obj</span>, <span class="ruby-identifier">attr</span>.<span class="ruby-identifier">value</span>, <span class="ruby-identifier">attr_params</span>)
- }
-
- <span class="ruby-identifier">known_child_nodes</span> = <span class="ruby-identifier">obtain_class_variable</span>(<span class="ruby-value">:@@ooxml_child_nodes</span>)
-
- <span class="ruby-keyword">unless</span> <span class="ruby-identifier">known_child_nodes</span>.<span class="ruby-identifier">empty?</span>
- <span class="ruby-identifier">node</span>.<span class="ruby-identifier">element_children</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">child_node</span><span class="ruby-operator">|</span>
-
- <span class="ruby-identifier">child_node_name</span> = <span class="ruby-keyword">if</span> <span class="ruby-identifier">child_node</span>.<span class="ruby-identifier">namespace</span>.<span class="ruby-identifier">prefix</span> <span class="ruby-keyword">then</span>
- <span class="ruby-node">"#{child_node.namespace.prefix}:#{child_node.name}"</span>
- <span class="ruby-keyword">else</span> <span class="ruby-identifier">child_node</span>.<span class="ruby-identifier">name</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">child_node_params</span> = <span class="ruby-identifier">known_child_nodes</span>[<span class="ruby-identifier">child_node_name</span>]
- <span class="ruby-identifier">raise</span> <span class="ruby-node">"Unknown child node: #{child_node_name}"</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">child_node_params</span>.<span class="ruby-identifier">nil?</span>
- <span class="ruby-identifier">parsed_object</span> = <span class="ruby-identifier">child_node_params</span>[<span class="ruby-value">:class</span>].<span class="ruby-identifier">parse</span>(<span class="ruby-identifier">child_node</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">child_node_params</span>[<span class="ruby-value">:is_array</span>] <span class="ruby-keyword">then</span>
- <span class="ruby-identifier">index</span> = <span class="ruby-identifier">parsed_object</span>.<span class="ruby-identifier">index_in_collection</span>
- <span class="ruby-identifier">collection</span> = <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">child_node_params</span>[<span class="ruby-value">:accessor</span>])
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">index</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
- <span class="ruby-identifier">collection</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">parsed_object</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">collection</span>[<span class="ruby-identifier">index</span>] = <span class="ruby-identifier">parsed_object</span>
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">else</span>
- <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">send</span>(<span class="ruby-node">"#{child_node_params[:accessor]}="</span>, <span class="ruby-identifier">parsed_object</span>)
- <span class="ruby-keyword">end</span>
- }
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">obj</span>
- <span class="ruby-keyword">end</span></pre>
- </div>
-
- </div>
-
-
-
-
- </div>
-
-
- <div id="method-c-set_countable" class="method-detail ">
-
- <div class="method-heading">
- <span class="method-name">set_countable</span><span
- class="method-args">()</span>
-
- <span class="method-click-advice">click to toggle source</span>
-
- </div>
-
-
- <div class="method-description">
-
- <p>TODO# This method will eventually be obsoleted.</p>
-
-
-
-
- <div class="method-source-code" id="set_countable-source">
- <pre><span class="ruby-comment"># File lib/rubyXL/objects/ooxml_object.rb, line 127</span>
-<span class="ruby-keyword">def</span> <span class="ruby-keyword">self</span>.<span class="ruby-identifier">set_countable</span>
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">class_variable_set</span>(<span class="ruby-value">:@@ooxml_countable</span>, <span class="ruby-keyword">true</span>)
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">send</span>(<span class="ruby-value">:attr_accessor</span>, <span class="ruby-value">:count</span>)
-<span class="ruby-keyword">end</span></pre>
- </div>
-
- </div>
-
-
-
-
- </div>
-
-
- </section>
-
- <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
- <header>
- <h3>Public Instance Methods</h3>
- </header>
-
-
- <div id="method-i-before_write_xml" class="method-detail ">
-
- <div class="method-heading">
- <span class="method-name">before_write_xml</span><span
- class="method-args">()</span>
-
- <span class="method-click-advice">click to toggle source</span>
-
- </div>
-
-
- <div class="method-description">
-
- <p>Subclass provided filter to perform last-minute operations (cleanup, count,
-etc.) immediately prior to write, along with option to terminate the actual
-write if <code>false</code> is returned (for example, to avoid writing the
-collection’s root node if the collection is empty).</p>
-
-
-
-
- <div class="method-source-code" id="before_write_xml-source">
- <pre><span class="ruby-comment"># File lib/rubyXL/objects/ooxml_object.rb, line 282</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">before_write_xml</span>
- <span class="ruby-identifier">child_nodes</span> = <span class="ruby-identifier">obtain_class_variable</span>(<span class="ruby-value">:@@ooxml_child_nodes</span>)
- <span class="ruby-identifier">child_nodes</span>.<span class="ruby-identifier">each_pair</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">child_node_name</span>, <span class="ruby-identifier">child_node_params</span><span class="ruby-operator">|</span>
- <span class="ruby-keyword">self</span>.<span class="ruby-identifier">count</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">child_node_params</span>[<span class="ruby-value">:accessor</span>]).<span class="ruby-identifier">size</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">child_node_params</span>[<span class="ruby-value">:is_array</span>] <span class="ruby-operator">==</span> <span class="ruby-value">:with_count</span>
- }
- <span class="ruby-keyword">true</span>
-<span class="ruby-keyword">end</span></pre>
- </div>
-
- </div>
-
-
-
-
- </div>
-
-
- <div id="method-i-dup" class="method-detail ">
-
- <div class="method-heading">
- <span class="method-name">dup</span><span
- class="method-args">()</span>
-
- <span class="method-click-advice">click to toggle source</span>
-
- </div>
-
-
- <div class="method-description">
-
-
-
-
- <div class="method-calls-super">
- Calls superclass method
-
- </div>
-
-
-
- <div class="method-source-code" id="dup-source">
- <pre><span class="ruby-comment"># File lib/rubyXL/objects/ooxml_object.rb, line 266</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">dup</span>
- <span class="ruby-identifier">new_copy</span> = <span class="ruby-keyword">super</span>
- <span class="ruby-identifier">new_copy</span>.<span class="ruby-identifier">count</span> = <span class="ruby-value">0</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">obtain_class_variable</span>(<span class="ruby-value">:@@ooxml_countable</span>, <span class="ruby-keyword">false</span>)
- <span class="ruby-identifier">new_copy</span>
-<span class="ruby-keyword">end</span></pre>
- </div>
-
- </div>
-
-
-
-
- </div>
-
-
- <div id="method-i-index_in_collection" class="method-detail ">
-
- <div class="method-heading">
- <span class="method-name">index_in_collection</span><span
- class="method-args">()</span>
-
- <span class="method-click-advice">click to toggle source</span>
-
- </div>
-
-
- <div class="method-description">
-
- <p>Prototype method. For sparse collections (<code>Rows</code>,
-<code>Cells</code>, etc.) must return index at which this object is
-expected to reside in the collection. If <code>nil</code> is returned, then
-object is simply added to the end of the collection.</p>
-
-
-
-
- <div class="method-source-code" id="index_in_collection-source">
- <pre><span class="ruby-comment"># File lib/rubyXL/objects/ooxml_object.rb, line 275</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">index_in_collection</span>
- <span class="ruby-keyword">nil</span>
-<span class="ruby-keyword">end</span></pre>
- </div>
-
- </div>
-
-
-
-
- </div>
-
-
- <div id="method-i-write_xml" class="method-detail ">
-
- <div class="method-heading">
- <span class="method-name">write_xml</span><span
- class="method-args">(xml = nil, node_name_override = nil)</span>
-
- <span class="method-click-advice">click to toggle source</span>
-
- </div>
-
-
- <div class="method-description">
-
- <p>Recursively write the OOXML object and all its children out as
-Nokogiri::XML. Immediately before the actual generation,
-+before_write_xml()+ is called to perform last-minute cleanup and
-validation operations; if it returns <code>false</code>, an empty string is
-returned (rather than <code>nil</code>, so Nokogiri::XML’s
-<code>&lt;&lt;</code> operator can be used without additional
-<code>nil</code> checking)</p>
-
-<h3 id="method-i-write_xml-label-Parameters">Parameters<span><a href="#method-i-write_xml-label-Parameters">¶</a> <a href="#documentation">↑</a></span></h3>
-<ul><li>
-<p><code>xml</code> - Base Nokogiri::XML object used for building. If omitted,
-a blank document will be generated.</p>
-</li><li>
-<p><code>node_name_override</code> - if present, is used instead of the
-default element name for this object provided by
-<code>define_element_name</code></p>
-</li></ul>
-
-<h4 id="method-i-write_xml-label-Examples">Examples<span><a href="#method-i-write_xml-label-Examples">¶</a> <a href="#documentation">↑</a></span></h4>
-
-<pre>obj.write_xml</pre>
-
-<p>Creates a new Nokogiti::XML and</p>
-
-
-
-
- <div class="method-source-code" id="write_xml-source">
- <pre><span class="ruby-comment"># File lib/rubyXL/objects/ooxml_object.rb, line 142</span>
-<span class="ruby-keyword">def</span> <span class="ruby-identifier">write_xml</span>(<span class="ruby-identifier">xml</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-identifier">node_name_override</span> = <span class="ruby-keyword">nil</span>)
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">xml</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
- <span class="ruby-identifier">seed_xml</span> = <span class="ruby-constant">Nokogiri</span><span class="ruby-operator">::</span><span class="ruby-constant">XML</span>(<span class="ruby-string">'<?xml version = "1.0" standalone ="yes"?>'</span>)
- <span class="ruby-identifier">seed_xml</span>.<span class="ruby-identifier">encoding</span> = <span class="ruby-string">'UTF-8'</span>
- <span class="ruby-identifier">result</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">write_xml</span>(<span class="ruby-identifier">seed_xml</span>)
- <span class="ruby-keyword">return</span> <span class="ruby-identifier">result</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">result</span> <span class="ruby-operator">==</span> <span class="ruby-string">''</span>
- <span class="ruby-identifier">seed_xml</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">result</span>
- <span class="ruby-keyword">return</span> <span class="ruby-identifier">seed_xml</span>.<span class="ruby-identifier">to_xml</span>({ <span class="ruby-value">:indent</span> =<span class="ruby-operator">></span> <span class="ruby-value">0</span>, <span class="ruby-value">:save_with</span> =<span class="ruby-operator">></span> <span class="ruby-constant">Nokogiri</span><span class="ruby-operator">::</span><span class="ruby-constant">XML</span><span class="ruby-operator">::</span><span class="ruby-constant">Node</span><span class="ruby-operator">::</span><span class="ruby-constant">SaveOptions</span><span class="ruby-operator">::</span><span class="ruby-constant">AS_XML</span> })
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-keyword">return</span> <span class="ruby-string">''</span> <span class="ruby-keyword">unless</span> <span class="ruby-identifier">before_write_xml</span>
-
- <span class="ruby-identifier">attrs</span> = <span class="ruby-identifier">obtain_class_variable</span>(<span class="ruby-value">:@@ooxml_namespaces</span>).<span class="ruby-identifier">dup</span>
-
- <span class="ruby-identifier">obtain_class_variable</span>(<span class="ruby-value">:@@ooxml_attributes</span>).<span class="ruby-identifier">each_pair</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>, <span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">val</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">v</span>[<span class="ruby-value">:accessor</span>])
-
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword">then</span>
- <span class="ruby-keyword">next</span> <span class="ruby-keyword">if</span> <span class="ruby-identifier">v</span>[<span class="ruby-value">:optional</span>]
- <span class="ruby-identifier">val</span> = <span class="ruby-identifier">v</span>[<span class="ruby-value">:default</span>]
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">val</span> = <span class="ruby-identifier">val</span> <span class="ruby-operator">&&</span>
- <span class="ruby-keyword">case</span> <span class="ruby-identifier">v</span>[<span class="ruby-value">:attr_type</span>]
- <span class="ruby-keyword">when</span> <span class="ruby-value">:bool</span> <span class="ruby-keyword">then</span> <span class="ruby-identifier">val</span> <span class="ruby-operator">?</span> <span class="ruby-string">'1'</span> <span class="ruby-operator">:</span> <span class="ruby-string">'0'</span>
- <span class="ruby-keyword">when</span> <span class="ruby-value">:float</span> <span class="ruby-keyword">then</span> <span class="ruby-identifier">val</span>.<span class="ruby-identifier">to_s</span>.<span class="ruby-identifier">gsub</span>(<span class="ruby-regexp">/\.0*$/</span>, <span class="ruby-string">''</span>) <span class="ruby-comment"># Trim trailing zeroes
</span>
- <span class="ruby-keyword">else</span> <span class="ruby-identifier">val</span>
- <span class="ruby-keyword">end</span>
-
- <span class="ruby-identifier">attrs</span>[<span class="ruby-identifier">k</span>] = <span class="ruby-identifier">val</span>
- }
-
- <span class="ruby-identifier">element_text</span> = <span class="ruby-identifier">attrs</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-string">'_'</span>)
- <span class="ruby-identifier">elem</span> = <span class="ruby-identifier">xml</span>.<span class="ruby-identifier">create_element</span>(<span class="ruby-identifier">node_name_override</span> <span class="ruby-operator">||</span> <span class="ruby-identifier">obtain_class_variable</span>(<span class="ruby-value">:@@ooxml_tag_name</span>), <span class="ruby-identifier">attrs</span>, <span class="ruby-identifier">element_text</span>)
- <span class="ruby-identifier">child_nodes</span> = <span class="ruby-identifier">obtain_class_variable</span>(<span class="ruby-value">:@@ooxml_child_nodes</span>)
- <span class="ruby-identifier">child_nodes</span>.<span class="ruby-identifier">each_pair</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">child_node_name</span>, <span class="ruby-identifier">child_node_params</span><span class="ruby-operator">|</span>
- <span class="ruby-identifier">obj</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">child_node_params</span>[<span class="ruby-value">:accessor</span>])
- <span class="ruby-keyword">unless</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">nil?</span>
- <span class="ruby-keyword">if</span> <span class="ruby-identifier">child_node_params</span>[<span class="ruby-value">:is_array</span>] <span class="ruby-keyword">then</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">item</span><span class="ruby-operator">|</span> <span class="ruby-identifier">elem</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">item</span>.<span class="ruby-identifier">write_xml</span>(<span class="ruby-identifier">xml</span>, <span class="ruby-identifier">child_node_name</span>) <span class="ruby-keyword">unless</span> <span class="ruby-identifier">item</span>.<span class="ruby-identifier">nil?</span> }
- <span class="ruby-keyword">else</span> <span class="ruby-identifier">elem</span> <span class="ruby-operator"><<</span> <span class="ruby-identifier">obj</span>.<span class="ruby-identifier">write_xml</span>(<span class="ruby-identifier">xml</span>, <span class="ruby-identifier">child_node_name</span>)
- <span class="ruby-keyword">end</span>
- <span class="ruby-keyword">end</span>
- }
- <span class="ruby-identifier">elem</span>
-<span class="ruby-keyword">end</span></pre>
- </div>
-
- </div>
-
-
-
-
- </div>
-
-
- </section>
-
</section>
</main>
<footer id="validator-badges" role="contentinfo">