44: def dump_porttype(name)
45: class_name = create_class_name(name)
46: methoddef, types = MethodDefCreator.new(@definitions).dump(name)
47: mr_creator = MappingRegistryCreator.new(@definitions)
48: binding = @definitions.bindings.find { |item| item.type == name }
49: return '' unless binding.soapbinding
50: address = @definitions.porttype(name).locations[0]
51:
52: c = XSD::CodeGen::ClassDef.new(class_name, "::SOAP::RPC::Driver")
53: c.def_require("soap/rpc/driver")
54: c.def_const("MappingRegistry", "::SOAP::Mapping::Registry.new")
55: c.def_const("DefaultEndpointUrl", ndq(address))
56: c.def_code(mr_creator.dump(types))
57: c.def_code "Methods = [\n\#{methoddef.gsub(/^/, \" \")}\n]\n"
58: c.def_method("initialize", "endpoint_url = nil") do
59: "endpoint_url ||= DefaultEndpointUrl\nsuper(endpoint_url, nil)\nself.mapping_registry = MappingRegistry\ninit_methods\n"
60: end
61: c.def_privatemethod("init_methods") do
62: "Methods.each do |definitions|\nopt = definitions.last\nif opt[:request_style] == :document\nadd_document_operation(*definitions)\nelse\nadd_rpc_operation(*definitions)\nqname = definitions[0]\nname = definitions[2]\nif qname.name != name and qname.name.capitalize == name.capitalize\n::SOAP::Mapping.define_singleton_method(self, qname.name) do |*arg|\n__send__(name, *arg)\nend\nend\nend\nend\n"
63: end
64: c.dump
65: end