Class: Viewpoint::EWS::SOAP::EwsSaxDocument
- Inherits:
-
Nokogiri::XML::SAX::Document
- Object
- Nokogiri::XML::SAX::Document
- Viewpoint::EWS::SOAP::EwsSaxDocument
- Includes:
- Viewpoint::EWS, StringUtils
- Defined in:
- lib/ews/soap/parsers/ews_sax_document.rb
Overview
Parse the incoming response document via a SAX parser instead of the traditional DOM parser. In early benchmarks this was performing about 132% faster than the DOM-based parser for large documents.
Constant Summary
Constants included from StringUtils
Constants included from Viewpoint::EWS
Instance Attribute Summary collapse
-
#struct ⇒ Object
readonly
Returns the value of attribute struct.
Attributes included from Viewpoint::EWS
Instance Method Summary collapse
- #characters(string) ⇒ Object
- #end_element_namespace(name, prefix = nil, uri = nil) ⇒ Object
-
#initialize ⇒ EwsSaxDocument
constructor
A new instance of EwsSaxDocument.
- #start_element_namespace(name, attributes = [], prefix = nil, uri = nil, ns = []) ⇒ Object
Methods included from StringUtils
Methods included from Viewpoint::EWS
#remove_impersonation, root_logger, #set_impersonation
Constructor Details
#initialize ⇒ EwsSaxDocument
Returns a new instance of EwsSaxDocument.
29 30 31 32 |
# File 'lib/ews/soap/parsers/ews_sax_document.rb', line 29 def initialize @struct = {} @elems = [] end |
Instance Attribute Details
#struct ⇒ Object (readonly)
Returns the value of attribute struct.
27 28 29 |
# File 'lib/ews/soap/parsers/ews_sax_document.rb', line 27 def struct @struct end |
Instance Method Details
#characters(string) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/ews/soap/parsers/ews_sax_document.rb', line 34 def characters(string) # FIXME: Move white space removal to somewhere else. # This function can be called multiple times. In this case newlines in Text Bodies get stripped. # See: https://github.com/zenchild/Viewpoint/issues/90 #string.strip! return if string.empty? if @elems.last[:text] @elems.last[:text] += string else @elems.last[:text] = string end end |
#end_element_namespace(name, prefix = nil, uri = nil) ⇒ Object
58 59 60 61 62 63 64 65 66 67 |
# File 'lib/ews/soap/parsers/ews_sax_document.rb', line 58 def end_element_namespace name, prefix=nil, uri=nil name = ruby_case(name).to_sym elem = @elems.pop if @elems.empty? @struct[name] = elem else @elems.last[:elems] = [] unless @elems.last[:elems].is_a?(Array) @elems.last[:elems] << {name => elem} end end |
#start_element_namespace(name, attributes = [], prefix = nil, uri = nil, ns = []) ⇒ Object
47 48 49 50 51 52 53 54 55 56 |
# File 'lib/ews/soap/parsers/ews_sax_document.rb', line 47 def start_element_namespace(name, attributes = [], prefix = nil, uri = nil, ns = []) name = ruby_case(name).to_sym elem = {} unless attributes.empty? elem[:attribs] = attributes.collect{|a| { ruby_case(a.localname).to_sym => a.value} }.inject(&:merge) end @elems << elem end |