Module: OM::XML::Document
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/om/xml/document.rb
Defined Under Namespace
Modules: ClassMethods
Instance Attribute Summary collapse
-
#ox_namespaces ⇒ Object
Returns a hash combining the current documents namespaces (provided by nokogiri) and any namespaces that have been set up by your Terminology.
Instance Method Summary collapse
-
#add_child_node(target_node, node_type, *args, &block) ⇒ Object
Instantiate a
node_type
template and add it as a child oftarget_node
, wheretarget_node
is one of: * a Nokogiri::XML::Node * a single-element Nokogiri::XML::NodeSet * aterm_pointer
array resolving to a single-element Nokogiri::XML::NodeSet Additional arguments will be passed to the template unaltered. -
#add_next_sibling_node(target_node, node_type, *args, &block) ⇒ Object
Instantiate a
node_type
template and insert it as the following sibling oftarget_node
. -
#add_previous_sibling_node(target_node, node_type, *args, &block) ⇒ Object
Instantiate a
node_type
template and insert it as the preceding sibling oftarget_node
. -
#after_node(target_node, node_type, *args, &block) ⇒ Object
Instantiate a
node_type
template and insert it as the following sibling oftarget_node
. -
#before_node(target_node, node_type, *args, &block) ⇒ Object
Instantiate a
node_type
template and insert it as the preceding sibling oftarget_node
. -
#find_by_terms(*term_pointer) ⇒ Object
term_pointer
Variable length array of values in format [:accessor_name, :accessor_name …] or [:accessor_name=>index, :accessor_name …] @example: find_by_terms( => 1, :first_name ) Currently, indexes must be integers. -
#find_by_terms_and_value(*term_pointer) ⇒ Object
Applies the property’s corresponding xpath query, returning the result Nokogiri::XML::NodeSet.
- #find_by_xpath(xpath) ⇒ Object
- #method_missing(method_name, *args) ⇒ Object
- #ng_xml_changed? ⇒ Boolean
- #ng_xml_will_change! ⇒ Object
-
#node_exists?(*term_pointer) ⇒ Boolean
Test whether the document has a node corresponding to the given term_pointer.
-
#replace_node(target_node, node_type, *args, &block) ⇒ Object
Instantiate a
node_type
template and replacetarget_node
with it. -
#swap_node(target_node, node_type, *args, &block) ⇒ Object
Instantiate a
node_type
template and replacetarget_node
with it. - #template(node_type, *args) ⇒ Object
-
#template_registry ⇒ Object
Access the class’s template registry.
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_name, *args) ⇒ Object
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/om/xml/document.rb', line 96 def method_missing(method_name, *args) if matches = /([^=]+)=$/.match(method_name.to_s) name = matches[1].to_sym end name ||= method_name begin term = self.class.terminology.retrieve_term(name) if /=$/.match(method_name.to_s) node = OM::XML::DynamicNode.new(name, nil, self, term) return node.val=args else return OM::XML::DynamicNode.new(name, args.first, self, term) end rescue OM::XML::Terminology::BadPointerError super end end |
Instance Attribute Details
#ox_namespaces ⇒ Object
Returns a hash combining the current documents namespaces (provided by nokogiri) and any namespaces that have been set up by your Terminology. Most importantly, this matches the ‘oxns’ namespace to the namespace you provided in your Terminology’s root term config
85 86 87 |
# File 'lib/om/xml/document.rb', line 85 def ox_namespaces @ox_namespaces end |
Instance Method Details
#add_child_node(target_node, node_type, *args, &block) ⇒ Object
Instantiate a node_type
template and add it as a child of target_node
, where target_node
is one of:
-
a Nokogiri::XML::Node
-
a single-element Nokogiri::XML::NodeSet
-
a
term_pointer
array resolving to a single-element Nokogiri::XML::NodeSet
Additional arguments will be passed to the template unaltered.
Returns the new Nokogiri::XML::Node.
164 165 166 |
# File 'lib/om/xml/document.rb', line 164 def add_child_node(target_node, node_type, *args, &block) manipulate_node(:add_child, target_node, node_type, *args, &block) end |
#add_next_sibling_node(target_node, node_type, *args, &block) ⇒ Object
Instantiate a node_type
template and insert it as the following sibling of target_node
. Returns the new Nokogiri::XML::Node.
170 171 172 |
# File 'lib/om/xml/document.rb', line 170 def add_next_sibling_node(target_node, node_type, *args, &block) manipulate_node(:add_next_sibling, target_node, node_type, *args, &block) end |
#add_previous_sibling_node(target_node, node_type, *args, &block) ⇒ Object
Instantiate a node_type
template and insert it as the preceding sibling of target_node
. Returns the new Nokogiri::XML::Node.
176 177 178 |
# File 'lib/om/xml/document.rb', line 176 def add_previous_sibling_node(target_node, node_type, *args, &block) manipulate_node(:add_previous_sibling, target_node, node_type, *args, &block) end |
#after_node(target_node, node_type, *args, &block) ⇒ Object
Instantiate a node_type
template and insert it as the following sibling of target_node
. Returns target_node
.
182 183 184 |
# File 'lib/om/xml/document.rb', line 182 def after_node(target_node, node_type, *args, &block) manipulate_node(:after, target_node, node_type, *args, &block) end |
#before_node(target_node, node_type, *args, &block) ⇒ Object
Instantiate a node_type
template and insert it as the preceding sibling of target_node
. Returns target_node
.
188 189 190 |
# File 'lib/om/xml/document.rb', line 188 def before_node(target_node, node_type, *args, &block) manipulate_node(:before, target_node, node_type, *args, &block) end |
#find_by_terms(*term_pointer) ⇒ Object
term_pointer
Variable length array of values in format [:accessor_name, :accessor_name …] or [:accessor_name=>index, :accessor_name …] @example:
find_by_terms( {:person => 1}, :first_name )
Currently, indexes must be integers.
137 138 139 140 |
# File 'lib/om/xml/document.rb', line 137 def find_by_terms(*term_pointer) xpath = self.class.terminology.xpath_with_indexes(*term_pointer) find_by_xpath(xpath) unless xpath.nil? end |
#find_by_terms_and_value(*term_pointer) ⇒ Object
Applies the property’s corresponding xpath query, returning the result Nokogiri::XML::NodeSet
123 124 125 126 |
# File 'lib/om/xml/document.rb', line 123 def find_by_terms_and_value(*term_pointer) xpath = self.class.terminology.xpath_for(*term_pointer) find_by_xpath(xpath) unless xpath.nil? end |
#find_by_xpath(xpath) ⇒ Object
118 119 120 |
# File 'lib/om/xml/document.rb', line 118 def find_by_xpath(xpath) ng_xml.xpath(xpath, ox_namespaces) end |
#ng_xml_changed? ⇒ Boolean
92 93 94 |
# File 'lib/om/xml/document.rb', line 92 def ng_xml_changed? changed.include?('ng_xml') end |
#ng_xml_will_change! ⇒ Object
87 88 89 90 |
# File 'lib/om/xml/document.rb', line 87 def ng_xml_will_change! # throw away older version. changed_attributes['ng_xml'] = nil end |
#node_exists?(*term_pointer) ⇒ Boolean
Test whether the document has a node corresponding to the given term_pointer
144 145 146 |
# File 'lib/om/xml/document.rb', line 144 def node_exists?(*term_pointer) !find_by_terms(*term_pointer).empty? end |
#replace_node(target_node, node_type, *args, &block) ⇒ Object
Instantiate a node_type
template and replace target_node
with it. Returns the new Nokogiri::XML::Node.
194 195 196 |
# File 'lib/om/xml/document.rb', line 194 def replace_node(target_node, node_type, *args, &block) manipulate_node(:replace, target_node, node_type, *args, &block) end |
#swap_node(target_node, node_type, *args, &block) ⇒ Object
Instantiate a node_type
template and replace target_node
with it. Returns target_node
.
200 201 202 |
# File 'lib/om/xml/document.rb', line 200 def swap_node(target_node, node_type, *args, &block) manipulate_node(:swap, target_node, node_type, *args, &block) end |
#template(node_type, *args) ⇒ Object
153 154 155 |
# File 'lib/om/xml/document.rb', line 153 def template(node_type, *args) template_registry.instantiate(node_type, *args) end |
#template_registry ⇒ Object
Access the class’s template registry
149 150 151 |
# File 'lib/om/xml/document.rb', line 149 def template_registry self.class.template_registry end |