Module: OM::XML::Document

Included in:
Samples::ModsArticle
Defined in:
lib/om/xml/document.rb

Defined Under Namespace

Modules: ClassMethods

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#ox_namespacesObject

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
# 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)
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.



87
88
89
# File 'lib/om/xml/document.rb', line 87

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.



93
94
95
# File 'lib/om/xml/document.rb', line 93

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.



99
100
101
# File 'lib/om/xml/document.rb', line 99

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.



105
106
107
# File 'lib/om/xml/document.rb', line 105

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.



111
112
113
# File 'lib/om/xml/document.rb', line 111

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: => 1, :first_name example: [:person, 1, :first_name] Currently, indexes must be integers.



62
63
64
65
66
67
68
69
# File 'lib/om/xml/document.rb', line 62

def find_by_terms(*term_pointer)
  xpath = self.class.terminology.xpath_with_indexes(*term_pointer)   
  if xpath.nil?
    return nil
  else
    return ng_xml.xpath(xpath, ox_namespaces) 
  end   
end

#find_by_terms_and_value(*term_pointer) ⇒ Object

Applies the property’s corresponding xpath query, returning the result Nokogiri::XML::NodeSet



48
49
50
51
52
53
54
55
# File 'lib/om/xml/document.rb', line 48

def find_by_terms_and_value(*term_pointer)
  xpath = self.class.terminology.xpath_for(*term_pointer)    
  if xpath.nil?
    return nil
  else
    return ng_xml.xpath(xpath, ox_namespaces) 
  end
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.



117
118
119
# File 'lib/om/xml/document.rb', line 117

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.



123
124
125
# File 'lib/om/xml/document.rb', line 123

def swap_node(target_node, node_type, *args, &block)
  manipulate_node(:swap, target_node, node_type, *args, &block)
end

#template(node_type, *args) ⇒ Object



76
77
78
# File 'lib/om/xml/document.rb', line 76

def template(node_type, *args)
  template_registry.instantiate(node_type, *args)
end

#template_registryObject

Access the class’s template registry



72
73
74
# File 'lib/om/xml/document.rb', line 72

def template_registry
  self.class.template_registry
end