Module: OM::XML::Document
- Included in:
- Samples::ModsArticle
- 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.
Class Method Summary collapse
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(name, *args) ⇒ 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(name, *args) ⇒ Object
48 49 50 51 52 53 54 55 |
# File 'lib/om/xml/document.rb', line 48 def method_missing(name, *args) term = self.class.terminology.retrieve_term(name) if (term) OM::XML::DynamicNode.new(name, args.first, self, term) else 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
38 39 40 |
# File 'lib/om/xml/document.rb', line 38 def ox_namespaces @ox_namespaces end |
Class Method Details
.included(klass) ⇒ Object
40 41 42 43 44 45 46 |
# File 'lib/om/xml/document.rb', line 40 def self.included(klass) klass.extend(ClassMethods) klass.send(:include, OM::XML::Container) klass.send(:include, OM::XML::TermValueOperators) klass.send(:include, OM::XML::Validation) 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.
103 104 105 |
# File 'lib/om/xml/document.rb', line 103 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.
109 110 111 |
# File 'lib/om/xml/document.rb', line 109 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.
115 116 117 |
# File 'lib/om/xml/document.rb', line 115 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
.
121 122 123 |
# File 'lib/om/xml/document.rb', line 121 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
.
127 128 129 |
# File 'lib/om/xml/document.rb', line 127 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.
76 77 78 79 |
# File 'lib/om/xml/document.rb', line 76 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
64 65 66 67 |
# File 'lib/om/xml/document.rb', line 64 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
58 59 60 |
# File 'lib/om/xml/document.rb', line 58 def find_by_xpath(xpath) ng_xml.xpath(xpath, ox_namespaces) end |
#node_exists?(*term_pointer) ⇒ Boolean
Test whether the document has a node corresponding to the given term_pointer
83 84 85 |
# File 'lib/om/xml/document.rb', line 83 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.
133 134 135 |
# File 'lib/om/xml/document.rb', line 133 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
.
139 140 141 |
# File 'lib/om/xml/document.rb', line 139 def swap_node(target_node, node_type, *args, &block) manipulate_node(:swap, target_node, node_type, *args, &block) end |
#template(node_type, *args) ⇒ Object
92 93 94 |
# File 'lib/om/xml/document.rb', line 92 def template(node_type, *args) template_registry.instantiate(node_type, *args) end |
#template_registry ⇒ Object
Access the class’s template registry
88 89 90 |
# File 'lib/om/xml/document.rb', line 88 def template_registry self.class.template_registry end |