Class: REXML::Element
- Inherits:
-
Object
- Object
- REXML::Element
- Defined in:
- lib/xmpp4r/rexmladdons.rb
Overview
this class adds a few helper methods to REXML::Element
Direct Known Subclasses
Class Method Summary collapse
Instance Method Summary collapse
-
#==(o) ⇒ Object
Test for equality of two elements, useful for assert_equal in test cases.
-
#delete_elements(element) ⇒ Object
Deletes one or more children elements, not just one like REXML::Element#delete_element.
- #each_elements(*els, &block) ⇒ Object
-
#first_element(e, namespace = nil) ⇒ Object
Returns first element of name
e
. -
#first_element_content(e, namespace = nil) ⇒ Object
This method works like
first_element_text
except that it returns content of all children, not just the value of the first child text element. -
#first_element_text(e, namespace = nil) ⇒ Object
Returns text of first element of name
e
. -
#import(xmlelement) ⇒ Object
import this element’s children and attributes.
-
#replace_element_content(e, c, namespace = nil) ⇒ Object
Replaces or adds a child element of name
e
with content oft
. -
#replace_element_text(e, t, namespace = nil) ⇒ Object
Replaces or adds a child element of name
e
with textt
. -
#typed_add(e) ⇒ Object
This method does exactly the same thing as add(), but it can be overriden by subclasses to provide on-the-fly object creations.
Class Method Details
.import(xmlelement) ⇒ Object
127 128 129 |
# File 'lib/xmpp4r/rexmladdons.rb', line 127 def self.import(xmlelement) self.new(xmlelement.name).import(xmlelement) end |
Instance Method Details
#==(o) ⇒ Object
Test for equality of two elements, useful for assert_equal in test cases. Tries to parse String o as XML.
See Test::Unit::Assertions
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/xmpp4r/rexmladdons.rb', line 143 def ==(o) return false unless self.kind_of? REXML::Element if o.kind_of? REXML::Element # Ok elsif o.kind_of? String # Parse o begin o = REXML::Document.new(o).root rescue REXML::ParseException return false end else # Cannot compare with anything other than Elements or Strings return false end return false unless name == o.name attributes.each_attribute do |attr| return false unless attr.value == o.attributes[attr.name] end o.attributes.each_attribute do |attr| return false unless attributes[attr.name] == attr.value end children.each_with_index do |child,i| return false unless child == o.children[i] end return true end |
#delete_elements(element) ⇒ Object
Deletes one or more children elements, not just one like REXML::Element#delete_element
134 135 136 |
# File 'lib/xmpp4r/rexmladdons.rb', line 134 def delete_elements(element) while(delete_element(element)) do end end |
#each_elements(*els, &block) ⇒ Object
20 21 22 23 24 |
# File 'lib/xmpp4r/rexmladdons.rb', line 20 def each_elements(*els, &block) els.inject([ ]) do |res, e| res + each_element(e, &block) end end |
#first_element(e, namespace = nil) ⇒ Object
Returns first element of name e
63 64 65 66 67 68 69 70 |
# File 'lib/xmpp4r/rexmladdons.rb', line 63 def first_element(e, namespace = nil) if namespace each_element_with_attribute("xmlns", namespace, 1, e) { |el| return el } else each_element(e) { |el| return el } end return nil end |
#first_element_content(e, namespace = nil) ⇒ Object
This method works like first_element_text
except that it returns content of all children, not just the value of the first child text element.
Returns content of first element of name e
89 90 91 92 93 94 95 96 |
# File 'lib/xmpp4r/rexmladdons.rb', line 89 def first_element_content(e, namespace = nil) el = first_element(e, namespace) if el return el.children.join else return nil end end |
#first_element_text(e, namespace = nil) ⇒ Object
Returns text of first element of name e
74 75 76 77 78 79 80 81 |
# File 'lib/xmpp4r/rexmladdons.rb', line 74 def first_element_text(e, namespace = nil) el = first_element(e, namespace) if el return el.text else return nil end end |
#import(xmlelement) ⇒ Object
import this element’s children and attributes
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/xmpp4r/rexmladdons.rb', line 109 def import(xmlelement) if @name and @name != xmlelement.name raise "Trying to import an #{xmlelement.name} to a #{@name} !" end add_attributes(xmlelement.attributes.clone) @context = xmlelement.context xmlelement.each do |e| if e.kind_of? REXML::Element typed_add(e.deep_clone) elsif e.kind_of? REXML::Text add_text(e.value) else add(e.clone) end end self end |
#replace_element_content(e, c, namespace = nil) ⇒ Object
Replaces or adds a child element of name e
with content of t
.
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/xmpp4r/rexmladdons.rb', line 43 def replace_element_content(e, c, namespace = nil) el = first_element(e, namespace) if el.nil? el = REXML::Element.new(e) el.add_namespace(namespace) add_element(el) end if c el.children.each do |ch| ch.remove end c.root.children.each do |ch| el.add ch end end self end |
#replace_element_text(e, t, namespace = nil) ⇒ Object
Replaces or adds a child element of name e
with text t
.
28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/xmpp4r/rexmladdons.rb', line 28 def replace_element_text(e, t, namespace = nil) el = first_element(e, namespace) if el.nil? el = REXML::Element.new(e) el.add_namespace(namespace) add_element(el) end if t el.text = t end self end |
#typed_add(e) ⇒ Object
This method does exactly the same thing as add(), but it can be overriden by subclasses to provide on-the-fly object creations. For example, if you import a REXML::Element of name ‘plop’, and you have a Plop class that subclasses REXML::Element, with typed_add you can get your REXML::Element to be “magically” converted to Plop.
103 104 105 |
# File 'lib/xmpp4r/rexmladdons.rb', line 103 def typed_add(e) add(e) end |