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) ⇒ Object
Returns first element of name
e
. -
#first_element_text(e) ⇒ Object
Returns text of first element of name
e
. -
#import(xmlelement) ⇒ Object
import this element’s children and attributes.
-
#replace_element_text(e, t) ⇒ 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
87 88 89 |
# File 'lib/xmpp4r/rexmladdons.rb', line 87 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
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
# File 'lib/xmpp4r/rexmladdons.rb', line 103 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
94 95 96 |
# File 'lib/xmpp4r/rexmladdons.rb', line 94 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) ⇒ Object
Returns first element of name e
42 43 44 45 |
# File 'lib/xmpp4r/rexmladdons.rb', line 42 def first_element(e) each_element(e) { |el| return el } return nil end |
#first_element_text(e) ⇒ Object
Returns text of first element of name e
49 50 51 52 53 54 55 56 |
# File 'lib/xmpp4r/rexmladdons.rb', line 49 def first_element_text(e) el = first_element(e) if el return el.text else return nil end end |
#import(xmlelement) ⇒ Object
import this element’s children and attributes
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/xmpp4r/rexmladdons.rb', line 69 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_text(e, t) ⇒ Object
Replaces or adds a child element of name e
with text t
.
28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/xmpp4r/rexmladdons.rb', line 28 def replace_element_text(e, t) el = first_element(e) if el.nil? el = REXML::Element.new(e) 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.
63 64 65 |
# File 'lib/xmpp4r/rexmladdons.rb', line 63 def typed_add(e) add(e) end |