class Sekken::WSDL

Attributes

documents[R]

Public: Returns the DocumentCollection.

schemas[R]

Public: Returns the SchemaCollection.

Public Class Methods

new(wsdl, http) click to toggle source
# File lib/sekken/wsdl.rb, line 10
def initialize(wsdl, http)
  @documents = WSDL::DocumentCollection.new
  @schemas = XS::SchemaCollection.new

  resolver = Resolver.new(http)
  importer = Importer.new(resolver, @documents, @schemas)
  importer.import(wsdl)
end

Public Instance Methods

operation(service_name, port_name, operation_name) click to toggle source

Public: Returns an Operation by service, port and operation name.

# File lib/sekken/wsdl.rb, line 46
def operation(service_name, port_name, operation_name)
  verify_operation_exists! service_name, port_name, operation_name

  port = @documents.service_port(service_name, port_name)
  endpoint = port.location

  binding = port.fetch_binding(@documents)
  binding_operation = binding.operations.fetch(operation_name)

  port_type = binding.fetch_port_type(@documents)
  port_type_operation = port_type.operations.fetch(operation_name)

  Operation.new(operation_name, endpoint, binding_operation, port_type_operation, self)
end
operations(service_name, port_name) click to toggle source

Public: Returns an Hash of operation names to Operations by service and port name.

# File lib/sekken/wsdl.rb, line 36
def operations(service_name, port_name)
  verify_service_and_port_exist! service_name, port_name

  port = @documents.service_port(service_name, port_name)
  binding = port.fetch_binding(@documents)

  binding.operations.keys
end
service_name() click to toggle source

Public: Returns the name of the service.

# File lib/sekken/wsdl.rb, line 26
def service_name
  @documents.service_name
end
services() click to toggle source

Public: Returns a Hash of services and ports defined by the WSDL.

# File lib/sekken/wsdl.rb, line 31
def services
  @documents.services.values.inject({}) { |memo, service| memo.merge service.to_hash }
end

Private Instance Methods

verify_operation_exists!(service_name, port_name, operation_name) click to toggle source

Private: Raises a useful error in case the operation does not exist.

# File lib/sekken/wsdl.rb, line 64
def verify_operation_exists!(service_name, port_name, operation_name)
  operations = operations(service_name, port_name)

  unless operations.include? operation_name
    raise ArgumentError, "Unknown operation #{operation_name.inspect} for " \
                         "service #{service_name.inspect} and port #{port_name.inspect}.\n" \
                         "You may want to try one of #{operations.inspect}."
  end
end
verify_service_and_port_exist!(service_name, port_name) click to toggle source

Private: Raises a useful error in case the service or port does not exist.

# File lib/sekken/wsdl.rb, line 75
def verify_service_and_port_exist!(service_name, port_name)
  service = services[service_name]
  port = service[:ports][port_name] if service

  unless port
    raise ArgumentError, "Unknown service #{service_name.inspect} or port #{port_name.inspect}.\n" \
                         "Here is a list of known services and port:\n" + services.inspect
  end
end