soap4r 1.5.5.20061022
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/wsdl2ruby.rb +131 -0
- data/bin/xsd2ruby.rb +82 -0
- data/lib/soap/XMLSchemaDatatypes.rb +9 -0
- data/lib/soap/XMLSchemaDatatypes1999.rb +10 -0
- data/lib/soap/attachment.rb +108 -0
- data/lib/soap/baseData.rb +992 -0
- data/lib/soap/cgistub.rb +9 -0
- data/lib/soap/charset.rb +9 -0
- data/lib/soap/compat.rb +182 -0
- data/lib/soap/driver.rb +9 -0
- data/lib/soap/element.rb +266 -0
- data/lib/soap/encodingstyle/aspDotNetHandler.rb +207 -0
- data/lib/soap/encodingstyle/handler.rb +109 -0
- data/lib/soap/encodingstyle/literalHandler.rb +241 -0
- data/lib/soap/encodingstyle/soapHandler.rb +598 -0
- data/lib/soap/generator.rb +264 -0
- data/lib/soap/header/handler.rb +60 -0
- data/lib/soap/header/handlerset.rb +70 -0
- data/lib/soap/header/simplehandler.rb +44 -0
- data/lib/soap/httpconfigloader.rb +119 -0
- data/lib/soap/mapping.rb +12 -0
- data/lib/soap/mapping/encodedregistry.rb +531 -0
- data/lib/soap/mapping/factory.rb +372 -0
- data/lib/soap/mapping/literalregistry.rb +321 -0
- data/lib/soap/mapping/mapping.rb +561 -0
- data/lib/soap/mapping/registry.rb +258 -0
- data/lib/soap/mapping/rubytypeFactory.rb +475 -0
- data/lib/soap/mapping/typeMap.rb +82 -0
- data/lib/soap/mapping/wsdlencodedregistry.rb +253 -0
- data/lib/soap/mapping/wsdlliteralregistry.rb +246 -0
- data/lib/soap/mappingRegistry.rb +9 -0
- data/lib/soap/marshal.rb +59 -0
- data/lib/soap/mimemessage.rb +241 -0
- data/lib/soap/namespace.rb +9 -0
- data/lib/soap/netHttpClient.rb +204 -0
- data/lib/soap/parser.rb +251 -0
- data/lib/soap/processor.rb +66 -0
- data/lib/soap/property.rb +333 -0
- data/lib/soap/proxy.rb +14 -0
- data/lib/soap/qname.rb +9 -0
- data/lib/soap/rpc/cgistub.rb +214 -0
- data/lib/soap/rpc/driver.rb +245 -0
- data/lib/soap/rpc/element.rb +330 -0
- data/lib/soap/rpc/httpserver.rb +143 -0
- data/lib/soap/rpc/proxy.rb +563 -0
- data/lib/soap/rpc/router.rb +602 -0
- data/lib/soap/rpc/rpc.rb +25 -0
- data/lib/soap/rpc/soaplet.rb +162 -0
- data/lib/soap/rpc/standaloneServer.rb +43 -0
- data/lib/soap/rpcRouter.rb +9 -0
- data/lib/soap/rpcUtils.rb +9 -0
- data/lib/soap/server.rb +9 -0
- data/lib/soap/soap.rb +150 -0
- data/lib/soap/standaloneServer.rb +9 -0
- data/lib/soap/streamHandler.rb +258 -0
- data/lib/soap/wsdlDriver.rb +580 -0
- data/lib/wsdl/binding.rb +65 -0
- data/lib/wsdl/data.rb +64 -0
- data/lib/wsdl/definitions.rb +250 -0
- data/lib/wsdl/documentation.rb +32 -0
- data/lib/wsdl/import.rb +80 -0
- data/lib/wsdl/importer.rb +38 -0
- data/lib/wsdl/info.rb +39 -0
- data/lib/wsdl/message.rb +54 -0
- data/lib/wsdl/operation.rb +175 -0
- data/lib/wsdl/operationBinding.rb +116 -0
- data/lib/wsdl/param.rb +85 -0
- data/lib/wsdl/parser.rb +163 -0
- data/lib/wsdl/part.rb +52 -0
- data/lib/wsdl/port.rb +84 -0
- data/lib/wsdl/portType.rb +75 -0
- data/lib/wsdl/service.rb +61 -0
- data/lib/wsdl/soap/address.rb +40 -0
- data/lib/wsdl/soap/binding.rb +49 -0
- data/lib/wsdl/soap/body.rb +56 -0
- data/lib/wsdl/soap/cgiStubCreator.rb +88 -0
- data/lib/wsdl/soap/classDefCreator.rb +340 -0
- data/lib/wsdl/soap/classDefCreatorSupport.rb +131 -0
- data/lib/wsdl/soap/clientSkeltonCreator.rb +93 -0
- data/lib/wsdl/soap/complexType.rb +166 -0
- data/lib/wsdl/soap/data.rb +42 -0
- data/lib/wsdl/soap/definitions.rb +151 -0
- data/lib/wsdl/soap/driverCreator.rb +110 -0
- data/lib/wsdl/soap/element.rb +28 -0
- data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +117 -0
- data/lib/wsdl/soap/fault.rb +56 -0
- data/lib/wsdl/soap/header.rb +86 -0
- data/lib/wsdl/soap/headerfault.rb +56 -0
- data/lib/wsdl/soap/literalMappingRegistryCreator.rb +188 -0
- data/lib/wsdl/soap/mappingRegistryCreator.rb +53 -0
- data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +233 -0
- data/lib/wsdl/soap/methodDefCreator.rb +253 -0
- data/lib/wsdl/soap/operation.rb +122 -0
- data/lib/wsdl/soap/servantSkeltonCreator.rb +78 -0
- data/lib/wsdl/soap/standaloneServerStubCreator.rb +98 -0
- data/lib/wsdl/soap/wsdl2ruby.rb +196 -0
- data/lib/wsdl/types.rb +44 -0
- data/lib/wsdl/wsdl.rb +23 -0
- data/lib/wsdl/xmlSchema/all.rb +24 -0
- data/lib/wsdl/xmlSchema/annotation.rb +34 -0
- data/lib/wsdl/xmlSchema/any.rb +56 -0
- data/lib/wsdl/xmlSchema/attribute.rb +123 -0
- data/lib/wsdl/xmlSchema/choice.rb +55 -0
- data/lib/wsdl/xmlSchema/complexContent.rb +88 -0
- data/lib/wsdl/xmlSchema/complexExtension.rb +104 -0
- data/lib/wsdl/xmlSchema/complexRestriction.rb +92 -0
- data/lib/wsdl/xmlSchema/complexType.rb +152 -0
- data/lib/wsdl/xmlSchema/content.rb +74 -0
- data/lib/wsdl/xmlSchema/data.rb +90 -0
- data/lib/wsdl/xmlSchema/element.rb +158 -0
- data/lib/wsdl/xmlSchema/enumeration.rb +36 -0
- data/lib/wsdl/xmlSchema/import.rb +65 -0
- data/lib/wsdl/xmlSchema/importer.rb +87 -0
- data/lib/wsdl/xmlSchema/include.rb +54 -0
- data/lib/wsdl/xmlSchema/length.rb +35 -0
- data/lib/wsdl/xmlSchema/list.rb +48 -0
- data/lib/wsdl/xmlSchema/maxlength.rb +35 -0
- data/lib/wsdl/xmlSchema/minlength.rb +35 -0
- data/lib/wsdl/xmlSchema/parser.rb +166 -0
- data/lib/wsdl/xmlSchema/pattern.rb +36 -0
- data/lib/wsdl/xmlSchema/schema.rb +144 -0
- data/lib/wsdl/xmlSchema/sequence.rb +51 -0
- data/lib/wsdl/xmlSchema/simpleContent.rb +69 -0
- data/lib/wsdl/xmlSchema/simpleExtension.rb +54 -0
- data/lib/wsdl/xmlSchema/simpleRestriction.rb +91 -0
- data/lib/wsdl/xmlSchema/simpleType.rb +80 -0
- data/lib/wsdl/xmlSchema/unique.rb +34 -0
- data/lib/wsdl/xmlSchema/xsd2ruby.rb +107 -0
- data/lib/xsd/charset.rb +187 -0
- data/lib/xsd/codegen.rb +12 -0
- data/lib/xsd/codegen/classdef.rb +203 -0
- data/lib/xsd/codegen/commentdef.rb +34 -0
- data/lib/xsd/codegen/gensupport.rb +168 -0
- data/lib/xsd/codegen/methoddef.rb +70 -0
- data/lib/xsd/codegen/moduledef.rb +191 -0
- data/lib/xsd/datatypes.rb +1282 -0
- data/lib/xsd/datatypes1999.rb +20 -0
- data/lib/xsd/iconvcharset.rb +33 -0
- data/lib/xsd/mapping.rb +42 -0
- data/lib/xsd/namedelements.rb +124 -0
- data/lib/xsd/ns.rb +146 -0
- data/lib/xsd/qname.rb +78 -0
- data/lib/xsd/xmlparser.rb +61 -0
- data/lib/xsd/xmlparser/parser.rb +96 -0
- data/lib/xsd/xmlparser/rexmlparser.rb +54 -0
- data/lib/xsd/xmlparser/xmlparser.rb +50 -0
- data/lib/xsd/xmlparser/xmlscanner.rb +147 -0
- data/test/16runner.rb +68 -0
- data/test/interopR2/README.txt +2 -0
- data/test/interopR2/SOAPBuildersInterop_R2.wsdl +461 -0
- data/test/interopR2/SOAPBuildersInterop_R2GrB.wsdl +19 -0
- data/test/interopR2/base.rb +288 -0
- data/test/interopR2/client.NetRemoting.rb +17 -0
- data/test/interopR2/client.NetRemoting.rb.result +3410 -0
- data/test/interopR2/client.NetRemoting_Base.log +6279 -0
- data/test/interopR2/client.NetRemoting_GroupB.log +1188 -0
- data/test/interopR2/client.rb +1228 -0
- data/test/interopR2/client4S4C.rb +15 -0
- data/test/interopR2/client4S4C2.rb +14 -0
- data/test/interopR2/client4S4C2_Base.log +4955 -0
- data/test/interopR2/client4S4C2_GroupB.log +1000 -0
- data/test/interopR2/client4S4C_Base.log +4635 -0
- data/test/interopR2/client4S4C_GroupB.log +900 -0
- data/test/interopR2/clientASP.NET.rb +17 -0
- data/test/interopR2/clientASP.NET_Base.log +5468 -0
- data/test/interopR2/clientASP.NET_GroupB.log +977 -0
- data/test/interopR2/clientApacheAxis.rb +16 -0
- data/test/interopR2/clientApacheAxis_Base.log +3171 -0
- data/test/interopR2/clientApacheAxis_GroupB.log +498 -0
- data/test/interopR2/clientApacheSOAP.rb +17 -0
- data/test/interopR2/clientApacheSOAP_Base.log +3171 -0
- data/test/interopR2/clientBEAWebLogic.rb +17 -0
- data/test/interopR2/clientBEAWebLogic_Base.log +3171 -0
- data/test/interopR2/clientBEAWebLogic_GroupB.log +498 -0
- data/test/interopR2/clientBase.rb +1970 -0
- data/test/interopR2/clientCapeConnect.rb +18 -0
- data/test/interopR2/clientCapeConnect_Base.log +2126 -0
- data/test/interopR2/clientDelphi.rb +19 -0
- data/test/interopR2/clientDelphi_Base.log +0 -0
- data/test/interopR2/clientEasySoap.rb +14 -0
- data/test/interopR2/clientEasySoap_Base.log +6187 -0
- data/test/interopR2/clientEasySoap_GroupB.log +1076 -0
- data/test/interopR2/clientFrontier.rb +25 -0
- data/test/interopR2/clientFrontier_Base.log +5188 -0
- data/test/interopR2/clientGLUE.rb +32 -0
- data/test/interopR2/clientHP.rb +13 -0
- data/test/interopR2/clientHP_Base.log +3171 -0
- data/test/interopR2/clientHP_GroupB.log +498 -0
- data/test/interopR2/clientJAX-RPC.rb +19 -0
- data/test/interopR2/clientJSOAP.rb +14 -0
- data/test/interopR2/clientJSOAP_Base.log +4465 -0
- data/test/interopR2/clientJSOAP_GroupB.log +824 -0
- data/test/interopR2/clientKafkaXSLT.rb +15 -0
- data/test/interopR2/clientKafkaXSLT_Base.log +10299 -0
- data/test/interopR2/clientKafkaXSLT_GroupB.log +1739 -0
- data/test/interopR2/clientMSSOAPToolkit2.0.rb +17 -0
- data/test/interopR2/clientMSSOAPToolkit2.0_Base.log +4805 -0
- data/test/interopR2/clientMSSOAPToolkit2.0_GroupB.log +871 -0
- data/test/interopR2/clientMSSOAPToolkit3.0.rb +17 -0
- data/test/interopR2/clientMSSOAPToolkit3.0_Base.log +5076 -0
- data/test/interopR2/clientMSSOAPToolkit3.0_GroupB.log +908 -0
- data/test/interopR2/clientNuSOAP.rb +19 -0
- data/test/interopR2/clientNuSOAP_Base.log +5076 -0
- data/test/interopR2/clientNuSOAP_GroupB.log +958 -0
- data/test/interopR2/clientNuWave.rb +15 -0
- data/test/interopR2/clientNuWave_Base.log +2019 -0
- data/test/interopR2/clientOpenLink.rb +15 -0
- data/test/interopR2/clientOpenLink_Base.log +6171 -0
- data/test/interopR2/clientOpenLink_GroupB.log +1094 -0
- data/test/interopR2/clientOracle.rb +15 -0
- data/test/interopR2/clientOracle_Base.log +5594 -0
- data/test/interopR2/clientPEAR.rb +18 -0
- data/test/interopR2/clientPEAR_Base.log +6261 -0
- data/test/interopR2/clientPEAR_GroupB.log +1106 -0
- data/test/interopR2/clientPhalanx.rb +18 -0
- data/test/interopR2/clientPhalanx_Base.log +41036 -0
- data/test/interopR2/clientPhalanx_GroupB.log +6519 -0
- data/test/interopR2/clientSIMACE.rb +18 -0
- data/test/interopR2/clientSIMACE_Base.log +6171 -0
- data/test/interopR2/clientSIMACE_GroupB.log +1093 -0
- data/test/interopR2/clientSOAP4R.rb +18 -0
- data/test/interopR2/clientSOAP4R.rb.result +3409 -0
- data/test/interopR2/clientSOAP4R_Base.log +6366 -0
- data/test/interopR2/clientSOAP4R_GroupB.log +1112 -0
- data/test/interopR2/clientSOAP__Lite.rb +14 -0
- data/test/interopR2/clientSQLData.rb +18 -0
- data/test/interopR2/clientSQLData_Base.log +4857 -0
- data/test/interopR2/clientSQLData_GroupB.log +770 -0
- data/test/interopR2/clientSilverStream.rb +17 -0
- data/test/interopR2/clientSilverStream_Base.log +3171 -0
- data/test/interopR2/clientSpray2001.rb +17 -0
- data/test/interopR2/clientSpray2001_Base.log +8187 -0
- data/test/interopR2/clientSpray2001_GroupB.log +1408 -0
- data/test/interopR2/clientSun.rb +19 -0
- data/test/interopR2/clientSun_Base.log +4641 -0
- data/test/interopR2/clientSun_GroupB.log +856 -0
- data/test/interopR2/clientVWOpentalkSoap.rb +19 -0
- data/test/interopR2/clientVWOpentalkSoap_Base.log +5402 -0
- data/test/interopR2/clientVWOpentalkSoap_GroupB.log +972 -0
- data/test/interopR2/clientWASP.rb +19 -0
- data/test/interopR2/clientWASPC.rb +18 -0
- data/test/interopR2/clientWASPC_Base.log +4187 -0
- data/test/interopR2/clientWASPC_GroupB.log +763 -0
- data/test/interopR2/clientWASP_Base.log +5414 -0
- data/test/interopR2/clientWASP_GroupB.log +970 -0
- data/test/interopR2/clientWebMethods.rb +15 -0
- data/test/interopR2/clientWebMethods_Base.log +3075 -0
- data/test/interopR2/clientWebMethods_GroupB.log +483 -0
- data/test/interopR2/clientWhiteMesa.rb +28 -0
- data/test/interopR2/clientWhiteMesa_Base.log +4359 -0
- data/test/interopR2/clientWhiteMesa_GroupB.log +808 -0
- data/test/interopR2/clientWingfoot.rb +15 -0
- data/test/interopR2/clientWingfoot_Base.log +4445 -0
- data/test/interopR2/clientWingfoot_GroupB.log +848 -0
- data/test/interopR2/clientXMLBus.rb +19 -0
- data/test/interopR2/clientXMLBus_Base.log +3075 -0
- data/test/interopR2/clientXMLBus_GroupB.log +483 -0
- data/test/interopR2/clientXMLRPC-EPI.rb +17 -0
- data/test/interopR2/clientXSOAP.rb +14 -0
- data/test/interopR2/clientXSOAP_Base.log +4445 -0
- data/test/interopR2/clientZSI.rb +19 -0
- data/test/interopR2/clienteSOAP.rb +18 -0
- data/test/interopR2/clienteSOAP_Base.log +8728 -0
- data/test/interopR2/clientgSOAP.rb +18 -0
- data/test/interopR2/clientgSOAP_Base.log +4689 -0
- data/test/interopR2/clientgSOAP_GroupB.log +1014 -0
- data/test/interopR2/clientkSOAP.rb +17 -0
- data/test/interopR2/clientkSOAP_Base.log +5625 -0
- data/test/interopR2/iSimonReg.rb +112 -0
- data/test/interopR2/interopResultBase.rb +114 -0
- data/test/interopR2/interopService.rb +247 -0
- data/test/interopR2/result_client.NetRemoting.txt +4593 -0
- data/test/interopR2/rwikiInteropService.rb +105 -0
- data/test/interopR2/server.cgi +270 -0
- data/test/interopR2/server.rb +274 -0
- data/test/interopR2/simonReg.rb +123 -0
- data/test/interopR2/test.sh +49 -0
- data/test/interopR4/client.rb +112 -0
- data/test/runner.rb +9 -0
- data/test/sm11/classDef.rb +156 -0
- data/test/sm11/client.rb +542 -0
- data/test/sm11/driver.rb +183 -0
- data/test/sm11/servant.rb +1067 -0
- data/test/sm11/server.rb +25 -0
- data/test/soap/asp.net/hello.wsdl +96 -0
- data/test/soap/asp.net/test_aspdotnet.rb +112 -0
- data/test/soap/calc/calc.rb +17 -0
- data/test/soap/calc/calc2.rb +29 -0
- data/test/soap/calc/server.cgi +13 -0
- data/test/soap/calc/server.rb +17 -0
- data/test/soap/calc/server2.rb +20 -0
- data/test/soap/calc/test_calc.rb +49 -0
- data/test/soap/calc/test_calc2.rb +53 -0
- data/test/soap/calc/test_calc_cgi.rb +69 -0
- data/test/soap/fault/test_customfault.rb +58 -0
- data/test/soap/header/server.cgi +119 -0
- data/test/soap/header/test_authheader.rb +240 -0
- data/test/soap/header/test_authheader_cgi.rb +121 -0
- data/test/soap/header/test_simplehandler.rb +116 -0
- data/test/soap/helloworld/hw_s.rb +16 -0
- data/test/soap/helloworld/test_helloworld.rb +41 -0
- data/test/soap/literalArrayMapping/amazonEc.rb +4778 -0
- data/test/soap/literalArrayMapping/amazonEcDriver.rb +172 -0
- data/test/soap/literalArrayMapping/amazonresponse.xml +100 -0
- data/test/soap/literalArrayMapping/test_definedarray.rb +36 -0
- data/test/soap/marshal/marshaltestlib.rb +494 -0
- data/test/soap/marshal/test_digraph.rb +56 -0
- data/test/soap/marshal/test_marshal.rb +26 -0
- data/test/soap/marshal/test_struct.rb +47 -0
- data/test/soap/ssl/README +1 -0
- data/test/soap/ssl/ca.cert +23 -0
- data/test/soap/ssl/client.cert +19 -0
- data/test/soap/ssl/client.key +15 -0
- data/test/soap/ssl/server.cert +19 -0
- data/test/soap/ssl/server.key +15 -0
- data/test/soap/ssl/sslsvr.rb +57 -0
- data/test/soap/ssl/subca.cert +21 -0
- data/test/soap/ssl/test_ssl.rb +245 -0
- data/test/soap/struct/test_struct.rb +77 -0
- data/test/soap/styleuse/client.rb +20 -0
- data/test/soap/styleuse/server.rb +86 -0
- data/test/soap/swa/test_file.rb +73 -0
- data/test/soap/test_basetype.rb +976 -0
- data/test/soap/test_custommap.rb +108 -0
- data/test/soap/test_empty.rb +79 -0
- data/test/soap/test_envelopenamespace.rb +92 -0
- data/test/soap/test_httpconfigloader.rb +39 -0
- data/test/soap/test_mapping.rb +59 -0
- data/test/soap/test_no_indent.rb +86 -0
- data/test/soap/test_property.rb +424 -0
- data/test/soap/test_response_as_xml.rb +95 -0
- data/test/soap/test_soapelement.rb +120 -0
- data/test/soap/test_streamhandler.rb +262 -0
- data/test/soap/test_styleuse.rb +333 -0
- data/test/soap/wsdlDriver/README.txt +2 -0
- data/test/soap/wsdlDriver/calc.wsdl +126 -0
- data/test/soap/wsdlDriver/document.wsdl +54 -0
- data/test/soap/wsdlDriver/echo_version.rb +29 -0
- data/test/soap/wsdlDriver/simpletype.wsdl +63 -0
- data/test/soap/wsdlDriver/test_calc.rb +100 -0
- data/test/soap/wsdlDriver/test_document.rb +78 -0
- data/test/soap/wsdlDriver/test_simpletype.rb +87 -0
- data/test/wsdl/abstract/abstract.wsdl +97 -0
- data/test/wsdl/abstract/test_abstract.rb +130 -0
- data/test/wsdl/any/any.wsdl +51 -0
- data/test/wsdl/any/expectedDriver.rb +46 -0
- data/test/wsdl/any/expectedEcho.rb +18 -0
- data/test/wsdl/any/expectedService.rb +42 -0
- data/test/wsdl/any/test_any.rb +193 -0
- data/test/wsdl/axisArray/axisArray.wsdl +60 -0
- data/test/wsdl/axisArray/itemList.rb +14 -0
- data/test/wsdl/axisArray/test_axisarray.rb +69 -0
- data/test/wsdl/choice/choice.wsdl +91 -0
- data/test/wsdl/choice/test_choice.rb +134 -0
- data/test/wsdl/complexcontent/complexContent.wsdl +83 -0
- data/test/wsdl/complexcontent/test_echo.rb +101 -0
- data/test/wsdl/datetime/DatetimeService.rb +44 -0
- data/test/wsdl/datetime/datetime.rb +0 -0
- data/test/wsdl/datetime/datetime.wsdl +45 -0
- data/test/wsdl/datetime/datetimeServant.rb +21 -0
- data/test/wsdl/datetime/test_datetime.rb +82 -0
- data/test/wsdl/document/array/double.wsdl +72 -0
- data/test/wsdl/document/array/test_array.rb +117 -0
- data/test/wsdl/document/document.wsdl +74 -0
- data/test/wsdl/document/number.wsdl +54 -0
- data/test/wsdl/document/ping_nosoapaction.wsdl +66 -0
- data/test/wsdl/document/test_nosoapaction.rb +109 -0
- data/test/wsdl/document/test_number.rb +99 -0
- data/test/wsdl/document/test_rpc.rb +211 -0
- data/test/wsdl/emptycomplextype.wsdl +31 -0
- data/test/wsdl/list/list.wsdl +93 -0
- data/test/wsdl/list/test_list.rb +134 -0
- data/test/wsdl/map/map.wsdl +92 -0
- data/test/wsdl/map/map.xml +43 -0
- data/test/wsdl/map/test_map.rb +99 -0
- data/test/wsdl/marshal/person.wsdl +21 -0
- data/test/wsdl/marshal/person_org.rb +18 -0
- data/test/wsdl/marshal/test_wsdlmarshal.rb +79 -0
- data/test/wsdl/multiplefault.wsdl +68 -0
- data/test/wsdl/overload/overload.wsdl +80 -0
- data/test/wsdl/overload/test_overload.rb +118 -0
- data/test/wsdl/qualified/lp.wsdl +47 -0
- data/test/wsdl/qualified/lp.xsd +26 -0
- data/test/wsdl/qualified/np.wsdl +51 -0
- data/test/wsdl/qualified/test_qualified.rb +145 -0
- data/test/wsdl/qualified/test_unqualified.rb +159 -0
- data/test/wsdl/raa/RAA.rb +120 -0
- data/test/wsdl/raa/RAAServant.rb +107 -0
- data/test/wsdl/raa/RAAService.rb +120 -0
- data/test/wsdl/raa/README.txt +8 -0
- data/test/wsdl/raa/raa.wsdl +264 -0
- data/test/wsdl/raa/server.rb +103 -0
- data/test/wsdl/raa/test_raa.rb +91 -0
- data/test/wsdl/ref/expectedProduct.rb +158 -0
- data/test/wsdl/ref/product.wsdl +147 -0
- data/test/wsdl/ref/test_ref.rb +289 -0
- data/test/wsdl/rpc/rpc.wsdl +83 -0
- data/test/wsdl/rpc/test-rpc-lit.wsdl +364 -0
- data/test/wsdl/rpc/test_rpc.rb +173 -0
- data/test/wsdl/rpc/test_rpc_lit.rb +407 -0
- data/test/wsdl/simplecontent/simplecontent.wsdl +83 -0
- data/test/wsdl/simplecontent/test_simplecontent.rb +116 -0
- data/test/wsdl/simpletype/rpc/expectedClient.rb +34 -0
- data/test/wsdl/simpletype/rpc/expectedDriver.rb +55 -0
- data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +19 -0
- data/test/wsdl/simpletype/rpc/expectedServant.rb +32 -0
- data/test/wsdl/simpletype/rpc/expectedService.rb +51 -0
- data/test/wsdl/simpletype/rpc/rpc.wsdl +80 -0
- data/test/wsdl/simpletype/rpc/test_rpc.rb +62 -0
- data/test/wsdl/simpletype/simpletype.wsdl +95 -0
- data/test/wsdl/simpletype/test_simpletype.rb +99 -0
- data/test/wsdl/soap/soapbodyparts.wsdl +103 -0
- data/test/wsdl/soap/test_soapbodyparts.rb +79 -0
- data/test/wsdl/soap/wsdl2ruby/expectedClassdef.rb +19 -0
- data/test/wsdl/soap/wsdl2ruby/expectedClient.rb +34 -0
- data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +55 -0
- data/test/wsdl/soap/wsdl2ruby/expectedServant.rb +32 -0
- data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +44 -0
- data/test/wsdl/soap/wsdl2ruby/expectedService.rb +51 -0
- data/test/wsdl/soap/wsdl2ruby/rpc.wsdl +80 -0
- data/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb +31 -0
- data/test/wsdl/soap/wsdl2ruby/section/section.xsd +31 -0
- data/test/wsdl/soap/wsdl2ruby/section/test_section.rb +54 -0
- data/test/wsdl/soap/wsdl2ruby/soapenc/soapenc.wsdl +64 -0
- data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +96 -0
- data/test/wsdl/soap/wsdl2ruby/test_wsdl2ruby.rb +79 -0
- data/test/wsdl/soaptype/soaptype.wsdl +61 -0
- data/test/wsdl/soaptype/test_soaptype.rb +160 -0
- data/test/wsdl/test_emptycomplextype.rb +21 -0
- data/test/wsdl/test_fault.rb +50 -0
- data/test/wsdl/test_multiplefault.rb +39 -0
- data/test/xsd/codegen/test_classdef.rb +214 -0
- data/test/xsd/noencoding.xml +4 -0
- data/test/xsd/test_noencoding.rb +32 -0
- data/test/xsd/test_ns.rb +20 -0
- data/test/xsd/test_xmlschemaparser.rb +22 -0
- data/test/xsd/test_xsd.rb +1523 -0
- data/test/xsd/xmllang.xml +43 -0
- data/test/xsd/xmlschema.xml +12 -0
- metadata +539 -0
data/lib/soap/parser.rb
ADDED
@@ -0,0 +1,251 @@
|
|
1
|
+
# SOAP4R - SOAP XML Instance Parser library.
|
2
|
+
# Copyright (C) 2001, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
3
|
+
|
4
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
5
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
6
|
+
# either the dual license version in 2003, or any later version.
|
7
|
+
|
8
|
+
|
9
|
+
require 'xsd/ns'
|
10
|
+
require 'xsd/xmlparser'
|
11
|
+
require 'soap/soap'
|
12
|
+
require 'soap/baseData'
|
13
|
+
require 'soap/encodingstyle/handler'
|
14
|
+
|
15
|
+
|
16
|
+
module SOAP
|
17
|
+
|
18
|
+
|
19
|
+
class Parser
|
20
|
+
include SOAP
|
21
|
+
|
22
|
+
class ParseError < Error; end
|
23
|
+
class FormatDecodeError < ParseError; end
|
24
|
+
class UnexpectedElementError < ParseError; end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
class ParseFrame
|
29
|
+
attr_reader :node
|
30
|
+
attr_reader :name
|
31
|
+
attr_reader :ns, :encodingstyle
|
32
|
+
|
33
|
+
class NodeContainer
|
34
|
+
def initialize(node)
|
35
|
+
@node = node
|
36
|
+
end
|
37
|
+
|
38
|
+
def node
|
39
|
+
@node
|
40
|
+
end
|
41
|
+
|
42
|
+
def replace_node(node)
|
43
|
+
@node = node
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
public
|
48
|
+
|
49
|
+
def initialize(ns, name, node, encodingstyle)
|
50
|
+
@ns = ns
|
51
|
+
@name = name
|
52
|
+
self.node = node
|
53
|
+
@encodingstyle = encodingstyle
|
54
|
+
end
|
55
|
+
|
56
|
+
def node=(node)
|
57
|
+
@node = NodeContainer.new(node)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
public
|
62
|
+
|
63
|
+
attr_accessor :envelopenamespace
|
64
|
+
attr_accessor :default_encodingstyle
|
65
|
+
attr_accessor :decode_typemap
|
66
|
+
attr_accessor :allow_unqualified_element
|
67
|
+
|
68
|
+
def initialize(opt = {})
|
69
|
+
@opt = opt
|
70
|
+
@parser = XSD::XMLParser.create_parser(self, opt)
|
71
|
+
@parsestack = nil
|
72
|
+
@lastnode = nil
|
73
|
+
@handlers = {}
|
74
|
+
@envelopenamespace = opt[:envelopenamespace] || EnvelopeNamespace
|
75
|
+
@default_encodingstyle = opt[:default_encodingstyle] || EncodingNamespace
|
76
|
+
@decode_typemap = opt[:decode_typemap] || nil
|
77
|
+
@allow_unqualified_element = opt[:allow_unqualified_element] || false
|
78
|
+
end
|
79
|
+
|
80
|
+
def charset
|
81
|
+
@parser.charset
|
82
|
+
end
|
83
|
+
|
84
|
+
def parse(string_or_readable)
|
85
|
+
@parsestack = []
|
86
|
+
@lastnode = nil
|
87
|
+
|
88
|
+
@handlers.each do |uri, handler|
|
89
|
+
handler.decode_prologue
|
90
|
+
end
|
91
|
+
|
92
|
+
@parser.do_parse(string_or_readable)
|
93
|
+
|
94
|
+
unless @parsestack.empty?
|
95
|
+
raise FormatDecodeError.new("Unbalanced tag in XML.")
|
96
|
+
end
|
97
|
+
|
98
|
+
@handlers.each do |uri, handler|
|
99
|
+
handler.decode_epilogue
|
100
|
+
end
|
101
|
+
|
102
|
+
@lastnode
|
103
|
+
end
|
104
|
+
|
105
|
+
def start_element(name, attrs)
|
106
|
+
lastframe = @parsestack.last
|
107
|
+
ns = parent = parent_encodingstyle = nil
|
108
|
+
if lastframe
|
109
|
+
ns = lastframe.ns.clone_ns
|
110
|
+
parent = lastframe.node
|
111
|
+
parent_encodingstyle = lastframe.encodingstyle
|
112
|
+
else
|
113
|
+
ns = XSD::NS.new
|
114
|
+
parent = ParseFrame::NodeContainer.new(nil)
|
115
|
+
parent_encodingstyle = nil
|
116
|
+
end
|
117
|
+
|
118
|
+
attrs = XSD::XMLParser.filter_ns(ns, attrs)
|
119
|
+
encodingstyle = find_encodingstyle(ns, attrs)
|
120
|
+
|
121
|
+
# Children's encodingstyle is derived from its parent.
|
122
|
+
if encodingstyle.nil?
|
123
|
+
if parent.node.is_a?(SOAPHeader)
|
124
|
+
encodingstyle = LiteralNamespace
|
125
|
+
else
|
126
|
+
encodingstyle = parent_encodingstyle || @default_encodingstyle
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
node = decode_tag(ns, name, attrs, parent, encodingstyle)
|
131
|
+
|
132
|
+
@parsestack << ParseFrame.new(ns, name, node, encodingstyle)
|
133
|
+
end
|
134
|
+
|
135
|
+
def characters(text)
|
136
|
+
lastframe = @parsestack.last
|
137
|
+
if lastframe
|
138
|
+
# Need not to be cloned because character does not have attr.
|
139
|
+
decode_text(lastframe.ns, text, lastframe.encodingstyle)
|
140
|
+
else
|
141
|
+
# Ignore Text outside of SOAP Envelope.
|
142
|
+
p text if $DEBUG
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def end_element(name)
|
147
|
+
lastframe = @parsestack.pop
|
148
|
+
unless name == lastframe.name
|
149
|
+
raise UnexpectedElementError.new("Closing element name '#{ name }' does not match with opening element '#{ lastframe.name }'.")
|
150
|
+
end
|
151
|
+
decode_tag_end(lastframe.ns, lastframe.node, lastframe.encodingstyle)
|
152
|
+
@lastnode = lastframe.node.node
|
153
|
+
end
|
154
|
+
|
155
|
+
private
|
156
|
+
|
157
|
+
def find_encodingstyle(ns, attrs)
|
158
|
+
attrs.each do |key, value|
|
159
|
+
if (ns.compare(@envelopenamespace, AttrEncodingStyle, key))
|
160
|
+
return value
|
161
|
+
end
|
162
|
+
end
|
163
|
+
nil
|
164
|
+
end
|
165
|
+
|
166
|
+
def decode_tag(ns, name, attrs, parent, encodingstyle)
|
167
|
+
ele = ns.parse(name)
|
168
|
+
|
169
|
+
# Envelope based parsing.
|
170
|
+
if ((ele.namespace == @envelopenamespace) ||
|
171
|
+
(@allow_unqualified_element && ele.namespace.nil?))
|
172
|
+
o = decode_soap_envelope(ns, ele, attrs, parent)
|
173
|
+
return o if o
|
174
|
+
end
|
175
|
+
|
176
|
+
# Encoding based parsing.
|
177
|
+
handler = find_handler(encodingstyle)
|
178
|
+
if handler
|
179
|
+
return handler.decode_tag(ns, ele, attrs, parent)
|
180
|
+
else
|
181
|
+
raise FormatDecodeError.new("Unknown encodingStyle: #{ encodingstyle }.")
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
def decode_tag_end(ns, node, encodingstyle)
|
186
|
+
return unless encodingstyle
|
187
|
+
|
188
|
+
handler = find_handler(encodingstyle)
|
189
|
+
if handler
|
190
|
+
return handler.decode_tag_end(ns, node)
|
191
|
+
else
|
192
|
+
raise FormatDecodeError.new("Unknown encodingStyle: #{ encodingstyle }.")
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
def decode_text(ns, text, encodingstyle)
|
197
|
+
handler = find_handler(encodingstyle)
|
198
|
+
|
199
|
+
if handler
|
200
|
+
handler.decode_text(ns, text)
|
201
|
+
else
|
202
|
+
# How should I do?
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
def decode_soap_envelope(ns, ele, attrs, parent)
|
207
|
+
o = nil
|
208
|
+
if ele.name == EleEnvelope
|
209
|
+
o = SOAPEnvelope.new
|
210
|
+
if ext = @opt[:external_content]
|
211
|
+
ext.each do |k, v|
|
212
|
+
o.external_content[k] = v
|
213
|
+
end
|
214
|
+
end
|
215
|
+
elsif ele.name == EleHeader
|
216
|
+
unless parent.node.is_a?(SOAPEnvelope)
|
217
|
+
raise FormatDecodeError.new("Header should be a child of Envelope.")
|
218
|
+
end
|
219
|
+
o = SOAPHeader.new
|
220
|
+
parent.node.header = o
|
221
|
+
elsif ele.name == EleBody
|
222
|
+
unless parent.node.is_a?(SOAPEnvelope)
|
223
|
+
raise FormatDecodeError.new("Body should be a child of Envelope.")
|
224
|
+
end
|
225
|
+
o = SOAPBody.new
|
226
|
+
parent.node.body = o
|
227
|
+
elsif ele.name == EleFault
|
228
|
+
unless parent.node.is_a?(SOAPBody)
|
229
|
+
raise FormatDecodeError.new("Fault should be a child of Body.")
|
230
|
+
end
|
231
|
+
o = SOAPFault.new
|
232
|
+
parent.node.fault = o
|
233
|
+
end
|
234
|
+
o
|
235
|
+
end
|
236
|
+
|
237
|
+
def find_handler(encodingstyle)
|
238
|
+
unless @handlers.key?(encodingstyle)
|
239
|
+
handler_factory = SOAP::EncodingStyle::Handler.handler(encodingstyle) ||
|
240
|
+
SOAP::EncodingStyle::Handler.handler(EncodingNamespace)
|
241
|
+
handler = handler_factory.new(@parser.charset)
|
242
|
+
handler.decode_typemap = @decode_typemap
|
243
|
+
handler.decode_prologue
|
244
|
+
@handlers[encodingstyle] = handler
|
245
|
+
end
|
246
|
+
@handlers[encodingstyle]
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
|
251
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# SOAP4R - marshal/unmarshal interface.
|
2
|
+
# Copyright (C) 2000, 2001, 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
3
|
+
|
4
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
5
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
6
|
+
# either the dual license version in 2003, or any later version.
|
7
|
+
|
8
|
+
|
9
|
+
require 'xsd/datatypes'
|
10
|
+
require 'soap/soap'
|
11
|
+
require 'soap/element'
|
12
|
+
require 'soap/parser'
|
13
|
+
require 'soap/generator'
|
14
|
+
require 'soap/encodingstyle/soapHandler'
|
15
|
+
require 'soap/encodingstyle/literalHandler'
|
16
|
+
require 'soap/encodingstyle/aspDotNetHandler'
|
17
|
+
|
18
|
+
|
19
|
+
module SOAP
|
20
|
+
|
21
|
+
|
22
|
+
module Processor
|
23
|
+
@@default_parser_option = {}
|
24
|
+
|
25
|
+
class << self
|
26
|
+
public
|
27
|
+
|
28
|
+
def marshal(env, opt = {}, io = nil)
|
29
|
+
generator = create_generator(opt)
|
30
|
+
marshalled_str = generator.generate(env, io)
|
31
|
+
unless env.external_content.empty?
|
32
|
+
opt[:external_content] = env.external_content
|
33
|
+
end
|
34
|
+
marshalled_str
|
35
|
+
end
|
36
|
+
|
37
|
+
def unmarshal(stream, opt = {})
|
38
|
+
parser = create_parser(opt)
|
39
|
+
parser.parse(stream)
|
40
|
+
end
|
41
|
+
|
42
|
+
def default_parser_option=(rhs)
|
43
|
+
@@default_parser_option = rhs
|
44
|
+
end
|
45
|
+
|
46
|
+
def default_parser_option
|
47
|
+
@@default_parser_option
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def create_generator(opt)
|
53
|
+
SOAPGenerator.new(opt)
|
54
|
+
end
|
55
|
+
|
56
|
+
def create_parser(opt)
|
57
|
+
if opt.empty?
|
58
|
+
opt = @@default_parser_option
|
59
|
+
end
|
60
|
+
::SOAP::Parser.new(opt)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
end
|
@@ -0,0 +1,333 @@
|
|
1
|
+
# soap/property.rb: SOAP4R - Property implementation.
|
2
|
+
# Copyright (C) 2003 NAKAMURA, Hiroshi <nahi@ruby-lang.org>.
|
3
|
+
|
4
|
+
# This program is copyrighted free software by NAKAMURA, Hiroshi. You can
|
5
|
+
# redistribute it and/or modify it under the same terms of Ruby's license;
|
6
|
+
# either the dual license version in 2003, or any later version.
|
7
|
+
|
8
|
+
|
9
|
+
module SOAP
|
10
|
+
|
11
|
+
|
12
|
+
# Property stream format:
|
13
|
+
#
|
14
|
+
# line separator is \r?\n. 1 line per a property.
|
15
|
+
# line which begins with '#' is a comment line. empty line is ignored, too.
|
16
|
+
# key/value separator is ':' or '='.
|
17
|
+
# '\' as escape character. but line separator cannot be escaped.
|
18
|
+
# \s at the head/tail of key/value are trimmed.
|
19
|
+
#
|
20
|
+
# '[' + key + ']' indicates property section. for example,
|
21
|
+
#
|
22
|
+
# [aaa.bbb]
|
23
|
+
# ccc = ddd
|
24
|
+
# eee.fff = ggg
|
25
|
+
# []
|
26
|
+
# aaa.hhh = iii
|
27
|
+
#
|
28
|
+
# is the same as;
|
29
|
+
#
|
30
|
+
# aaa.bbb.ccc = ddd
|
31
|
+
# aaa.bbb.eee.fff = ggg
|
32
|
+
# aaa.hhh = iii
|
33
|
+
#
|
34
|
+
class Property
|
35
|
+
FrozenError = (RUBY_VERSION >= "1.9.0") ? RuntimeError : TypeError
|
36
|
+
|
37
|
+
include Enumerable
|
38
|
+
|
39
|
+
module Util
|
40
|
+
def const_from_name(fqname)
|
41
|
+
fqname.split("::").inject(Kernel) { |klass, name| klass.const_get(name) }
|
42
|
+
end
|
43
|
+
module_function :const_from_name
|
44
|
+
|
45
|
+
def require_from_name(fqname)
|
46
|
+
require File.join(fqname.split("::").collect { |ele| ele.downcase })
|
47
|
+
end
|
48
|
+
module_function :require_from_name
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.load(stream)
|
52
|
+
new.load(stream)
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.loadproperty(propname)
|
56
|
+
new.loadproperty(propname)
|
57
|
+
end
|
58
|
+
|
59
|
+
def initialize
|
60
|
+
@store = Hash.new
|
61
|
+
@hook = Hash.new
|
62
|
+
@self_hook = Array.new
|
63
|
+
@locked = false
|
64
|
+
end
|
65
|
+
|
66
|
+
KEY_REGSRC = '([^=:\\\\]*(?:\\\\.[^=:\\\\]*)*)'
|
67
|
+
DEF_REGSRC = '\\s*' + KEY_REGSRC + '\\s*[=:]\\s*(.*)'
|
68
|
+
COMMENT_REGEXP = Regexp.new('^(?:#.*|)$')
|
69
|
+
CATDEF_REGEXP = Regexp.new("^\\[\\s*#{KEY_REGSRC}\\s*\\]$")
|
70
|
+
LINE_REGEXP = Regexp.new("^#{DEF_REGSRC}$")
|
71
|
+
def load(stream)
|
72
|
+
key_prefix = ""
|
73
|
+
stream.each_with_index do |line, lineno|
|
74
|
+
line.sub!(/\r?\n\z/, '')
|
75
|
+
case line
|
76
|
+
when COMMENT_REGEXP
|
77
|
+
next
|
78
|
+
when CATDEF_REGEXP
|
79
|
+
key_prefix = $1.strip
|
80
|
+
when LINE_REGEXP
|
81
|
+
key, value = $1.strip, $2.strip
|
82
|
+
key = "#{key_prefix}.#{key}" unless key_prefix.empty?
|
83
|
+
key, value = loadstr(key), loadstr(value)
|
84
|
+
self[key] = value
|
85
|
+
else
|
86
|
+
raise TypeError.new(
|
87
|
+
"property format error at line #{lineno + 1}: `#{line}'")
|
88
|
+
end
|
89
|
+
end
|
90
|
+
self
|
91
|
+
end
|
92
|
+
|
93
|
+
# find property from $:.
|
94
|
+
def loadproperty(propname)
|
95
|
+
return loadpropertyfile(propname) if File.file?(propname)
|
96
|
+
$:.each do |path|
|
97
|
+
if File.file?(file = File.join(path, propname))
|
98
|
+
return loadpropertyfile(file)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
nil
|
102
|
+
end
|
103
|
+
|
104
|
+
# name: a Symbol, String or an Array
|
105
|
+
def [](name)
|
106
|
+
referent(name_to_a(name))
|
107
|
+
end
|
108
|
+
|
109
|
+
# name: a Symbol, String or an Array
|
110
|
+
# value: an Object
|
111
|
+
def []=(name, value)
|
112
|
+
name_pair = name_to_a(name).freeze
|
113
|
+
hooks = assign(name_pair, value)
|
114
|
+
hooks.each do |hook|
|
115
|
+
hook.call(name_pair, value)
|
116
|
+
end
|
117
|
+
value
|
118
|
+
end
|
119
|
+
|
120
|
+
# value: an Object
|
121
|
+
# key is generated by property
|
122
|
+
def <<(value)
|
123
|
+
self[generate_new_key] = value
|
124
|
+
end
|
125
|
+
|
126
|
+
# name: a Symbol, String or an Array; nil means hook to the root
|
127
|
+
# cascade: true/false; for cascading hook of sub key
|
128
|
+
# hook: block which will be called with 2 args, name and value
|
129
|
+
def add_hook(name = nil, cascade = false, &hook)
|
130
|
+
if name == nil or name == true or name == false
|
131
|
+
cascade = name
|
132
|
+
assign_self_hook(cascade, &hook)
|
133
|
+
else
|
134
|
+
assign_hook(name_to_a(name), cascade, &hook)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def each
|
139
|
+
@store.each do |key, value|
|
140
|
+
yield(key, value)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def empty?
|
145
|
+
@store.empty?
|
146
|
+
end
|
147
|
+
|
148
|
+
def keys
|
149
|
+
@store.keys
|
150
|
+
end
|
151
|
+
|
152
|
+
def values
|
153
|
+
@store.values
|
154
|
+
end
|
155
|
+
|
156
|
+
def lock(cascade = false)
|
157
|
+
if cascade
|
158
|
+
each_key do |key|
|
159
|
+
key.lock(cascade)
|
160
|
+
end
|
161
|
+
end
|
162
|
+
@locked = true
|
163
|
+
self
|
164
|
+
end
|
165
|
+
|
166
|
+
def unlock(cascade = false)
|
167
|
+
@locked = false
|
168
|
+
if cascade
|
169
|
+
each_key do |key|
|
170
|
+
key.unlock(cascade)
|
171
|
+
end
|
172
|
+
end
|
173
|
+
self
|
174
|
+
end
|
175
|
+
|
176
|
+
def locked?
|
177
|
+
@locked
|
178
|
+
end
|
179
|
+
|
180
|
+
protected
|
181
|
+
|
182
|
+
def deref_key(key)
|
183
|
+
check_lock(key)
|
184
|
+
ref = @store[key] ||= self.class.new
|
185
|
+
unless propkey?(ref)
|
186
|
+
raise ArgumentError.new("key `#{key}' already defined as a value")
|
187
|
+
end
|
188
|
+
ref
|
189
|
+
end
|
190
|
+
|
191
|
+
def local_referent(key)
|
192
|
+
check_lock(key)
|
193
|
+
if propkey?(@store[key]) and @store[key].locked?
|
194
|
+
raise FrozenError.new("cannot split any key from locked property")
|
195
|
+
end
|
196
|
+
@store[key]
|
197
|
+
end
|
198
|
+
|
199
|
+
def local_assign(key, value)
|
200
|
+
check_lock(key)
|
201
|
+
if @locked
|
202
|
+
if propkey?(value)
|
203
|
+
raise FrozenError.new("cannot add any key to locked property")
|
204
|
+
elsif propkey?(@store[key])
|
205
|
+
raise FrozenError.new("cannot override any key in locked property")
|
206
|
+
end
|
207
|
+
end
|
208
|
+
@store[key] = value
|
209
|
+
end
|
210
|
+
|
211
|
+
def local_hook(key, direct)
|
212
|
+
hooks = []
|
213
|
+
(@self_hook + (@hook[key] || NO_HOOK)).each do |hook, cascade|
|
214
|
+
hooks << hook if direct or cascade
|
215
|
+
end
|
216
|
+
hooks
|
217
|
+
end
|
218
|
+
|
219
|
+
def local_assign_hook(key, cascade, &hook)
|
220
|
+
check_lock(key)
|
221
|
+
@store[key] ||= nil
|
222
|
+
(@hook[key] ||= []) << [hook, cascade]
|
223
|
+
end
|
224
|
+
|
225
|
+
private
|
226
|
+
|
227
|
+
NO_HOOK = [].freeze
|
228
|
+
|
229
|
+
def referent(ary)
|
230
|
+
ary[0..-2].inject(self) { |ref, name|
|
231
|
+
ref.deref_key(to_key(name))
|
232
|
+
}.local_referent(to_key(ary.last))
|
233
|
+
end
|
234
|
+
|
235
|
+
def assign(ary, value)
|
236
|
+
ref = self
|
237
|
+
hook = NO_HOOK
|
238
|
+
ary[0..-2].each do |name|
|
239
|
+
key = to_key(name)
|
240
|
+
hook += ref.local_hook(key, false)
|
241
|
+
ref = ref.deref_key(key)
|
242
|
+
end
|
243
|
+
last_key = to_key(ary.last)
|
244
|
+
ref.local_assign(last_key, value)
|
245
|
+
hook + ref.local_hook(last_key, true)
|
246
|
+
end
|
247
|
+
|
248
|
+
def assign_hook(ary, cascade, &hook)
|
249
|
+
ary[0..-2].inject(self) { |ref, name|
|
250
|
+
ref.deref_key(to_key(name))
|
251
|
+
}.local_assign_hook(to_key(ary.last), cascade, &hook)
|
252
|
+
end
|
253
|
+
|
254
|
+
def assign_self_hook(cascade, &hook)
|
255
|
+
check_lock(nil)
|
256
|
+
@self_hook << [hook, cascade]
|
257
|
+
end
|
258
|
+
|
259
|
+
def each_key
|
260
|
+
self.each do |key, value|
|
261
|
+
if propkey?(value)
|
262
|
+
yield(value)
|
263
|
+
end
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
def check_lock(key)
|
268
|
+
if @locked and (key.nil? or !@store.key?(key))
|
269
|
+
raise FrozenError.new("cannot add any key to locked property")
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
def propkey?(value)
|
274
|
+
value.is_a?(::SOAP::Property)
|
275
|
+
end
|
276
|
+
|
277
|
+
def name_to_a(name)
|
278
|
+
case name
|
279
|
+
when Symbol
|
280
|
+
[name]
|
281
|
+
when String
|
282
|
+
name.scan(/[^.\\]+(?:\\.[^.\\])*/) # split with unescaped '.'
|
283
|
+
when Array
|
284
|
+
name
|
285
|
+
else
|
286
|
+
raise ArgumentError.new("Unknown name #{name}(#{name.class})")
|
287
|
+
end
|
288
|
+
end
|
289
|
+
|
290
|
+
def to_key(name)
|
291
|
+
name.to_s.downcase
|
292
|
+
end
|
293
|
+
|
294
|
+
def generate_new_key
|
295
|
+
if @store.empty?
|
296
|
+
"0"
|
297
|
+
else
|
298
|
+
(key_max + 1).to_s
|
299
|
+
end
|
300
|
+
end
|
301
|
+
|
302
|
+
def key_max
|
303
|
+
(@store.keys.max { |l, r| l.to_s.to_i <=> r.to_s.to_i }).to_s.to_i
|
304
|
+
end
|
305
|
+
|
306
|
+
def loadpropertyfile(file)
|
307
|
+
puts "find property at #{file}" if $DEBUG
|
308
|
+
File.open(file) do |f|
|
309
|
+
load(f)
|
310
|
+
end
|
311
|
+
end
|
312
|
+
|
313
|
+
def loadstr(str)
|
314
|
+
str.gsub(/\\./) { |c| eval("\"#{c}\"") }
|
315
|
+
end
|
316
|
+
end
|
317
|
+
|
318
|
+
|
319
|
+
end
|
320
|
+
|
321
|
+
|
322
|
+
# for ruby/1.6.
|
323
|
+
unless Enumerable.instance_methods.include?('inject')
|
324
|
+
module Enumerable
|
325
|
+
def inject(init)
|
326
|
+
result = init
|
327
|
+
each do |item|
|
328
|
+
result = yield(result, item)
|
329
|
+
end
|
330
|
+
result
|
331
|
+
end
|
332
|
+
end
|
333
|
+
end
|