Method: RubyXL::OOXMLObjectClassMethods#define_child_node
- Defined in:
- lib/rubyXL/objects/ooxml_object.rb
#define_child_node(klass, extra_params = {}) ⇒ Object
Defines a child node of OOXML object.
Parameters
-
klass
- Class (descendant of RubyXL::OOXMLObject) of the child nodes. Child node objects will be produced by callingparse
method of that class. -
extra_parameters
- Hash of optional parameters as follows:-
:accessor
- Name of the accessor for this attribute to be defined on the object. If not provided, defaults to classidiedattribute_name
. -
:node_name
- Node name for the child node, in case it does not match the one defined by theklass
. -
:collection
- Whether the child node should be treated as a single node or a collection of nodes:-
false
(default) - child node is directly accessible through the respective accessor; -
true
- a collection of child nodes is accessed asArray
through the respective accessor; -
:with_count
- same astrue
, but in addition, the attributecount
is defined on the current object, that will be automatically set to the number of elements in the collection at the start ofwrite_xml
call.
-
-
Examples
define_child_node(RubyXL::Alignment)
Define a singular child node parsed by the RubyXL::BorderEdge.parse() and accessed by the default obj.alignment
accessor
define_child_node(RubyXL::Hyperlink, :collection => true, :accessor => :hyperlinks)
Define an array of nodes accessed by obj.hyperlinks
accessor, each of which will be parsed by the RubyXL::Hyperlink.parse()
define_child_node(RubyXL::BorderEdge, :node_name => :left)
define_child_node(RubyXL::BorderEdge, :node_name => :right)
Use class RubyXL::BorderEdge when parsing both the elements <left ...>
and <right ...>
elements.
define_child_node(RubyXL::Font, :collection => :with_count, :accessor => :fonts)
Upon writing of the object this was defined on, its count
attribute will be set to the count of nodes in fonts
array
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/rubyXL/objects/ooxml_object.rb', line 82 def define_child_node(klass, extra_params = {}) child_nodes = obtain_class_variable(:@@ooxml_child_nodes) child_node_name = (extra_params[:node_name] || klass.class_variable_get(:@@ooxml_tag_name)).to_s accessor = (extra_params[:accessor] || accessorize(child_node_name)).to_sym child_nodes[child_node_name] = { :class => klass, :is_array => extra_params[:collection], :accessor => accessor } define_count_attribute if extra_params[:collection] == :with_count self.send(:attr_accessor, accessor) end |