Class REXML::Element
In: lib/xmpp4r/rexmladdons.rb
Parent: Object

this class adds a few helper methods to REXML::Element

Methods

Public Class methods

[Source]

    # File lib/xmpp4r/rexmladdons.rb, line 87
87:     def self.import(xmlelement)
88:       self.new(xmlelement.name).import(xmlelement)
89:     end

Public Instance methods

Test for equality of two elements, useful for assert_equal in test cases. Tries to parse String o as XML.

See Test::Unit::Assertions

[Source]

     # File lib/xmpp4r/rexmladdons.rb, line 103
103:     def ==(o)
104:       return false unless self.kind_of? REXML::Element
105:       if o.kind_of? REXML::Element
106:         # Ok
107:       elsif o.kind_of? String
108:         # Parse o
109:         begin
110:           o = REXML::Document.new(o).root
111:         rescue REXML::ParseException
112:           return false
113:         end
114:       else
115:         # Cannot compare with anything other than Elements or Strings
116:         return false
117:       end
118: 
119:       return false unless name == o.name
120: 
121:       attributes.each_attribute do |attr|
122:         return false unless attr.value == o.attributes[attr.name]
123:       end
124: 
125:       o.attributes.each_attribute do |attr|
126:         return false unless attributes[attr.name] == attr.value
127:       end
128: 
129:       children.each_with_index do |child,i|
130:         return false unless child == o.children[i]
131:       end
132: 
133:       return true
134:     end

Deletes one or more children elements, not just one like REXML::Element#delete_element

[Source]

    # File lib/xmpp4r/rexmladdons.rb, line 94
94:     def delete_elements(element)
95:       while(delete_element(element)) do end
96:     end

[Source]

    # File lib/xmpp4r/rexmladdons.rb, line 20
20:     def each_elements(*els, &block)
21:       els.inject([ ]) do |res, e|
22:         res + each_element(e, &block)
23:       end
24:     end

Returns first element of name e

[Source]

    # File lib/xmpp4r/rexmladdons.rb, line 42
42:     def first_element(e)
43:       each_element(e) { |el| return el }
44:       return nil
45:     end

Returns text of first element of name e

[Source]

    # File lib/xmpp4r/rexmladdons.rb, line 49
49:     def first_element_text(e)
50:       el = first_element(e)
51:       if el
52:         return el.text
53:       else
54:         return nil
55:       end
56:     end

import this element‘s children and attributes

[Source]

    # File lib/xmpp4r/rexmladdons.rb, line 69
69:     def import(xmlelement)
70:       if @name and @name != xmlelement.name
71:         raise "Trying to import an #{xmlelement.name} to a #{@name} !"
72:       end
73:       add_attributes(xmlelement.attributes.clone)
74:       @context = xmlelement.context
75:       xmlelement.each do |e|
76:         if e.kind_of? REXML::Element
77:           typed_add(e.deep_clone)
78:         elsif e.kind_of? REXML::Text
79:           add_text(e.value)
80:         else
81:           add(e.clone)
82:         end
83:       end
84:       self
85:     end

Replaces or adds a child element of name e with text t.

[Source]

    # File lib/xmpp4r/rexmladdons.rb, line 28
28:     def replace_element_text(e, t)
29:       el = first_element(e)
30:       if el.nil?
31:         el = REXML::Element.new(e)
32:         add_element(el)
33:       end
34:       if t
35:         el.text = t
36:       end
37:       self
38:     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.

[Source]

    # File lib/xmpp4r/rexmladdons.rb, line 63
63:     def typed_add(e)
64:       add(e)
65:     end

[Validate]