require 'wsdl/info'
require 'xsd/namedelements'
module WSDL
class PortType < Info
attr_reader :name attr_reader :operations
def targetnamespace
parent.targetnamespace
end
def initialize
super
@name = nil
@operations = XSD::NamedElements.new
end
def find_binding
root.bindings.find { |item| item.type == @name } or
raise RuntimeError.new("#{@name} not found")
end
def locations
bind_name = find_binding.name
result = []
root.services.each do |service|
service.ports.each do |port|
if port.binding == bind_name
result << port.soap_address.location if port.soap_address
end
end
end
result
end
def parse_element(element)
case element
when OperationName
o = Operation.new
@operations << o
o
when DocumentationName
o = Documentation.new
o
else
nil
end
end
def parse_attr(attr, value)
case attr
when NameAttrName
@name = XSD::QName.new(targetnamespace, value.source)
else
nil
end
end
end
end