Sha256: 5c38147900f144fb0dfbf9f7d509ff55ca18c6099090e0ea76d5c858844efdc4
Contents?: true
Size: 1.75 KB
Versions: 2
Compression:
Stored size: 1.75 KB
Contents
require "builder" require "savon" require "savon/core_ext/object" require "savon/core_ext/string" module Savon module CoreExt module Hash # Returns a new Hash with +self+ and +other_hash+ merged recursively. # Modifies the receiver in place. def deep_merge!(other_hash) other_hash.each_pair do |k,v| tv = self[k] self[k] = tv.is_a?(Hash) && v.is_a?(Hash) ? tv.deep_merge(v) : v end self end unless defined? deep_merge! # Returns the values from the soap:Body element or an empty Hash in case the soap:Body tag could # not be found. def find_soap_body envelope = self[keys.first] || {} body_key = envelope.keys.find { |key| /.+:Body/ =~ key } rescue nil body_key ? envelope[body_key].map_soap_response : {} end # Maps keys and values of a Hash created from SOAP response XML to more convenient Ruby Objects. def map_soap_response inject({}) do |hash, (key, value)| value = case value when ::Hash then value["xsi:nil"] ? nil : value.map_soap_response when ::Array then value.map { |val| val.map_soap_response rescue val } when ::String then value.map_soap_response end new_key = if Savon.strip_namespaces? key.strip_namespace.snakecase.to_sym else key.snakecase end if hash[new_key] # key already exists, value should be added as an Array hash[new_key] = [hash[new_key], value].flatten result = hash else result = hash.merge new_key => value end result end end end end end Hash.send :include, Savon::CoreExt::Hash
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
savon-0.8.3 | lib/savon/core_ext/hash.rb |
savon-0.8.2 | lib/savon/core_ext/hash.rb |