class Savon::QualifiedMessage

Public Class Methods

new(types, used_namespaces, key_converter) click to toggle source
# File lib/savon/qualified_message.rb, line 6
def initialize(types, used_namespaces, key_converter)
  @types           = types
  @used_namespaces = used_namespaces
  @key_converter   = key_converter
end

Public Instance Methods

to_hash(hash, path) click to toggle source
# File lib/savon/qualified_message.rb, line 12
def to_hash(hash, path)
  return hash unless hash
  return hash.map { |value| to_hash(value, path) } if hash.is_a?(Array)
  return hash.to_s unless hash.is_a?(Hash)

  hash.each_with_object({}) do |(key, value), newhash|
    case key
    when :order!
      newhash[key] = add_namespaces_to_values(value, path)
    when :attributes!, :content!
      newhash[key] = to_hash(value, path)
    else
      if key.to_s =~ /!$/
        newhash[key] = value
      else
        translated_key  = translate_tag(key)
        newkey          = add_namespaces_to_values(key, path).first
        newpath         = path + [translated_key]
        newhash[newkey] = to_hash(value, @types[newpath] ? [@types[newpath]] : newpath)
      end
    end
    newhash
  end
end

Private Instance Methods

add_namespaces_to_values(values, path) click to toggle source
# File lib/savon/qualified_message.rb, line 43
def add_namespaces_to_values(values, path)
  Array(values).collect do |value|
    translated_value = translate_tag(value)
    namespace_path   = path + [translated_value]
    namespace        = @used_namespaces[namespace_path] || ''
    namespace.empty? ? value : "#{namespace}:#{translated_value}"
  end
end
translate_tag(key) click to toggle source
# File lib/savon/qualified_message.rb, line 39
def translate_tag(key)
  Gyoku.xml_tag(key, :key_converter => @key_converter).to_s
end