class ActiveSupport::XMLConverter

def process_hash(value)

def process_hash(value)
  if value.include?("type") && !value["type"].is_a?(Hash) && @disallowed_types.include?(value["type"])
    raise DisallowedType, value["type"]
  end
  if become_array?(value)
    _, entries = Array.wrap(value.detect { |k, v| not v.is_a?(String) })
    if entries.nil? || value["__content__"].try(:empty?)
      []
    else
      case entries
      when Array
        entries.collect { |v| deep_to_h(v) }
      when Hash
        [deep_to_h(entries)]
      else
        raise "can't typecast #{entries.inspect}"
      end
    end
  elsif become_content?(value)
    process_content(value)
  elsif become_empty_string?(value)
    ""
  elsif become_hash?(value)
    xml_value = value.transform_values { |v| deep_to_h(v) }
    # Turn { files: { file: #<StringIO> } } into { files: #<StringIO> } so it is compatible with
    # how multipart uploaded files from HTML appear
    xml_value["file"].is_a?(StringIO) ? xml_value["file"] : xml_value
  end
end