class Wasabi::Document

Wasabi::Document

Represents a WSDL document.

Constants

ELEMENT_FORM_DEFAULTS

Attributes

adapter[RW]
document[RW]
document?[RW]
endpoint[W]

Sets the SOAP endpoint.

namespace[W]

Sets the target namespace.

request[RW]
service_name[W]
xml[W]

Public Class Methods

new(document = nil, adapter = nil) click to toggle source

Accepts a WSDL document to parse.

# File lib/wasabi/document.rb, line 26
def initialize(document = nil, adapter = nil)
  self.document = document
  self.adapter  = adapter
end
validate_element_form_default!(value) click to toggle source

Validates if a given value is a valid elementFormDefault value. Raises an ArgumentError if the value is not valid.

# File lib/wasabi/document.rb, line 18
def self.validate_element_form_default!(value)
  return if ELEMENT_FORM_DEFAULTS.include?(value)

  raise ArgumentError, "Invalid value for elementFormDefault: #{value}\n" +
                       "Must be one of: #{ELEMENT_FORM_DEFAULTS.inspect}"
end

Public Instance Methods

element_form_default() click to toggle source

Returns the value of elementFormDefault.

# File lib/wasabi/document.rb, line 54
def element_form_default
  @element_form_default ||= document ? parser.element_form_default : :unqualified
end
element_form_default=(value) click to toggle source

Sets the elementFormDefault value.

# File lib/wasabi/document.rb, line 59
def element_form_default=(value)
  self.class.validate_element_form_default!(value)
  @element_form_default = value
end
endpoint() click to toggle source

Returns the SOAP endpoint.

# File lib/wasabi/document.rb, line 38
def endpoint
  @endpoint ||= parser.endpoint
end
namespace() click to toggle source

Returns the target namespace.

# File lib/wasabi/document.rb, line 46
def namespace
  @namespace ||= parser.namespace
end
operation_input_parameters(key) click to toggle source

Returns a list of input parameters for a given key.

# File lib/wasabi/document.rb, line 98
def operation_input_parameters(key)
  parser.operations[key][:parameters] if operations[key]
end
operations() click to toggle source

Returns a map of SOAP operations.

# File lib/wasabi/document.rb, line 80
def operations
  @operations ||= parser.operations
end
parser() click to toggle source

Parses the WSDL document and returns the Wasabi::Parser.

# File lib/wasabi/document.rb, line 152
def parser
  @parser ||= guard_parse && parse
end
service_name() click to toggle source

Returns the service name.

# File lib/wasabi/document.rb, line 85
def service_name
  @service_name ||= parser.service_name
end
soap_action(key) click to toggle source

Returns the SOAP action for a given key.

# File lib/wasabi/document.rb, line 70
def soap_action(key)
  operations[key][:action] if operations[key]
end
soap_action_parameters(key) click to toggle source

Returns a list of parameter names for a given key

# File lib/wasabi/document.rb, line 92
def soap_action_parameters(key)
  params = operation_input_parameters(key)
  params.keys if params
end
soap_actions() click to toggle source

Returns a list of available SOAP actions.

# File lib/wasabi/document.rb, line 65
def soap_actions
  @soap_actions ||= parser.operations.keys
end
soap_input(key) click to toggle source

Returns the SOAP input for a given key.

# File lib/wasabi/document.rb, line 75
def soap_input(key)
  operations[key][:input] if operations[key]
end
type_definitions() click to toggle source
# File lib/wasabi/document.rb, line 120
def type_definitions
  @type_definitions ||= begin
    result = []

    parser.types.each do |ns, types|
      types.each do |type, info|
        element_keys(info).each do |field|
          field_type = info[field][:type]
          tag, namespace = field_type.split(":").reverse

          result << [[type, field], tag] if user_defined(namespace)
        end
      end
    end if document

    result
  end
end
type_namespaces() click to toggle source
# File lib/wasabi/document.rb, line 102
def type_namespaces
  @type_namespaces ||= begin
    namespaces = []

    parser.types.each do |ns, types|
      types.each do |type, info|
        namespaces << [[type], info[:namespace]]

        element_keys(info).each do |field|
          namespaces << [[type, field], info[:namespace]]
        end
      end
    end if document

    namespaces
  end
end
user_defined(namespace) click to toggle source

Returns whether the given namespace was defined manually.

# File lib/wasabi/document.rb, line 140
def user_defined(namespace)
  uri = parser.namespaces[namespace]
  !(uri =~ %r{^http://schemas.xmlsoap.org} || uri =~ %r{^http://www.w3.org})
end
xml() click to toggle source

Returns the raw WSDL document. Can be used as a hook to extend the library.

# File lib/wasabi/document.rb, line 147
def xml
  @xml ||= Resolver.new(document, request, adapter).resolve
end

Private Instance Methods

element_keys(info) click to toggle source
# File lib/wasabi/document.rb, line 171
def element_keys(info)
  info.keys - [:namespace, :order!, :base_type]
end
guard_parse() click to toggle source

Raises an error if the WSDL document is missing.

# File lib/wasabi/document.rb, line 159
def guard_parse
  return true if document
  raise ArgumentError, "Wasabi needs a WSDL document"
end
parse() click to toggle source

Parses the WSDL document and returns Wasabi::Parser.

# File lib/wasabi/document.rb, line 165
def parse
  parser = Parser.new Nokogiri::XML(xml)
  parser.parse
  parser
end