Sha256: 01389de8ad37aef2bf6bfba595b10abcabc666ef3617a0db746a731583df79fc

Contents?: true

Size: 1.89 KB

Versions: 1

Compression:

Stored size: 1.89 KB

Contents

module Savon
  module Validation

    # Validates a given +value+ of a given +type+. Raises an ArgumentError
    # in case the value is not valid. 
    def validate!(type, value)
      case type
        when :endpoint then validate_endpoint value
        when :soap_version then validate_soap_version value
        when :soap_body then validate_soap_body value
        when :response_process then validate_response_process value
        when :wsse_credentials then validate_wsse_credentials value
      end
      true
    end

    # Raises an ArgumentError for a given +argument+. Also accepts the invalid
    # +value+ and adds it to the error message.
    def invalid!(argument, value = nil)
      message = "Invalid argument '#{argument}'"
      message << ": #{value}" if value
      raise ArgumentError, message
    end

  private

    # Validates a given +endpoint+.
    def validate_endpoint(endpoint)
      invalid! :endpoint, endpoint unless /^(http|https):\/\// === endpoint
    end

    # Validates a given +soap_version+.
    def validate_soap_version(soap_version)
      invalid! :soap_version, soap_version unless SOAPVersions.include? soap_version
    end

    # Validates a given +soap_body+.
    def validate_soap_body(soap_body)
      invalid! :soap_body, soap_body unless
        soap_body.kind_of?(Hash) || soap_body.respond_to?(:to_s)
    end

    # Validates a given +response_process+.
    def validate_response_process(response_process)
      invalid! :response_process, response_process unless
        response_process.respond_to? :call
    end

    # Validates a given Hash of +wsse_credentials+.
    def validate_wsse_credentials(wsse)
      invalid! :wsse_credentials unless wsse[:username] && wsse[:password]
      invalid! :wsse_username, wsse[:username] unless wsse[:username].respond_to? :to_s
      invalid! :wsse_password, wsse[:password] unless wsse[:password].respond_to? :to_s
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
savon-0.5.3 lib/savon/validation.rb