Module: Braintree::Xml::Nokogiri
- Defined in:
- lib/braintree/xml/nokogiri.rb
Constant Summary collapse
- NOKOGIRI_XML_LIMIT =
30000000
Class Method Summary collapse
- ._array?(node) ⇒ Boolean
- ._attributes_to_hash(node, hash = {}) ⇒ Object
- ._build_sub_hash(hash, name) ⇒ Object
- ._children_array_to_hash(node, hash = {}) ⇒ Object
- ._children_to_hash(node, hash = {}) ⇒ Object
- ._node_to_hash(node, hash = {}) ⇒ Object
- .parse(xml_string) ⇒ Object
Class Method Details
._array?(node) ⇒ Boolean
65 66 67 68 |
# File 'lib/braintree/xml/nokogiri.rb', line 65 def self._array?(node) non_text_children = node.children.select { |child| !child.text? } non_text_children.size > 1 && non_text_children.first.name == non_text_children[1].name end |
._attributes_to_hash(node, hash = {}) ⇒ Object
52 53 54 55 |
# File 'lib/braintree/xml/nokogiri.rb', line 52 def self._attributes_to_hash(node, hash={}) node.attributes.each { |name, attr| hash[name] = attr.value } hash end |
._build_sub_hash(hash, name) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/braintree/xml/nokogiri.rb', line 33 def self._build_sub_hash(hash, name) sub_hash = {} if hash[name] if !hash[name].kind_of? Array hash[name] = [hash[name]] end hash[name] << sub_hash else hash[name] = sub_hash end sub_hash end |
._children_array_to_hash(node, hash = {}) ⇒ Object
57 58 59 60 61 62 63 |
# File 'lib/braintree/xml/nokogiri.rb', line 57 def self._children_array_to_hash(node, hash={}) first_child = node.children.find { |child| !child.text? } hash[first_child.name] = node.children.select { |child| !child.text? }.map do |child| _children_to_hash(child, {}) end hash end |
._children_to_hash(node, hash = {}) ⇒ Object
46 47 48 49 50 |
# File 'lib/braintree/xml/nokogiri.rb', line 46 def self._children_to_hash(node, hash={}) node.children.each { |child| _node_to_hash(child, hash) unless child.text? && child.content.strip.empty? } _attributes_to_hash(node, hash) hash end |
._node_to_hash(node, hash = {}) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/braintree/xml/nokogiri.rb', line 14 def self._node_to_hash(node, hash = {}) sub_hash = node.text? ? hash : _build_sub_hash(hash, node.name) if node.text? || (node.children.size == 1 && node.children.first.text?) content = node.text? ? node.content : node.children.first.content raise "Content too large" if content.length >= NOKOGIRI_XML_LIMIT sub_hash[CONTENT_ROOT] = content _attributes_to_hash(node, sub_hash) unless node.text? else _attributes_to_hash(node, sub_hash) if _array?(node) _children_array_to_hash(node, sub_hash) else _children_to_hash(node, sub_hash) end end hash end |
.parse(xml_string) ⇒ Object
8 9 10 11 12 |
# File 'lib/braintree/xml/nokogiri.rb', line 8 def self.parse(xml_string) require "nokogiri" unless defined?(::Nokogiri) doc = ::Nokogiri::XML(xml_string.strip) _node_to_hash(doc.root) end |