Sha256: 86e5df223fd9c86792072896e7765c413d6a5871740326090d1d0f028c637267
Contents?: true
Size: 1.73 KB
Versions: 1
Compression:
Stored size: 1.73 KB
Contents
module Fog class ToHashDocument < Nokogiri::XML::SAX::Document def initialize @stack = [] end def characters(string) @value ||= +'' @value << string.strip end def end_element(name) last = @stack.pop @stack.push({}) if @stack.empty? if last&.empty? && @value.empty? @stack.last[name.to_sym] = +'' elsif last == { :i_nil => "true" } @stack.last[name.to_sym] = nil elsif !@value.empty? @stack.last[name.to_sym] = @value end @value = +'' end def body @stack.first end def response body end def start_element(name, attributes = []) @value = +'' parsed_attributes = {} until attributes.empty? if attributes.first.is_a?(Array) key, value = attributes.shift else key, value = attributes.shift, attributes.shift end parsed_attributes[key.gsub(":", "_").to_sym] = value end if @stack.last.is_a?(Array) @stack.last << { name.to_sym => parsed_attributes } else data = if @stack.empty? @stack.push(parsed_attributes) parsed_attributes elsif @stack.last[name.to_sym] unless @stack.last[name.to_sym].is_a?(Array) @stack.last[name.to_sym] = [@stack.last[name.to_sym]] end @stack.last[name.to_sym] << parsed_attributes @stack.last[name.to_sym].last else @stack.last[name.to_sym] = {} @stack.last[name.to_sym].merge!(parsed_attributes) @stack.last[name.to_sym] end @stack.push(data) end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
fog-xml-0.1.5 | lib/fog/to_hash_document.rb |