def request(*args, &block)
      raise ArgumentError, "GoogleAdsSavon::Client#request requires at least one argument" if args.empty?

      options = extract_options(args)

      request_builder = SOAP::RequestBuilder.new(options.delete(:input), options)
      request_builder.wsdl = wsdl
      request_builder.http = http.dup
      request_builder.wsse = wsse.dup
      request_builder.config = config.dup

      post_configuration = lambda { process(0, request_builder, &block) if block }

      response = request_builder.request(&post_configuration).response
      http.set_cookies(response.http)

      if wsse.verify_response
        WSSE::VerifySignature.new(response.http.body).verify!
      end

      response
    end
def request(*args, &block)
      raise ArgumentError, "GoogleAdsSavon::Client#request requires at least one argument" if args.empty?

      options = extract_options(args)

      request_builder = SOAP::RequestBuilder.new(options.delete(:input), options)
      request_builder.wsdl = wsdl
      request_builder.http = http.dup
      request_builder.wsse = wsse.dup
      request_builder.config = config.dup

      post_configuration = lambda { process(0, request_builder, &block) if block }

      response = request_builder.request(&post_configuration).response
      http.set_cookies(response.http)

      if wsse.verify_response
        WSSE::VerifySignature.new(response.http.body).verify!
      end

      response
    end
Executes a SOAP request for a given SOAP action. Accepts a +block+ which is evaluated in the
 context of the <tt>SOAP::RequestBuilder</tt> object to let you access its +soap+, +wsdl+,
 +http+ and +wsse+ methods.

 == Examples

   # Calls a "getUser" SOAP action with the payload of "<userId>123</userId>"
   client.request(:get_user) { soap.body = { :user_id => 123 } }

   # Prefixes the SOAP input tag with a given namespace: "<wsdl:GetUser>...</wsdl:GetUser>"
   client.request(:wsdl, "GetUser") { soap.body = { :user_id => 123 } }

   # SOAP input tag with attributes: <getUser xmlns:wsdl="http://example.com">...</getUser>"
   client.request(:get_user, "xmlns:wsdl" => "http://example.com")