| Class | REXML::Element |
| In: |
lib/xmpp4r/rexmladdons.rb
|
| Parent: | Object |
this class adds a few helper methods to REXML::Element
# File lib/xmpp4r/rexmladdons.rb, line 81
81: def self.import(xmlelement)
82: self.new(xmlelement.name).import(xmlelement)
83: end
Test for equality of two elements, useful for assert_equal in test cases. Tries to parse String o as XML.
See Test::Unit::Assertions
# File lib/xmpp4r/rexmladdons.rb, line 97
97: def ==(o)
98: return false unless self.kind_of? REXML::Element
99: if o.kind_of? REXML::Element
100: # Ok
101: elsif o.kind_of? String
102: # Parse o
103: begin
104: o = REXML::Document.new(o).root
105: rescue REXML::ParseException
106: return false
107: end
108: else
109: # Cannot compare with anything other than Elements or Strings
110: return false
111: end
112:
113: return false unless name == o.name
114:
115: attributes.each_attribute do |attr|
116: return false unless attr.value == o.attributes[attr.name]
117: end
118:
119: o.attributes.each_attribute do |attr|
120: return false unless attributes[attr.name] == attr.value
121: end
122:
123: children.each_with_index do |child,i|
124: return false unless child == o.children[i]
125: end
126:
127: return true
128: end
Deletes one or more children elements, not just one like REXML::Element#delete_element
# File lib/xmpp4r/rexmladdons.rb, line 88
88: def delete_elements(element)
89: while(delete_element(element)) do end
90: end
Returns first element of name e
# File lib/xmpp4r/rexmladdons.rb, line 36
36: def first_element(e)
37: each_element(e) { |el| return el }
38: return nil
39: end
Returns text of first element of name e
# File lib/xmpp4r/rexmladdons.rb, line 43
43: def first_element_text(e)
44: el = first_element(e)
45: if el
46: return el.text
47: else
48: return nil
49: end
50: end
import this element‘s children and attributes
# File lib/xmpp4r/rexmladdons.rb, line 63
63: def import(xmlelement)
64: if @name and @name != xmlelement.name
65: raise "Trying to import an #{xmlelement.name} to a #{@name} !"
66: end
67: add_attributes(xmlelement.attributes.clone)
68: @context = xmlelement.context
69: xmlelement.each do |e|
70: if e.kind_of? REXML::Element
71: typed_add(e.deep_clone)
72: elsif e.kind_of? REXML::Text
73: add_text(e.value)
74: else
75: add(e.clone)
76: end
77: end
78: self
79: end
Replaces or adds a child element of name e with text t.
# File lib/xmpp4r/rexmladdons.rb, line 22
22: def replace_element_text(e, t)
23: el = first_element(e)
24: if el.nil?
25: el = REXML::Element.new(e)
26: add_element(el)
27: end
28: if t
29: el.text = t
30: end
31: self
32: end
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.
# File lib/xmpp4r/rexmladdons.rb, line 57
57: def typed_add(e)
58: add(e)
59: end