mumboe-soap4r 1.5.8.2

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.
Files changed (443) hide show
  1. data/bin/wsdl2ruby.rb +137 -0
  2. data/bin/xsd2ruby.rb +90 -0
  3. data/lib/soap/attachment.rb +108 -0
  4. data/lib/soap/attrproxy.rb +34 -0
  5. data/lib/soap/baseData.rb +1094 -0
  6. data/lib/soap/element.rb +277 -0
  7. data/lib/soap/encodingstyle/aspDotNetHandler.rb +207 -0
  8. data/lib/soap/encodingstyle/handler.rb +120 -0
  9. data/lib/soap/encodingstyle/literalHandler.rb +195 -0
  10. data/lib/soap/encodingstyle/soapHandler.rb +559 -0
  11. data/lib/soap/filter.rb +13 -0
  12. data/lib/soap/filter/filterchain.rb +51 -0
  13. data/lib/soap/filter/handler.rb +31 -0
  14. data/lib/soap/filter/streamhandler.rb +29 -0
  15. data/lib/soap/generator.rb +299 -0
  16. data/lib/soap/header/handler.rb +61 -0
  17. data/lib/soap/header/handlerset.rb +70 -0
  18. data/lib/soap/header/mappinghandler.rb +47 -0
  19. data/lib/soap/header/simplehandler.rb +44 -0
  20. data/lib/soap/httpconfigloader.rb +139 -0
  21. data/lib/soap/mapping.rb +12 -0
  22. data/lib/soap/mapping/encodedregistry.rb +537 -0
  23. data/lib/soap/mapping/factory.rb +388 -0
  24. data/lib/soap/mapping/literalregistry.rb +391 -0
  25. data/lib/soap/mapping/mapping.rb +577 -0
  26. data/lib/soap/mapping/registry.rb +295 -0
  27. data/lib/soap/mapping/rubytypeFactory.rb +446 -0
  28. data/lib/soap/mapping/schemadefinition.rb +170 -0
  29. data/lib/soap/mapping/typeMap.rb +106 -0
  30. data/lib/soap/mapping/wsdlencodedregistry.rb +211 -0
  31. data/lib/soap/mapping/wsdlliteralregistry.rb +248 -0
  32. data/lib/soap/marshal.rb +59 -0
  33. data/lib/soap/mimemessage.rb +241 -0
  34. data/lib/soap/nestedexception.rb +42 -0
  35. data/lib/soap/netHttpClient.rb +241 -0
  36. data/lib/soap/ns.rb +34 -0
  37. data/lib/soap/parser.rb +252 -0
  38. data/lib/soap/processor.rb +66 -0
  39. data/lib/soap/property.rb +333 -0
  40. data/lib/soap/proxy.rb +14 -0
  41. data/lib/soap/rpc/cgistub.rb +247 -0
  42. data/lib/soap/rpc/driver.rb +221 -0
  43. data/lib/soap/rpc/element.rb +374 -0
  44. data/lib/soap/rpc/element.rb.orig +374 -0
  45. data/lib/soap/rpc/httpserver.rb +142 -0
  46. data/lib/soap/rpc/methodDef.rb +68 -0
  47. data/lib/soap/rpc/proxy.rb +572 -0
  48. data/lib/soap/rpc/router.rb +662 -0
  49. data/lib/soap/rpc/rpc.rb +25 -0
  50. data/lib/soap/rpc/soaplet.rb +200 -0
  51. data/lib/soap/rpc/standaloneServer.rb +43 -0
  52. data/lib/soap/soap.rb +151 -0
  53. data/lib/soap/streamHandler.rb +301 -0
  54. data/lib/soap/wsdlDriver.rb +164 -0
  55. data/lib/wsdl/binding.rb +65 -0
  56. data/lib/wsdl/data.rb +64 -0
  57. data/lib/wsdl/definitions.rb +236 -0
  58. data/lib/wsdl/documentation.rb +32 -0
  59. data/lib/wsdl/import.rb +80 -0
  60. data/lib/wsdl/importer.rb +38 -0
  61. data/lib/wsdl/info.rb +50 -0
  62. data/lib/wsdl/message.rb +54 -0
  63. data/lib/wsdl/operation.rb +151 -0
  64. data/lib/wsdl/operationBinding.rb +240 -0
  65. data/lib/wsdl/param.rb +93 -0
  66. data/lib/wsdl/parser.rb +164 -0
  67. data/lib/wsdl/part.rb +52 -0
  68. data/lib/wsdl/port.rb +66 -0
  69. data/lib/wsdl/portType.rb +75 -0
  70. data/lib/wsdl/service.rb +61 -0
  71. data/lib/wsdl/soap/address.rb +40 -0
  72. data/lib/wsdl/soap/binding.rb +49 -0
  73. data/lib/wsdl/soap/body.rb +58 -0
  74. data/lib/wsdl/soap/cgiStubCreator.rb +92 -0
  75. data/lib/wsdl/soap/classDefCreator.rb +433 -0
  76. data/lib/wsdl/soap/classDefCreatorSupport.rb +240 -0
  77. data/lib/wsdl/soap/classNameCreator.rb +54 -0
  78. data/lib/wsdl/soap/clientSkeltonCreator.rb +104 -0
  79. data/lib/wsdl/soap/complexType.rb +173 -0
  80. data/lib/wsdl/soap/data.rb +42 -0
  81. data/lib/wsdl/soap/definitions.rb +200 -0
  82. data/lib/wsdl/soap/driverCreator.rb +118 -0
  83. data/lib/wsdl/soap/element.rb +33 -0
  84. data/lib/wsdl/soap/encodedMappingRegistryCreator.rb +73 -0
  85. data/lib/wsdl/soap/fault.rb +56 -0
  86. data/lib/wsdl/soap/header.rb +86 -0
  87. data/lib/wsdl/soap/headerfault.rb +56 -0
  88. data/lib/wsdl/soap/literalMappingRegistryCreator.rb +115 -0
  89. data/lib/wsdl/soap/mappingRegistryCreator.rb +58 -0
  90. data/lib/wsdl/soap/mappingRegistryCreatorSupport.rb +376 -0
  91. data/lib/wsdl/soap/methodDefCreator.rb +199 -0
  92. data/lib/wsdl/soap/operation.rb +112 -0
  93. data/lib/wsdl/soap/servantSkeltonCreator.rb +89 -0
  94. data/lib/wsdl/soap/servletStubCreator.rb +104 -0
  95. data/lib/wsdl/soap/standaloneServerStubCreator.rb +100 -0
  96. data/lib/wsdl/soap/wsdl2ruby.rb +217 -0
  97. data/lib/wsdl/types.rb +44 -0
  98. data/lib/wsdl/wsdl.rb +24 -0
  99. data/lib/wsdl/xmlSchema/all.rb +24 -0
  100. data/lib/wsdl/xmlSchema/annotation.rb +34 -0
  101. data/lib/wsdl/xmlSchema/any.rb +61 -0
  102. data/lib/wsdl/xmlSchema/anyAttribute.rb +48 -0
  103. data/lib/wsdl/xmlSchema/attribute.rb +104 -0
  104. data/lib/wsdl/xmlSchema/attributeGroup.rb +68 -0
  105. data/lib/wsdl/xmlSchema/choice.rb +58 -0
  106. data/lib/wsdl/xmlSchema/complexContent.rb +97 -0
  107. data/lib/wsdl/xmlSchema/complexExtension.rb +119 -0
  108. data/lib/wsdl/xmlSchema/complexRestriction.rb +104 -0
  109. data/lib/wsdl/xmlSchema/complexType.rb +193 -0
  110. data/lib/wsdl/xmlSchema/content.rb +95 -0
  111. data/lib/wsdl/xmlSchema/data.rb +116 -0
  112. data/lib/wsdl/xmlSchema/element.rb +153 -0
  113. data/lib/wsdl/xmlSchema/enumeration.rb +36 -0
  114. data/lib/wsdl/xmlSchema/fractiondigits.rb +37 -0
  115. data/lib/wsdl/xmlSchema/group.rb +100 -0
  116. data/lib/wsdl/xmlSchema/import.rb +53 -0
  117. data/lib/wsdl/xmlSchema/importHandler.rb +45 -0
  118. data/lib/wsdl/xmlSchema/importer.rb +102 -0
  119. data/lib/wsdl/xmlSchema/include.rb +48 -0
  120. data/lib/wsdl/xmlSchema/length.rb +37 -0
  121. data/lib/wsdl/xmlSchema/list.rb +48 -0
  122. data/lib/wsdl/xmlSchema/maxexclusive.rb +37 -0
  123. data/lib/wsdl/xmlSchema/maxinclusive.rb +37 -0
  124. data/lib/wsdl/xmlSchema/maxlength.rb +37 -0
  125. data/lib/wsdl/xmlSchema/minexclusive.rb +37 -0
  126. data/lib/wsdl/xmlSchema/mininclusive.rb +37 -0
  127. data/lib/wsdl/xmlSchema/minlength.rb +37 -0
  128. data/lib/wsdl/xmlSchema/parser.rb +167 -0
  129. data/lib/wsdl/xmlSchema/pattern.rb +36 -0
  130. data/lib/wsdl/xmlSchema/ref.rb +33 -0
  131. data/lib/wsdl/xmlSchema/schema.rb +178 -0
  132. data/lib/wsdl/xmlSchema/sequence.rb +54 -0
  133. data/lib/wsdl/xmlSchema/simpleContent.rb +69 -0
  134. data/lib/wsdl/xmlSchema/simpleExtension.rb +62 -0
  135. data/lib/wsdl/xmlSchema/simpleRestriction.rb +132 -0
  136. data/lib/wsdl/xmlSchema/simpleType.rb +87 -0
  137. data/lib/wsdl/xmlSchema/totaldigits.rb +37 -0
  138. data/lib/wsdl/xmlSchema/union.rb +35 -0
  139. data/lib/wsdl/xmlSchema/unique.rb +34 -0
  140. data/lib/wsdl/xmlSchema/whitespace.rb +37 -0
  141. data/lib/wsdl/xmlSchema/xsd2ruby.rb +174 -0
  142. data/lib/xsd/charset.rb +188 -0
  143. data/lib/xsd/codegen.rb +12 -0
  144. data/lib/xsd/codegen/classdef.rb +208 -0
  145. data/lib/xsd/codegen/commentdef.rb +34 -0
  146. data/lib/xsd/codegen/gensupport.rb +273 -0
  147. data/lib/xsd/codegen/methoddef.rb +70 -0
  148. data/lib/xsd/codegen/moduledef.rb +208 -0
  149. data/lib/xsd/datatypes.rb +1466 -0
  150. data/lib/xsd/datatypes1999.rb +20 -0
  151. data/lib/xsd/iconvcharset.rb +33 -0
  152. data/lib/xsd/mapping.rb +68 -0
  153. data/lib/xsd/namedelements.rb +132 -0
  154. data/lib/xsd/ns.rb +182 -0
  155. data/lib/xsd/qname.rb +79 -0
  156. data/lib/xsd/xmlparser.rb +76 -0
  157. data/lib/xsd/xmlparser.rb.orig +76 -0
  158. data/lib/xsd/xmlparser/libxmlparser.rb +119 -0
  159. data/lib/xsd/xmlparser/parser.rb +100 -0
  160. data/lib/xsd/xmlparser/rexmlparser.rb +58 -0
  161. data/lib/xsd/xmlparser/xmlparser.rb +50 -0
  162. data/lib/xsd/xmlparser/xmlscanner.rb +149 -0
  163. data/test/16runner.rb +68 -0
  164. data/test/interopR2/README.txt +2 -0
  165. data/test/interopR2/SOAPBuildersInterop_R2.wsdl +461 -0
  166. data/test/interopR2/SOAPBuildersInterop_R2GrB.wsdl +19 -0
  167. data/test/interopR2/base.rb +288 -0
  168. data/test/interopR2/client.NetRemoting.rb +17 -0
  169. data/test/interopR2/client.rb +1234 -0
  170. data/test/interopR2/client4S4C.rb +15 -0
  171. data/test/interopR2/client4S4C2.rb +14 -0
  172. data/test/interopR2/clientASP.NET.rb +17 -0
  173. data/test/interopR2/clientApacheAxis.rb +16 -0
  174. data/test/interopR2/clientApacheSOAP.rb +17 -0
  175. data/test/interopR2/clientBEAWebLogic.rb +17 -0
  176. data/test/interopR2/clientBase.rb +1967 -0
  177. data/test/interopR2/clientCapeConnect.rb +18 -0
  178. data/test/interopR2/clientDelphi.rb +19 -0
  179. data/test/interopR2/clientEasySoap.rb +14 -0
  180. data/test/interopR2/clientFrontier.rb +25 -0
  181. data/test/interopR2/clientGLUE.rb +32 -0
  182. data/test/interopR2/clientHP.rb +13 -0
  183. data/test/interopR2/clientJAX-RPC.rb +19 -0
  184. data/test/interopR2/clientJSOAP.rb +14 -0
  185. data/test/interopR2/clientKafkaXSLT.rb +15 -0
  186. data/test/interopR2/clientMSSOAPToolkit2.0.rb +17 -0
  187. data/test/interopR2/clientMSSOAPToolkit3.0.rb +17 -0
  188. data/test/interopR2/clientNuSOAP.rb +19 -0
  189. data/test/interopR2/clientNuWave.rb +15 -0
  190. data/test/interopR2/clientOpenLink.rb +15 -0
  191. data/test/interopR2/clientOracle.rb +15 -0
  192. data/test/interopR2/clientPEAR.rb +18 -0
  193. data/test/interopR2/clientPhalanx.rb +18 -0
  194. data/test/interopR2/clientSIMACE.rb +18 -0
  195. data/test/interopR2/clientSOAP4R.rb +18 -0
  196. data/test/interopR2/clientSOAP__Lite.rb +14 -0
  197. data/test/interopR2/clientSQLData.rb +18 -0
  198. data/test/interopR2/clientSilverStream.rb +17 -0
  199. data/test/interopR2/clientSpray2001.rb +17 -0
  200. data/test/interopR2/clientSun.rb +19 -0
  201. data/test/interopR2/clientVWOpentalkSoap.rb +19 -0
  202. data/test/interopR2/clientWASP.rb +19 -0
  203. data/test/interopR2/clientWASPC.rb +18 -0
  204. data/test/interopR2/clientWebMethods.rb +15 -0
  205. data/test/interopR2/clientWhiteMesa.rb +28 -0
  206. data/test/interopR2/clientWingfoot.rb +15 -0
  207. data/test/interopR2/clientXMLBus.rb +19 -0
  208. data/test/interopR2/clientXMLRPC-EPI.rb +17 -0
  209. data/test/interopR2/clientXSOAP.rb +14 -0
  210. data/test/interopR2/clientZSI.rb +19 -0
  211. data/test/interopR2/clienteSOAP.rb +18 -0
  212. data/test/interopR2/clientgSOAP.rb +18 -0
  213. data/test/interopR2/clientkSOAP.rb +17 -0
  214. data/test/interopR2/iSimonReg.rb +112 -0
  215. data/test/interopR2/interopResultBase.rb +114 -0
  216. data/test/interopR2/interopService.rb +247 -0
  217. data/test/interopR2/rwikiInteropService.rb +105 -0
  218. data/test/interopR2/server.cgi +270 -0
  219. data/test/interopR2/server.rb +275 -0
  220. data/test/interopR2/simonReg.rb +123 -0
  221. data/test/interopR2/test.sh +49 -0
  222. data/test/interopR4/client.rb +112 -0
  223. data/test/results +4810 -0
  224. data/test/runner.rb +7 -0
  225. data/test/sm11/classDef.rb +156 -0
  226. data/test/sm11/client.rb +542 -0
  227. data/test/sm11/driver.rb +183 -0
  228. data/test/sm11/servant.rb +1067 -0
  229. data/test/sm11/server.rb +25 -0
  230. data/test/soap/asp.net/hello.wsdl +96 -0
  231. data/test/soap/asp.net/test_aspdotnet.rb +123 -0
  232. data/test/soap/auth/htdigest +2 -0
  233. data/test/soap/auth/htpasswd +2 -0
  234. data/test/soap/auth/test_basic.rb +117 -0
  235. data/test/soap/auth/test_digest.rb +118 -0
  236. data/test/soap/calc/calc.rb +17 -0
  237. data/test/soap/calc/calc2.rb +29 -0
  238. data/test/soap/calc/server.cgi +13 -0
  239. data/test/soap/calc/server.rb +17 -0
  240. data/test/soap/calc/server2.rb +20 -0
  241. data/test/soap/calc/test_calc.rb +51 -0
  242. data/test/soap/calc/test_calc2.rb +55 -0
  243. data/test/soap/calc/test_calc_cgi.rb +71 -0
  244. data/test/soap/case/test_mapping.rb +57 -0
  245. data/test/soap/fault/test_customfault.rb +60 -0
  246. data/test/soap/fault/test_fault.rb +46 -0
  247. data/test/soap/fault/test_soaparray.rb +35 -0
  248. data/test/soap/filter/test_filter.rb +146 -0
  249. data/test/soap/header/server.cgi +119 -0
  250. data/test/soap/header/session.pstoredb +0 -0
  251. data/test/soap/header/test_authheader.rb +240 -0
  252. data/test/soap/header/test_authheader_cgi.rb +121 -0
  253. data/test/soap/header/test_simplehandler.rb +116 -0
  254. data/test/soap/helloworld/hw_s.rb +16 -0
  255. data/test/soap/helloworld/test_helloworld.rb +43 -0
  256. data/test/soap/htpasswd +2 -0
  257. data/test/soap/literalArrayMapping/amazonEc.rb +4778 -0
  258. data/test/soap/literalArrayMapping/amazonEcDriver.rb +172 -0
  259. data/test/soap/literalArrayMapping/amazonresponse.xml +100 -0
  260. data/test/soap/literalArrayMapping/test_definedarray.rb +34 -0
  261. data/test/soap/marshal/marshaltestlib.rb +494 -0
  262. data/test/soap/marshal/test_digraph.rb +56 -0
  263. data/test/soap/marshal/test_marshal.rb +26 -0
  264. data/test/soap/marshal/test_struct.rb +47 -0
  265. data/test/soap/ssl/README +1 -0
  266. data/test/soap/ssl/ca.cert +23 -0
  267. data/test/soap/ssl/client.cert +19 -0
  268. data/test/soap/ssl/client.key +15 -0
  269. data/test/soap/ssl/server.cert +19 -0
  270. data/test/soap/ssl/server.key +15 -0
  271. data/test/soap/ssl/sslsvr.rb +57 -0
  272. data/test/soap/ssl/subca.cert +21 -0
  273. data/test/soap/ssl/test_ssl.rb +235 -0
  274. data/test/soap/struct/test_struct.rb +70 -0
  275. data/test/soap/styleuse/client.rb +20 -0
  276. data/test/soap/styleuse/server.rb +86 -0
  277. data/test/soap/swa/test_file.rb +75 -0
  278. data/test/soap/test_basetype.rb +1090 -0
  279. data/test/soap/test_cookie.rb +112 -0
  280. data/test/soap/test_custom_ns.rb +105 -0
  281. data/test/soap/test_custommap.rb +110 -0
  282. data/test/soap/test_empty.rb +105 -0
  283. data/test/soap/test_envelopenamespace.rb +85 -0
  284. data/test/soap/test_extraattr.rb +54 -0
  285. data/test/soap/test_generator.rb +27 -0
  286. data/test/soap/test_httpconfigloader.rb +71 -0
  287. data/test/soap/test_mapping.rb +131 -0
  288. data/test/soap/test_nestedexception.rb +56 -0
  289. data/test/soap/test_nil.rb +57 -0
  290. data/test/soap/test_no_indent.rb +88 -0
  291. data/test/soap/test_property.rb +428 -0
  292. data/test/soap/test_response_as_xml.rb +117 -0
  293. data/test/soap/test_soapelement.rb +138 -0
  294. data/test/soap/test_streamhandler.rb +270 -0
  295. data/test/soap/test_styleuse.rb +326 -0
  296. data/test/soap/wsdlDriver/README.txt +2 -0
  297. data/test/soap/wsdlDriver/calc.wsdl +126 -0
  298. data/test/soap/wsdlDriver/document.wsdl +54 -0
  299. data/test/soap/wsdlDriver/echo_version.rb +29 -0
  300. data/test/soap/wsdlDriver/simpletype.wsdl +63 -0
  301. data/test/soap/wsdlDriver/test_calc.rb +71 -0
  302. data/test/soap/wsdlDriver/test_document.rb +71 -0
  303. data/test/soap/wsdlDriver/test_simpletype.rb +80 -0
  304. data/test/testutil.rb +54 -0
  305. data/test/wsdl/abstract/abstract.wsdl +176 -0
  306. data/test/wsdl/abstract/test_abstract.rb +159 -0
  307. data/test/wsdl/anonymous/expectedClassDef.rb +128 -0
  308. data/test/wsdl/anonymous/expectedDriver.rb +59 -0
  309. data/test/wsdl/anonymous/expectedMappingRegistry.rb +176 -0
  310. data/test/wsdl/anonymous/lp.wsdl +147 -0
  311. data/test/wsdl/anonymous/test_anonymous.rb +130 -0
  312. data/test/wsdl/any/any.wsdl +114 -0
  313. data/test/wsdl/any/expectedDriver.rb +68 -0
  314. data/test/wsdl/any/expectedEcho.rb +57 -0
  315. data/test/wsdl/any/expectedMappingRegistry.rb +63 -0
  316. data/test/wsdl/any/expectedService.rb +69 -0
  317. data/test/wsdl/any/test_any.rb +193 -0
  318. data/test/wsdl/axisArray/axisArray.wsdl +87 -0
  319. data/test/wsdl/axisArray/test_axisarray.rb +124 -0
  320. data/test/wsdl/choice/choice.wsdl +167 -0
  321. data/test/wsdl/choice/test_choice.rb +310 -0
  322. data/test/wsdl/complexcontent/complexContent.wsdl +83 -0
  323. data/test/wsdl/complexcontent/test_echo.rb +90 -0
  324. data/test/wsdl/datetime/DatetimeService.rb +44 -0
  325. data/test/wsdl/datetime/datetime.rb +0 -0
  326. data/test/wsdl/datetime/datetime.wsdl +45 -0
  327. data/test/wsdl/datetime/datetimeServant.rb +22 -0
  328. data/test/wsdl/datetime/test_datetime.rb +86 -0
  329. data/test/wsdl/document/array/double.wsdl +161 -0
  330. data/test/wsdl/document/array/test_array.rb +201 -0
  331. data/test/wsdl/document/document.wsdl +76 -0
  332. data/test/wsdl/document/number.wsdl +54 -0
  333. data/test/wsdl/document/ping_nosoapaction.wsdl +66 -0
  334. data/test/wsdl/document/test_nosoapaction.rb +102 -0
  335. data/test/wsdl/document/test_number.rb +92 -0
  336. data/test/wsdl/document/test_rpc.rb +355 -0
  337. data/test/wsdl/emptycomplextype.wsdl +31 -0
  338. data/test/wsdl/fault/fault.wsdl +79 -0
  339. data/test/wsdl/fault/multifault.wsdl +96 -0
  340. data/test/wsdl/fault/test_fault.rb +119 -0
  341. data/test/wsdl/fault/test_multifault.rb +134 -0
  342. data/test/wsdl/group/expectedClassdef.rb +58 -0
  343. data/test/wsdl/group/expectedDriver.rb +51 -0
  344. data/test/wsdl/group/expectedMappingRegistry.rb +67 -0
  345. data/test/wsdl/group/group.wsdl +88 -0
  346. data/test/wsdl/group/test_rpc.rb +145 -0
  347. data/test/wsdl/list/list.wsdl +93 -0
  348. data/test/wsdl/list/test_list.rb +124 -0
  349. data/test/wsdl/map/map.wsdl +92 -0
  350. data/test/wsdl/map/map.xml +43 -0
  351. data/test/wsdl/map/test_map.rb +99 -0
  352. data/test/wsdl/marshal/Person.rb +1 -0
  353. data/test/wsdl/marshal/person.wsdl +21 -0
  354. data/test/wsdl/marshal/person_org.rb +23 -0
  355. data/test/wsdl/marshal/test_wsdlmarshal.rb +76 -0
  356. data/test/wsdl/multiplefault.wsdl +75 -0
  357. data/test/wsdl/oneway/oneway.wsdl +36 -0
  358. data/test/wsdl/oneway/test_oneway.rb +108 -0
  359. data/test/wsdl/overload/expectedClient.rb +37 -0
  360. data/test/wsdl/overload/expectedDriver.rb +61 -0
  361. data/test/wsdl/overload/expectedServant.rb +35 -0
  362. data/test/wsdl/overload/overload.wsdl +70 -0
  363. data/test/wsdl/overload/test_overload.rb +131 -0
  364. data/test/wsdl/qualified/lp.wsdl +47 -0
  365. data/test/wsdl/qualified/lp.xsd +26 -0
  366. data/test/wsdl/qualified/np.wsdl +51 -0
  367. data/test/wsdl/qualified/test_qualified.rb +137 -0
  368. data/test/wsdl/qualified/test_unqualified.rb +138 -0
  369. data/test/wsdl/raa/RAAService.rb +125 -0
  370. data/test/wsdl/raa/README.txt +8 -0
  371. data/test/wsdl/raa/expectedClassDef.rb +100 -0
  372. data/test/wsdl/raa/expectedDriver.rb +96 -0
  373. data/test/wsdl/raa/expectedMappingRegistry.rb +121 -0
  374. data/test/wsdl/raa/raa.wsdl +264 -0
  375. data/test/wsdl/raa/test_raa.rb +126 -0
  376. data/test/wsdl/ref/expectedDriver.rb +51 -0
  377. data/test/wsdl/ref/expectedProduct.rb +243 -0
  378. data/test/wsdl/ref/product.wsdl +147 -0
  379. data/test/wsdl/ref/test_ref.rb +268 -0
  380. data/test/wsdl/rpc/rpc.wsdl +109 -0
  381. data/test/wsdl/rpc/test-rpc-lit.wsdl +371 -0
  382. data/test/wsdl/rpc/test_rpc.rb +176 -0
  383. data/test/wsdl/rpc/test_rpc_lit.rb +470 -0
  384. data/test/wsdl/simplecontent/simplecontent.wsdl +84 -0
  385. data/test/wsdl/simplecontent/test_simplecontent.rb +102 -0
  386. data/test/wsdl/simpletype/rpc/echo_version.rb +1 -0
  387. data/test/wsdl/simpletype/rpc/echo_versionDriver.rb +10 -0
  388. data/test/wsdl/simpletype/rpc/echo_versionMappingRegistry.rb +4 -0
  389. data/test/wsdl/simpletype/rpc/echo_versionServant.rb +3 -0
  390. data/test/wsdl/simpletype/rpc/echo_version_service.rb +3 -0
  391. data/test/wsdl/simpletype/rpc/echo_version_serviceClient.rb +34 -0
  392. data/test/wsdl/simpletype/rpc/expectedClient.rb +34 -0
  393. data/test/wsdl/simpletype/rpc/expectedDriver.rb +58 -0
  394. data/test/wsdl/simpletype/rpc/expectedEchoVersion.rb +36 -0
  395. data/test/wsdl/simpletype/rpc/expectedMappingRegistry.rb +57 -0
  396. data/test/wsdl/simpletype/rpc/expectedServant.rb +32 -0
  397. data/test/wsdl/simpletype/rpc/expectedService.rb +55 -0
  398. data/test/wsdl/simpletype/rpc/rpc.wsdl +98 -0
  399. data/test/wsdl/simpletype/rpc/test_rpc.rb +52 -0
  400. data/test/wsdl/simpletype/simpletype.wsdl +114 -0
  401. data/test/wsdl/simpletype/test_simpletype.rb +92 -0
  402. data/test/wsdl/soap/soapbodyparts.wsdl +103 -0
  403. data/test/wsdl/soap/test_soapbodyparts.rb +79 -0
  404. data/test/wsdl/soap/wsdl2ruby/echo_version.rb +1 -0
  405. data/test/wsdl/soap/wsdl2ruby/echo_versionDriver.rb +10 -0
  406. data/test/wsdl/soap/wsdl2ruby/echo_versionMappingRegistry.rb +4 -0
  407. data/test/wsdl/soap/wsdl2ruby/echo_versionServant.rb +3 -0
  408. data/test/wsdl/soap/wsdl2ruby/echo_version_service.cgi +3 -0
  409. data/test/wsdl/soap/wsdl2ruby/echo_version_service.rb +7 -0
  410. data/test/wsdl/soap/wsdl2ruby/echo_version_serviceClient.rb +34 -0
  411. data/test/wsdl/soap/wsdl2ruby/expectedClassdef.rb +21 -0
  412. data/test/wsdl/soap/wsdl2ruby/expectedClient.rb +34 -0
  413. data/test/wsdl/soap/wsdl2ruby/expectedDriver.rb +58 -0
  414. data/test/wsdl/soap/wsdl2ruby/expectedMappingRegistry.rb +36 -0
  415. data/test/wsdl/soap/wsdl2ruby/expectedServant.rb +32 -0
  416. data/test/wsdl/soap/wsdl2ruby/expectedService.cgi +48 -0
  417. data/test/wsdl/soap/wsdl2ruby/expectedService.rb +55 -0
  418. data/test/wsdl/soap/wsdl2ruby/rpc.wsdl +80 -0
  419. data/test/wsdl/soap/wsdl2ruby/section/expectedClassdef.rb +37 -0
  420. data/test/wsdl/soap/wsdl2ruby/section/section.xsd +31 -0
  421. data/test/wsdl/soap/wsdl2ruby/section/test_section.rb +53 -0
  422. data/test/wsdl/soap/wsdl2ruby/soapenc/soapenc.wsdl +64 -0
  423. data/test/wsdl/soap/wsdl2ruby/soapenc/test_soapenc.rb +83 -0
  424. data/test/wsdl/soap/wsdl2ruby/test_wsdl2ruby.rb +102 -0
  425. data/test/wsdl/soaptype/soaptype.wsdl +61 -0
  426. data/test/wsdl/soaptype/test_soaptype.rb +178 -0
  427. data/test/wsdl/test_emptycomplextype.rb +21 -0
  428. data/test/wsdl/test_fault.rb +50 -0
  429. data/test/wsdl/test_multiplefault.rb +41 -0
  430. data/test/xsd/codegen/test_classdef.rb +244 -0
  431. data/test/xsd/noencoding.xml +4 -0
  432. data/test/xsd/test_noencoding.rb +32 -0
  433. data/test/xsd/test_ns.rb +41 -0
  434. data/test/xsd/test_xmlschemaparser.rb +22 -0
  435. data/test/xsd/test_xsd.rb +1638 -0
  436. data/test/xsd/xmllang.xml +43 -0
  437. data/test/xsd/xmlschema.xml +12 -0
  438. data/test/xsd/xsd2ruby/expected_mysample.rb +65 -0
  439. data/test/xsd/xsd2ruby/expected_mysample_mapper.rb +11 -0
  440. data/test/xsd/xsd2ruby/expected_mysample_mapping_registry.rb +51 -0
  441. data/test/xsd/xsd2ruby/section.xsd +49 -0
  442. data/test/xsd/xsd2ruby/test_xsd2ruby.rb +90 -0
  443. metadata +506 -0
@@ -0,0 +1,70 @@
1
+ # XSD4R - Generating method definition code
2
+ # Copyright (C) 2000-2007 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/codegen/gensupport'
10
+ require 'xsd/codegen/commentdef'
11
+
12
+
13
+ module XSD
14
+ module CodeGen
15
+
16
+
17
+ class MethodDef
18
+ include GenSupport
19
+ include CommentDef
20
+
21
+ attr_accessor :definition
22
+
23
+ def initialize(name, *params)
24
+ klass, mname = name.split('.', 2)
25
+ if mname.nil?
26
+ mname, klass = klass, mname
27
+ end
28
+ unless safemethodname?(mname)
29
+ raise ArgumentError.new("name '#{name}' seems to be unsafe")
30
+ end
31
+ if klass and klass != 'self' and !safeconstname(klass)
32
+ raise ArgumentError.new("name '#{name}' seems to be unsafe")
33
+ end
34
+ @name = name
35
+ @params = params
36
+ @comment = nil
37
+ @definition = yield if block_given?
38
+ end
39
+
40
+ def dump
41
+ buf = ""
42
+ buf << dump_comment if @comment
43
+ buf << dump_method_def
44
+ buf << dump_definition if @definition and !@definition.empty?
45
+ buf << dump_method_def_end
46
+ buf
47
+ end
48
+
49
+ private
50
+
51
+ def dump_method_def
52
+ if @params.empty?
53
+ format("def #{@name}")
54
+ else
55
+ format("def #{@name}(#{@params.join(", ")})")
56
+ end
57
+ end
58
+
59
+ def dump_method_def_end
60
+ format("end")
61
+ end
62
+
63
+ def dump_definition
64
+ format(@definition, 2)
65
+ end
66
+ end
67
+
68
+
69
+ end
70
+ end
@@ -0,0 +1,208 @@
1
+ # XSD4R - Generating module definition code
2
+ # Copyright (C) 2000-2007 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/codegen/gensupport'
10
+ require 'xsd/codegen/methoddef'
11
+ require 'xsd/codegen/commentdef'
12
+
13
+
14
+ module XSD
15
+ module CodeGen
16
+
17
+
18
+ class ModuleDef
19
+ include GenSupport
20
+ include CommentDef
21
+
22
+ attr_reader :name
23
+ attr_reader :innermodule
24
+
25
+ def initialize(name)
26
+ @name = name
27
+ @comment = nil
28
+ @const = []
29
+ @code = []
30
+ @requirepath = []
31
+ @methoddef = []
32
+ @innermodule = []
33
+ end
34
+
35
+ def def_require(path)
36
+ @requirepath << path
37
+ end
38
+
39
+ def def_const(const, value)
40
+ unless safeconstname?(const)
41
+ raise ArgumentError.new("#{const} seems to be unsafe")
42
+ end
43
+ @const << [const, value]
44
+ end
45
+
46
+ def def_code(code)
47
+ @code << code
48
+ end
49
+
50
+ def def_method(name, *params)
51
+ add_method(MethodDef.new(name, *params) { yield if block_given? }, :public)
52
+ end
53
+ alias def_publicmethod def_method
54
+
55
+ def def_protectedmethod(name, *params)
56
+ add_method(MethodDef.new(name, *params) { yield if block_given? },
57
+ :protected)
58
+ end
59
+
60
+ def def_privatemethod(name, *params)
61
+ add_method(MethodDef.new(name, *params) { yield if block_given? }, :private)
62
+ end
63
+
64
+ def add_method(m, visibility = :public)
65
+ @methoddef << [visibility, m]
66
+ end
67
+
68
+ def dump
69
+ buf = ""
70
+ unless @requirepath.empty?
71
+ buf << dump_requirepath
72
+ end
73
+ buf << dump_emptyline unless buf.empty?
74
+ package = @name.split(/::/)[0..-2]
75
+ buf << dump_package_def(package) unless package.empty?
76
+ buf << dump_comment if @comment
77
+ buf << dump_module_def
78
+ spacer = false
79
+ unless @const.empty?
80
+ buf << dump_emptyline if spacer
81
+ spacer = true
82
+ buf << dump_const
83
+ end
84
+ unless @innermodule.empty?
85
+ buf << dump_emptyline # always add 1 empty line
86
+ spacer = true
87
+ buf << dump_innermodule
88
+ end
89
+ unless @code.empty?
90
+ buf << dump_emptyline if spacer
91
+ spacer = true
92
+ buf << dump_code
93
+ end
94
+ unless @methoddef.empty?
95
+ buf << dump_emptyline if spacer
96
+ spacer = true
97
+ buf << dump_methods
98
+ end
99
+ buf << dump_module_def_end
100
+ buf << dump_package_def_end(package) unless package.empty?
101
+ buf.gsub(/^\s+$/, '')
102
+ end
103
+
104
+ private
105
+
106
+ def dump_requirepath
107
+ format(
108
+ @requirepath.collect { |path|
109
+ %Q(require '#{path}')
110
+ }.join("\n")
111
+ )
112
+ end
113
+
114
+ def dump_const
115
+ dump_static(
116
+ @const.sort.collect { |var, value|
117
+ %Q(#{var} = #{dump_value(value)})
118
+ }.join("\n")
119
+ )
120
+ end
121
+
122
+ def dump_innermodule
123
+ dump_static(
124
+ @innermodule.collect { |moduledef|
125
+ moduledef.dump
126
+ }.join("\n")
127
+ )
128
+ end
129
+
130
+ def dump_code
131
+ dump_static(@code.join("\n"))
132
+ end
133
+
134
+ def dump_static(str)
135
+ format(str, 2)
136
+ end
137
+
138
+ def dump_methods
139
+ methods = {}
140
+ @methoddef.each do |visibility, method|
141
+ (methods[visibility] ||= []) << method
142
+ end
143
+ str = ""
144
+ [:public, :protected, :private].each do |visibility|
145
+ if methods[visibility]
146
+ str << "\n" unless str.empty?
147
+ str << visibility.to_s << "\n\n" unless visibility == :public
148
+ str << methods[visibility].collect { |m| format(m.dump, 2) }.join("\n")
149
+ end
150
+ end
151
+ str
152
+ end
153
+
154
+ def dump_value(value)
155
+ if value.respond_to?(:to_src)
156
+ value.to_src
157
+ else
158
+ value
159
+ end
160
+ end
161
+
162
+ def dump_package_def(package)
163
+ format(package.collect { |ele| "module #{ele}" }.join("; ")) + "\n\n"
164
+ end
165
+
166
+ def dump_package_def_end(package)
167
+ "\n\n" + format(package.collect { |ele| "end" }.join("; "))
168
+ end
169
+
170
+ def dump_module_def
171
+ name = @name.to_s.split(/::/)
172
+ format("module #{name.last}")
173
+ end
174
+
175
+ def dump_module_def_end
176
+ format("end")
177
+ end
178
+ end
179
+
180
+
181
+ end
182
+ end
183
+
184
+
185
+ if __FILE__ == $0
186
+ require 'xsd/codegen/moduledef'
187
+ include XSD::CodeGen
188
+ m = ModuleDef.new("Foo::Bar::HobbitName")
189
+ m.def_require("foo/bar")
190
+ m.def_require("baz")
191
+ m.comment = <<-EOD
192
+ foo
193
+ bar
194
+ baz
195
+ EOD
196
+ m.def_method("foo") do
197
+ <<-EOD
198
+ foo.bar = 1
199
+ baz.each do |ele|
200
+ ele + 1
201
+ end
202
+ EOD
203
+ end
204
+ m.def_method("baz", "qux")
205
+ #m.def_protectedmethod("aaa")
206
+ m.def_privatemethod("bbb")
207
+ puts m.dump
208
+ end
@@ -0,0 +1,1466 @@
1
+ # XSD4R - XML Schema Datatype implementation.
2
+ # Copyright (C) 2000-2007 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/qname'
10
+ require 'xsd/charset'
11
+ require 'soap/nestedexception'
12
+ require 'uri'
13
+ require 'date'
14
+
15
+ ###
16
+ ## XMLSchamaDatatypes general definitions.
17
+ #
18
+ module XSD
19
+
20
+
21
+ Namespace = 'http://www.w3.org/2001/XMLSchema'
22
+ InstanceNamespace = 'http://www.w3.org/2001/XMLSchema-instance'
23
+
24
+ AttrType = 'type'
25
+ NilValue = 'true'
26
+
27
+ AnyTypeLiteral = 'anyType'
28
+ AnySimpleTypeLiteral = 'anySimpleType'
29
+ NilLiteral = 'nil'
30
+ StringLiteral = 'string'
31
+ BooleanLiteral = 'boolean'
32
+ DecimalLiteral = 'decimal'
33
+ FloatLiteral = 'float'
34
+ DoubleLiteral = 'double'
35
+ DurationLiteral = 'duration'
36
+ DateTimeLiteral = 'dateTime'
37
+ TimeLiteral = 'time'
38
+ DateLiteral = 'date'
39
+ GYearMonthLiteral = 'gYearMonth'
40
+ GYearLiteral = 'gYear'
41
+ GMonthDayLiteral = 'gMonthDay'
42
+ GDayLiteral = 'gDay'
43
+ GMonthLiteral = 'gMonth'
44
+ HexBinaryLiteral = 'hexBinary'
45
+ Base64BinaryLiteral = 'base64Binary'
46
+ AnyURILiteral = 'anyURI'
47
+ QNameLiteral = 'QName'
48
+
49
+ NormalizedStringLiteral = 'normalizedString'
50
+ TokenLiteral = 'token'
51
+ LanguageLiteral = 'language'
52
+ NMTOKENLiteral = 'NMTOKEN'
53
+ NMTOKENSLiteral = 'NMTOKENS'
54
+ NameLiteral = 'Name'
55
+ NCNameLiteral = 'NCName'
56
+ IDLiteral = 'ID'
57
+ IDREFLiteral = 'IDREF'
58
+ IDREFSLiteral = 'IDREFS'
59
+ ENTITYLiteral = 'ENTITY'
60
+ ENTITIESLiteral = 'ENTITIES'
61
+ IntegerLiteral = 'integer'
62
+ NonPositiveIntegerLiteral = 'nonPositiveInteger'
63
+ NegativeIntegerLiteral = 'negativeInteger'
64
+ LongLiteral = 'long'
65
+ IntLiteral = 'int'
66
+ ShortLiteral = 'short'
67
+ ByteLiteral = 'byte'
68
+ NonNegativeIntegerLiteral = 'nonNegativeInteger'
69
+ UnsignedLongLiteral = 'unsignedLong'
70
+ UnsignedIntLiteral = 'unsignedInt'
71
+ UnsignedShortLiteral = 'unsignedShort'
72
+ UnsignedByteLiteral = 'unsignedByte'
73
+ PositiveIntegerLiteral = 'positiveInteger'
74
+
75
+ AttrTypeName = QName.new(InstanceNamespace, AttrType)
76
+ AttrNilName = QName.new(InstanceNamespace, NilLiteral)
77
+
78
+ AnyTypeName = QName.new(Namespace, AnyTypeLiteral)
79
+ AnySimpleTypeName = QName.new(Namespace, AnySimpleTypeLiteral)
80
+
81
+ class Error < StandardError; include ::SOAP::NestedException; end
82
+ class ValueSpaceError < Error; end
83
+
84
+
85
+ ###
86
+ ## The base class of all datatypes with Namespace.
87
+ #
88
+ class NSDBase
89
+ @@types = []
90
+
91
+ attr_accessor :type
92
+
93
+ def self.inherited(klass)
94
+ @@types << klass
95
+ end
96
+
97
+ def self.types
98
+ @@types
99
+ end
100
+
101
+ def initialize
102
+ end
103
+
104
+ def init(type)
105
+ @type = type
106
+ end
107
+ end
108
+
109
+
110
+ ###
111
+ ## The base class of XSD datatypes.
112
+ #
113
+ class XSDAnySimpleType < NSDBase
114
+ include XSD
115
+ Type = QName.new(Namespace, AnySimpleTypeLiteral)
116
+
117
+ # @data represents canonical space (ex. Integer: 123).
118
+ attr_reader :data
119
+ # @is_nil represents this data is nil or not.
120
+ attr_accessor :is_nil
121
+
122
+ def initialize(value = nil)
123
+ init(Type, value)
124
+ end
125
+
126
+ # true or raise
127
+ def check_lexical_format(value)
128
+ screen_data(value)
129
+ true
130
+ end
131
+
132
+ # set accepts a string which follows lexical space (ex. String: "+123"), or
133
+ # an object which follows canonical space (ex. Integer: 123).
134
+ def set(value)
135
+ if value.nil?
136
+ @is_nil = true
137
+ @data = nil
138
+ _set(nil)
139
+ else
140
+ @is_nil = false
141
+ _set(screen_data(value))
142
+ end
143
+ end
144
+
145
+ # to_s creates a string which follows lexical space (ex. String: "123").
146
+ def to_s()
147
+ if @is_nil
148
+ ""
149
+ else
150
+ _to_s
151
+ end
152
+ end
153
+
154
+ private
155
+
156
+ def init(type, value)
157
+ super(type)
158
+ set(value)
159
+ end
160
+
161
+ # raises ValueSpaceError if check failed
162
+ def screen_data(value)
163
+ value
164
+ end
165
+
166
+ def _set(value)
167
+ @data = value
168
+ end
169
+
170
+ def _to_s
171
+ @data.to_s
172
+ end
173
+ end
174
+
175
+ class XSDNil < XSDAnySimpleType
176
+ Type = QName.new(Namespace, NilLiteral)
177
+ Value = 'true'
178
+
179
+ def initialize(value = nil)
180
+ init(Type, value)
181
+ end
182
+ end
183
+
184
+
185
+ ###
186
+ ## Primitive datatypes.
187
+ #
188
+ class XSDString < XSDAnySimpleType
189
+ Type = QName.new(Namespace, StringLiteral)
190
+
191
+ def initialize(value = nil)
192
+ init(Type, value)
193
+ end
194
+
195
+ @@strict_ces_validation = false
196
+
197
+ def self.strict_ces_validation=(strict_ces_validation)
198
+ @@strict_ces_validation = strict_ces_validation
199
+ end
200
+
201
+ def self.strict_ces_validation
202
+ @@strict_ces_validation
203
+ end
204
+
205
+ private
206
+
207
+ def screen_data(value)
208
+ if ::XSD::XSDString.strict_ces_validation
209
+ externalces = XSD::Charset.encoding
210
+ unless XSD::Charset.is_ces(value, externalces)
211
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
212
+ end
213
+ end
214
+ value
215
+ end
216
+ end
217
+
218
+ class XSDBoolean < XSDAnySimpleType
219
+ Type = QName.new(Namespace, BooleanLiteral)
220
+
221
+ def initialize(value = nil)
222
+ init(Type, value)
223
+ end
224
+
225
+ private
226
+
227
+ def screen_data(value)
228
+ if value.is_a?(String)
229
+ str = value.strip
230
+ if str == 'true' || str == '1'
231
+ true
232
+ elsif str == 'false' || str == '0'
233
+ false
234
+ else
235
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.")
236
+ end
237
+ else
238
+ value ? true : false
239
+ end
240
+ end
241
+ end
242
+
243
+ class XSDDecimal < XSDAnySimpleType
244
+ Type = QName.new(Namespace, DecimalLiteral)
245
+
246
+ def initialize(value = nil)
247
+ init(Type, value)
248
+ end
249
+
250
+ def nonzero?
251
+ (@number != '0')
252
+ end
253
+
254
+ private
255
+
256
+ def screen_data(d)
257
+ if d.is_a?(String)
258
+ # Integer("00012") => 10 in Ruby.
259
+ d.sub!(/^([+\-]?)0*(?=\d)/, "\\1")
260
+ end
261
+ screen_data_str(d)
262
+ end
263
+
264
+ def screen_data_str(str)
265
+ /^([+\-]?)(\d*)(?:\.(\d*)?)?$/ =~ str.to_s.strip
266
+ unless Regexp.last_match
267
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.")
268
+ end
269
+ sign = $1 || '+'
270
+ int_part = $2
271
+ frac_part = $3
272
+ int_part = '0' if int_part.empty?
273
+ frac_part = frac_part ? frac_part.sub(/0+$/, '') : ''
274
+ point = - frac_part.size
275
+ number = int_part + frac_part
276
+ # normalize
277
+ if sign == '+'
278
+ sign = ''
279
+ elsif sign == '-'
280
+ if number == '0'
281
+ sign = ''
282
+ end
283
+ end
284
+ [sign, point, number]
285
+ end
286
+
287
+ def _set(data)
288
+ if data.nil?
289
+ @sign = @point = @number = @data = nil
290
+ return
291
+ end
292
+ @sign, @point, @number = data
293
+ @data = _to_s
294
+ @data.freeze
295
+ end
296
+
297
+ # 0.0 -> 0; right?
298
+ def _to_s
299
+ str = @number.dup
300
+ if @point.nonzero?
301
+ str[@number.size + @point, 0] = '.'
302
+ end
303
+ @sign + str
304
+ end
305
+ end
306
+
307
+ module FloatConstants
308
+ NaN = 0.0/0.0
309
+ POSITIVE_INF = +1.0/0.0
310
+ NEGATIVE_INF = -1.0/0.0
311
+ POSITIVE_ZERO = +1.0/POSITIVE_INF
312
+ NEGATIVE_ZERO = -1.0/POSITIVE_INF
313
+ MIN_POSITIVE_SINGLE = 2.0 ** -149
314
+ end
315
+
316
+ class XSDFloat < XSDAnySimpleType
317
+ include FloatConstants
318
+ Type = QName.new(Namespace, FloatLiteral)
319
+
320
+ def initialize(value = nil)
321
+ init(Type, value)
322
+ end
323
+
324
+ private
325
+
326
+ def screen_data(value)
327
+ # "NaN".to_f => 0 in some environment. libc?
328
+ if value.is_a?(Float)
329
+ return narrow32bit(value)
330
+ end
331
+ str = value.to_s.strip
332
+ if str == 'NaN'
333
+ NaN
334
+ elsif str == 'INF'
335
+ POSITIVE_INF
336
+ elsif str == '-INF'
337
+ NEGATIVE_INF
338
+ else
339
+ if /^[+\-\.\deE]+$/ !~ str
340
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.")
341
+ end
342
+ # Float("-1.4E") might fail on some system.
343
+ str << '0' if /e$/i =~ str
344
+ begin
345
+ return narrow32bit(Float(str))
346
+ rescue ArgumentError
347
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.", $!)
348
+ end
349
+ end
350
+ end
351
+
352
+ def _to_s
353
+ if @data.nan?
354
+ 'NaN'
355
+ elsif @data.infinite? == 1
356
+ 'INF'
357
+ elsif @data.infinite? == -1
358
+ '-INF'
359
+ else
360
+ sign = XSDFloat.positive?(@data) ? '+' : '-'
361
+ sign + sprintf("%.10g", @data.abs).sub(/[eE]([+-])?0+/) { 'e' + $1 }
362
+ end
363
+ end
364
+
365
+ # Convert to single-precision 32-bit floating point value.
366
+ def narrow32bit(f)
367
+ if f.nan? || f.infinite?
368
+ f
369
+ elsif f.abs < MIN_POSITIVE_SINGLE
370
+ XSDFloat.positive?(f) ? POSITIVE_ZERO : NEGATIVE_ZERO
371
+ else
372
+ f
373
+ end
374
+ end
375
+
376
+ def self.positive?(value)
377
+ (1 / value) > 0.0
378
+ end
379
+ end
380
+
381
+ # Ruby's Float is double-precision 64-bit floating point value.
382
+ class XSDDouble < XSDAnySimpleType
383
+ include FloatConstants
384
+ Type = QName.new(Namespace, DoubleLiteral)
385
+
386
+ def initialize(value = nil)
387
+ init(Type, value)
388
+ end
389
+
390
+ private
391
+
392
+ def screen_data(value)
393
+ # "NaN".to_f => 0 in some environment. libc?
394
+ if value.is_a?(Float)
395
+ return value
396
+ end
397
+ str = value.to_s.strip
398
+ if str == 'NaN'
399
+ NaN
400
+ elsif str == 'INF'
401
+ POSITIVE_INF
402
+ elsif str == '-INF'
403
+ NEGATIVE_INF
404
+ else
405
+ begin
406
+ return Float(str)
407
+ rescue ArgumentError
408
+ # '1.4e' cannot be parsed on some architecture.
409
+ if /e\z/i =~ str
410
+ begin
411
+ return Float(str + '0')
412
+ rescue ArgumentError
413
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.", $!)
414
+ end
415
+ else
416
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.", $!)
417
+ end
418
+ end
419
+ end
420
+ end
421
+
422
+ def _to_s
423
+ if @data.nan?
424
+ 'NaN'
425
+ elsif @data.infinite? == 1
426
+ 'INF'
427
+ elsif @data.infinite? == -1
428
+ '-INF'
429
+ else
430
+ sign = (1 / @data > 0.0) ? '+' : '-'
431
+ sign + sprintf("%.16g", @data.abs).sub(/[eE]([+-])?0+/) { 'e' + $1 }
432
+ end
433
+ end
434
+ end
435
+
436
+ class XSDDuration < XSDAnySimpleType
437
+ Type = QName.new(Namespace, DurationLiteral)
438
+
439
+ attr_accessor :sign
440
+ attr_accessor :year
441
+ attr_accessor :month
442
+ attr_accessor :day
443
+ attr_accessor :hour
444
+ attr_accessor :min
445
+ attr_accessor :sec
446
+
447
+ def initialize(value = nil)
448
+ init(Type, value)
449
+ end
450
+
451
+ private
452
+
453
+ def screen_data(value)
454
+ /^([+\-]?)P(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)D)?(T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?)?$/ =~ value.to_s.strip
455
+ unless Regexp.last_match
456
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
457
+ end
458
+ if $5 and !$6 and !$7 and !$8
459
+ # allows durations lower than a day such as 'PT5S'.
460
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
461
+ end
462
+ sign = $1
463
+ year = $2.to_i
464
+ month = $3.to_i
465
+ day = $4.to_i
466
+ hour = $6.to_i
467
+ min = $7.to_i
468
+ sec = $8 ? XSDDecimal.new($8) : 0
469
+ [sign, year, month, day, hour, min, sec]
470
+ end
471
+
472
+ def _set(data)
473
+ if data.nil?
474
+ @sign = @year = @month = @day = @hour = @min = @sec = @data = nil
475
+ return
476
+ end
477
+ @sign, @year, @month, @day, @hour, @min, @sec = data
478
+ @data = _to_s
479
+ @data.freeze
480
+ end
481
+
482
+ def _to_s
483
+ str = ''
484
+ str << @sign if @sign
485
+ str << 'P'
486
+ l = ''
487
+ l << "#{ @year }Y" if @year.nonzero?
488
+ l << "#{ @month }M" if @month.nonzero?
489
+ l << "#{ @day }D" if @day.nonzero?
490
+ r = ''
491
+ r << "#{ @hour }H" if @hour.nonzero?
492
+ r << "#{ @min }M" if @min.nonzero?
493
+ r << "#{ @sec }S" if @sec.nonzero?
494
+ str << l
495
+ unless r.empty?
496
+ str << "T" << r
497
+ end
498
+ if l.empty? and r.empty?
499
+ str << "0D"
500
+ end
501
+ str
502
+ end
503
+ end
504
+
505
+
506
+ require 'rational'
507
+ require 'date'
508
+
509
+ module XSDDateTimeImpl
510
+ DayInSec = 86400 # 24 * 60 * 60
511
+ DayInMicro = 86400_000_000
512
+
513
+ def to_obj(klass)
514
+ if klass == Time
515
+ to_time
516
+ elsif klass == Date
517
+ to_date
518
+ elsif klass == DateTime
519
+ to_datetime
520
+ else
521
+ nil
522
+ end
523
+ end
524
+
525
+ def to_time
526
+ begin
527
+ if @data.offset * DayInSec == Time.now.utc_offset
528
+ d = @data
529
+ usec = (d.sec_fraction * DayInMicro).round
530
+ Time.local(d.year, d.month, d.mday, d.hour, d.min, d.sec, usec)
531
+ else
532
+ d = @data.newof
533
+ usec = (d.sec_fraction * DayInMicro).round
534
+ Time.gm(d.year, d.month, d.mday, d.hour, d.min, d.sec, usec)
535
+ end
536
+ rescue ArgumentError
537
+ nil
538
+ end
539
+ end
540
+
541
+ def to_date
542
+ Date.new0(@data.class.jd_to_ajd(@data.jd, 0, 0), 0, @data.start)
543
+ end
544
+
545
+ def to_datetime
546
+ data
547
+ end
548
+
549
+ def tz2of(str)
550
+ /^(?:Z|(?:([+\-])(\d\d):(\d\d))?)$/ =~ str
551
+ sign = $1
552
+ hour = $2.to_i
553
+ min = $3.to_i
554
+
555
+ of = case sign
556
+ when '+'
557
+ of = +(hour.to_r * 60 + min) / 1440 # 24 * 60
558
+ when '-'
559
+ of = -(hour.to_r * 60 + min) / 1440 # 24 * 60
560
+ else
561
+ 0
562
+ end
563
+ of
564
+ end
565
+
566
+ def of2tz(offset)
567
+ diffmin = offset * 24 * 60
568
+ if diffmin.zero?
569
+ 'Z'
570
+ else
571
+ ((diffmin < 0) ? '-' : '+') << format('%02d:%02d',
572
+ (diffmin.abs / 60.0).to_i, (diffmin.abs % 60.0).to_i)
573
+ end
574
+ end
575
+
576
+ def screen_data(t)
577
+ # convert t to a DateTime as an internal representation.
578
+ if t.respond_to?(:to_datetime) # 1.9 or later
579
+ t.to_datetime
580
+ elsif t.is_a?(DateTime)
581
+ t
582
+ elsif t.is_a?(Date)
583
+ t = screen_data_str(t)
584
+ t <<= 12 if t.year < 0
585
+ t
586
+ elsif t.is_a?(Time)
587
+ jd = DateTime.civil_to_jd(t.year, t.mon, t.mday, DateTime::ITALY)
588
+ fr = DateTime.time_to_day_fraction(t.hour, t.min, [t.sec, 59].min) +
589
+ t.usec.to_r / DayInMicro
590
+ of = t.utc_offset.to_r / DayInSec
591
+ DateTime.new0(DateTime.jd_to_ajd(jd, fr, of), of, DateTime::ITALY)
592
+ else
593
+ screen_data_str(t)
594
+ end
595
+ end
596
+
597
+ def add_tz(s)
598
+ s + of2tz(@data.offset)
599
+ end
600
+ end
601
+
602
+ class XSDDateTime < XSDAnySimpleType
603
+ include XSDDateTimeImpl
604
+ Type = QName.new(Namespace, DateTimeLiteral)
605
+
606
+ def initialize(value = nil)
607
+ init(Type, value)
608
+ end
609
+
610
+ private
611
+
612
+ def screen_data_str(t)
613
+ /^([+\-]?\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d(?:\.(\d*))?)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip
614
+ unless Regexp.last_match
615
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
616
+ end
617
+ if $1 == '0000'
618
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
619
+ end
620
+ year = $1.to_i
621
+ if year < 0
622
+ year += 1
623
+ end
624
+ mon = $2.to_i
625
+ mday = $3.to_i
626
+ hour = $4.to_i
627
+ min = $5.to_i
628
+ sec = $6.to_i
629
+ secfrac = $7
630
+ zonestr = $8
631
+ data = DateTime.civil(year, mon, mday, hour, min, sec, tz2of(zonestr))
632
+ if secfrac
633
+ diffday = secfrac.to_i.to_r / (10 ** secfrac.size) / DayInSec
634
+ data += diffday
635
+ # FYI: new0 and jd_to_rjd are not necessary to use if you don't have
636
+ # exceptional reason.
637
+ end
638
+ [data, secfrac]
639
+ end
640
+
641
+ def _set(data)
642
+ if data.nil?
643
+ @data = @secfrac = nil
644
+ return
645
+ end
646
+ @data, @secfrac = data
647
+ end
648
+
649
+ def _to_s
650
+ year = (@data.year > 0) ? @data.year : @data.year - 1
651
+ s = format('%.4d-%02d-%02dT%02d:%02d:%02d',
652
+ year, @data.mon, @data.mday, @data.hour, @data.min, @data.sec)
653
+ if @data.sec_fraction.nonzero?
654
+ if @secfrac
655
+ s << ".#{ @secfrac }"
656
+ else
657
+ s << sprintf("%.16f",
658
+ (@data.sec_fraction * DayInSec).to_f).sub(/^0/, '').sub(/0*$/, '')
659
+ end
660
+ end
661
+ add_tz(s)
662
+ end
663
+ end
664
+
665
+ class XSDTime < XSDAnySimpleType
666
+ include XSDDateTimeImpl
667
+ Type = QName.new(Namespace, TimeLiteral)
668
+
669
+ def initialize(value = nil)
670
+ init(Type, value)
671
+ end
672
+
673
+ private
674
+
675
+ def screen_data_str(t)
676
+ /^(\d\d):(\d\d):(\d\d(?:\.(\d*))?)(Z|(?:([+\-])(\d\d):(\d\d))?)?$/ =~ t.to_s.strip
677
+ unless Regexp.last_match
678
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
679
+ end
680
+ hour = $1.to_i
681
+ min = $2.to_i
682
+ sec = $3.to_i
683
+ secfrac = $4
684
+ zonestr = $5
685
+ data = DateTime.civil(1, 1, 1, hour, min, sec, tz2of(zonestr))
686
+ if secfrac
687
+ diffday = secfrac.to_i.to_r / (10 ** secfrac.size) / DayInSec
688
+ data += diffday
689
+ end
690
+ [data, secfrac]
691
+ end
692
+
693
+ def _set(data)
694
+ if data.nil?
695
+ @data = @secfrac = nil
696
+ return
697
+ end
698
+ @data, @secfrac = data
699
+ end
700
+
701
+ def _to_s
702
+ s = format('%02d:%02d:%02d', @data.hour, @data.min, @data.sec)
703
+ if @data.sec_fraction.nonzero?
704
+ if @secfrac
705
+ s << ".#{ @secfrac }"
706
+ else
707
+ s << sprintf("%.16f",
708
+ (@data.sec_fraction * DayInSec).to_f).sub(/^0/, '').sub(/0*$/, '')
709
+ end
710
+ end
711
+ add_tz(s)
712
+ end
713
+ end
714
+
715
+ class XSDDate < XSDAnySimpleType
716
+ include XSDDateTimeImpl
717
+ Type = QName.new(Namespace, DateLiteral)
718
+
719
+ def initialize(value = nil)
720
+ init(Type, value)
721
+ end
722
+
723
+ private
724
+
725
+ def screen_data_str(t)
726
+ /^([+\-]?\d{4,})-(\d\d)-(\d\d)(Z|(?:([+\-])(\d\d):(\d\d))?)?$/ =~ t.to_s.strip
727
+ unless Regexp.last_match
728
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
729
+ end
730
+ year = $1.to_i
731
+ if year < 0
732
+ year += 1
733
+ end
734
+ mon = $2.to_i
735
+ mday = $3.to_i
736
+ zonestr = $4
737
+ DateTime.civil(year, mon, mday, 0, 0, 0, tz2of(zonestr))
738
+ end
739
+
740
+ def _to_s
741
+ year = (@data.year > 0) ? @data.year : @data.year - 1
742
+ s = format('%.4d-%02d-%02d', year, @data.mon, @data.mday)
743
+ add_tz(s)
744
+ end
745
+ end
746
+
747
+ class XSDGYearMonth < XSDAnySimpleType
748
+ include XSDDateTimeImpl
749
+ Type = QName.new(Namespace, GYearMonthLiteral)
750
+
751
+ def initialize(value = nil)
752
+ init(Type, value)
753
+ end
754
+
755
+ private
756
+
757
+ def screen_data_str(t)
758
+ /^([+\-]?\d{4,})-(\d\d)(Z|(?:([+\-])(\d\d):(\d\d))?)?$/ =~ t.to_s.strip
759
+ unless Regexp.last_match
760
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
761
+ end
762
+ year = $1.to_i
763
+ if year < 0
764
+ year += 1
765
+ end
766
+ mon = $2.to_i
767
+ zonestr = $3
768
+ DateTime.civil(year, mon, 1, 0, 0, 0, tz2of(zonestr))
769
+ end
770
+
771
+ def _to_s
772
+ year = (@data.year > 0) ? @data.year : @data.year - 1
773
+ s = format('%.4d-%02d', year, @data.mon)
774
+ add_tz(s)
775
+ end
776
+ end
777
+
778
+ class XSDGYear < XSDAnySimpleType
779
+ include XSDDateTimeImpl
780
+ Type = QName.new(Namespace, GYearLiteral)
781
+
782
+ def initialize(value = nil)
783
+ init(Type, value)
784
+ end
785
+
786
+ private
787
+
788
+ def screen_data_str(t)
789
+ /^([+\-]?\d{4,})(Z|(?:([+\-])(\d\d):(\d\d))?)?$/ =~ t.to_s.strip
790
+ unless Regexp.last_match
791
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
792
+ end
793
+ year = $1.to_i
794
+ if year < 0
795
+ year += 1
796
+ end
797
+ zonestr = $2
798
+ DateTime.civil(year, 1, 1, 0, 0, 0, tz2of(zonestr))
799
+ end
800
+
801
+ def _to_s
802
+ year = (@data.year > 0) ? @data.year : @data.year - 1
803
+ s = format('%.4d', year)
804
+ add_tz(s)
805
+ end
806
+ end
807
+
808
+ class XSDGMonthDay < XSDAnySimpleType
809
+ include XSDDateTimeImpl
810
+ Type = QName.new(Namespace, GMonthDayLiteral)
811
+
812
+ def initialize(value = nil)
813
+ init(Type, value)
814
+ end
815
+
816
+ private
817
+
818
+ def screen_data_str(t)
819
+ /^--(\d\d)-(\d\d)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip
820
+ unless Regexp.last_match
821
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
822
+ end
823
+ mon = $1.to_i
824
+ mday = $2.to_i
825
+ zonestr = $3
826
+ DateTime.civil(1, mon, mday, 0, 0, 0, tz2of(zonestr))
827
+ end
828
+
829
+ def _to_s
830
+ s = format('--%02d-%02d', @data.mon, @data.mday)
831
+ add_tz(s)
832
+ end
833
+ end
834
+
835
+ class XSDGDay < XSDAnySimpleType
836
+ include XSDDateTimeImpl
837
+ Type = QName.new(Namespace, GDayLiteral)
838
+
839
+ def initialize(value = nil)
840
+ init(Type, value)
841
+ end
842
+
843
+ private
844
+
845
+ def screen_data_str(t)
846
+ /^---(\d\d)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip
847
+ unless Regexp.last_match
848
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
849
+ end
850
+ mday = $1.to_i
851
+ zonestr = $2
852
+ DateTime.civil(1, 1, mday, 0, 0, 0, tz2of(zonestr))
853
+ end
854
+
855
+ def _to_s
856
+ s = format('---%02d', @data.mday)
857
+ add_tz(s)
858
+ end
859
+ end
860
+
861
+ class XSDGMonth < XSDAnySimpleType
862
+ include XSDDateTimeImpl
863
+ Type = QName.new(Namespace, GMonthLiteral)
864
+
865
+ def initialize(value = nil)
866
+ init(Type, value)
867
+ end
868
+
869
+ private
870
+
871
+ def screen_data_str(t)
872
+ /^--(\d\d)(Z|(?:[+\-]\d\d:\d\d)?)?$/ =~ t.to_s.strip
873
+ unless Regexp.last_match
874
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ t }'.")
875
+ end
876
+ mon = $1.to_i
877
+ zonestr = $2
878
+ DateTime.civil(1, mon, 1, 0, 0, 0, tz2of(zonestr))
879
+ end
880
+
881
+ def _to_s
882
+ s = format('--%02d', @data.mon)
883
+ add_tz(s)
884
+ end
885
+ end
886
+
887
+ class XSDHexBinary < XSDAnySimpleType
888
+ Type = QName.new(Namespace, HexBinaryLiteral)
889
+
890
+ # String in Ruby could be a binary.
891
+ def initialize(value = nil)
892
+ init(Type, value)
893
+ end
894
+
895
+ def set_encoded(value)
896
+ if /^[0-9a-fA-F]*$/ !~ value
897
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
898
+ end
899
+ @data = String.new(value).strip
900
+ @is_nil = false
901
+ end
902
+
903
+ def string
904
+ [@data].pack("H*")
905
+ end
906
+
907
+ private
908
+
909
+ def screen_data(value)
910
+ value.unpack("H*")[0].tr('a-f', 'A-F')
911
+ end
912
+ end
913
+
914
+ class XSDBase64Binary < XSDAnySimpleType
915
+ Type = QName.new(Namespace, Base64BinaryLiteral)
916
+
917
+ # String in Ruby could be a binary.
918
+ def initialize(value = nil)
919
+ init(Type, value)
920
+ end
921
+
922
+ def set_encoded(value)
923
+ if /^[A-Za-z0-9+\/=]*$/ !~ value
924
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
925
+ end
926
+ @data = String.new(value).strip
927
+ @is_nil = false
928
+ end
929
+
930
+ def string
931
+ @data.unpack("m")[0]
932
+ end
933
+
934
+ private
935
+
936
+ def screen_data(value)
937
+ [value].pack("m").strip
938
+ end
939
+ end
940
+
941
+ class XSDAnyURI < XSDAnySimpleType
942
+ Type = QName.new(Namespace, AnyURILiteral)
943
+
944
+ def initialize(value = nil)
945
+ init(Type, value)
946
+ end
947
+
948
+ private
949
+
950
+ def screen_data(value)
951
+ begin
952
+ URI.parse(value.to_s.strip)
953
+ rescue URI::InvalidURIError
954
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.", $!)
955
+ end
956
+ end
957
+ end
958
+
959
+ class XSDQName < XSDAnySimpleType
960
+ Type = QName.new(Namespace, QNameLiteral)
961
+
962
+ def initialize(value = nil)
963
+ init(Type, value)
964
+ end
965
+
966
+ private
967
+
968
+ def screen_data(value)
969
+ /^(?:([^:]+):)?([^:]+)$/ =~ value.to_s.strip
970
+ unless Regexp.last_match
971
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
972
+ end
973
+ prefix = $1
974
+ localpart = $2
975
+ [prefix, localpart]
976
+ end
977
+
978
+ def _set(data)
979
+ if data.nil?
980
+ @prefix = @localpart = @data = nil
981
+ return
982
+ end
983
+ @prefix, @localpart = data
984
+ @data = _to_s
985
+ @data.freeze
986
+ end
987
+
988
+ def _to_s
989
+ if @prefix
990
+ "#{ @prefix }:#{ @localpart }"
991
+ else
992
+ "#{ @localpart }"
993
+ end
994
+ end
995
+ end
996
+
997
+
998
+ ###
999
+ ## Derived types
1000
+ #
1001
+ class XSDNormalizedString < XSDString
1002
+ Type = QName.new(Namespace, NormalizedStringLiteral)
1003
+
1004
+ def initialize(value = nil)
1005
+ init(Type, value)
1006
+ end
1007
+
1008
+ private
1009
+
1010
+ def screen_data(value)
1011
+ super
1012
+ if /[\t\r\n]/ =~ value
1013
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
1014
+ end
1015
+ value
1016
+ end
1017
+ end
1018
+
1019
+ class XSDToken < XSDNormalizedString
1020
+ Type = QName.new(Namespace, TokenLiteral)
1021
+
1022
+ def initialize(value = nil)
1023
+ init(Type, value)
1024
+ end
1025
+
1026
+ private
1027
+
1028
+ def screen_data(value)
1029
+ super
1030
+ if /\A / =~ value or / \Z/ =~ value or value.index(' ')
1031
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
1032
+ end
1033
+ value
1034
+ end
1035
+ end
1036
+
1037
+ class XSDLanguage < XSDToken
1038
+ Type = QName.new(Namespace, LanguageLiteral)
1039
+
1040
+ def initialize(value = nil)
1041
+ init(Type, value)
1042
+ end
1043
+
1044
+ private
1045
+
1046
+ def screen_data(value)
1047
+ super
1048
+ # RFC 3066 syntax check
1049
+ if /\A[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})?\z/ !~ value
1050
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ value }'.")
1051
+ end
1052
+ value
1053
+ end
1054
+ end
1055
+
1056
+ class XSDNMTOKEN < XSDToken
1057
+ Type = QName.new(Namespace, NMTOKENLiteral)
1058
+
1059
+ def initialize(value = nil)
1060
+ init(Type, value)
1061
+ end
1062
+
1063
+ private
1064
+
1065
+ def screen_data(value)
1066
+ super
1067
+ # TODO: check lexical space and convert to a value
1068
+ value
1069
+ end
1070
+ end
1071
+
1072
+ class XSDNMTOKENS < XSDNMTOKEN
1073
+ Type = QName.new(Namespace, NMTOKENSLiteral)
1074
+
1075
+ def initialize(value = nil)
1076
+ init(Type, value)
1077
+ end
1078
+
1079
+ private
1080
+
1081
+ def screen_data(value)
1082
+ # derived by list
1083
+ # TODO: check lexical space and convert to a value
1084
+ value
1085
+ end
1086
+ end
1087
+
1088
+ class XSDName < XSDToken
1089
+ Type = QName.new(Namespace, NameLiteral)
1090
+
1091
+ def initialize(value = nil)
1092
+ init(Type, value)
1093
+ end
1094
+
1095
+ private
1096
+
1097
+ def screen_data(value)
1098
+ super
1099
+ # TODO: check lexical space and convert to a value
1100
+ value
1101
+ end
1102
+ end
1103
+
1104
+ class XSDNCName < XSDName
1105
+ Type = QName.new(Namespace, NCNameLiteral)
1106
+
1107
+ def initialize(value = nil)
1108
+ init(Type, value)
1109
+ end
1110
+
1111
+ private
1112
+
1113
+ def screen_data(value)
1114
+ super
1115
+ # TODO: check lexical space and convert to a value
1116
+ value
1117
+ end
1118
+ end
1119
+
1120
+ class XSDID < XSDNCName
1121
+ Type = QName.new(Namespace, IDLiteral)
1122
+
1123
+ def initialize(value = nil)
1124
+ init(Type, value)
1125
+ end
1126
+
1127
+ private
1128
+
1129
+ def screen_data(value)
1130
+ super
1131
+ # TODO: check lexical space and convert to a value
1132
+ value
1133
+ end
1134
+ end
1135
+
1136
+ class XSDIDREF < XSDNCName
1137
+ Type = QName.new(Namespace, IDREFLiteral)
1138
+
1139
+ def initialize(value = nil)
1140
+ init(Type, value)
1141
+ end
1142
+
1143
+ private
1144
+
1145
+ def screen_data(value)
1146
+ super
1147
+ # TODO: check lexical space and convert to a value
1148
+ value
1149
+ end
1150
+ end
1151
+
1152
+ class XSDIDREFS < XSDIDREF
1153
+ Type = QName.new(Namespace, IDREFSLiteral)
1154
+
1155
+ def initialize(value = nil)
1156
+ init(Type, value)
1157
+ end
1158
+
1159
+ private
1160
+
1161
+ def screen_data(value)
1162
+ # derived by list
1163
+ # TODO: check lexical space and convert to a value
1164
+ value
1165
+ end
1166
+ end
1167
+
1168
+ class XSDENTITY < XSDNCName
1169
+ Type = QName.new(Namespace, ENTITYLiteral)
1170
+
1171
+ def initialize(value = nil)
1172
+ init(Type, value)
1173
+ end
1174
+
1175
+ private
1176
+
1177
+ def screen_data(value)
1178
+ super
1179
+ # TODO: check lexical space and convert to a value
1180
+ value
1181
+ end
1182
+ end
1183
+
1184
+ class XSDENTITIES < XSDENTITY
1185
+ Type = QName.new(Namespace, ENTITIESLiteral)
1186
+
1187
+ def initialize(value = nil)
1188
+ init(Type, value)
1189
+ end
1190
+
1191
+ private
1192
+
1193
+ def screen_data(value)
1194
+ # derived by list
1195
+ # TODO: check lexical space and convert to a value
1196
+ value
1197
+ end
1198
+ end
1199
+
1200
+ class XSDInteger < XSDDecimal
1201
+ Type = QName.new(Namespace, IntegerLiteral)
1202
+
1203
+ def initialize(value = nil)
1204
+ init(Type, value)
1205
+ end
1206
+
1207
+ private
1208
+
1209
+ def screen_data_str(str)
1210
+ begin
1211
+ data = Integer(str)
1212
+ rescue ArgumentError
1213
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.", $!)
1214
+ end
1215
+ unless validate(data)
1216
+ raise ValueSpaceError.new("#{ type }: cannot accept '#{ str }'.")
1217
+ end
1218
+ data
1219
+ end
1220
+
1221
+ def _set(value)
1222
+ @data = value
1223
+ end
1224
+
1225
+ def _to_s()
1226
+ @data.to_s
1227
+ end
1228
+
1229
+ def validate(v)
1230
+ max = maxinclusive
1231
+ min = mininclusive
1232
+ (max.nil? or v <= max) and (min.nil? or v >= min)
1233
+ end
1234
+
1235
+ def maxinclusive
1236
+ nil
1237
+ end
1238
+
1239
+ def mininclusive
1240
+ nil
1241
+ end
1242
+
1243
+ PositiveMinInclusive = 1
1244
+ def positive(v)
1245
+ PositiveMinInclusive <= v
1246
+ end
1247
+ end
1248
+
1249
+ class XSDNonPositiveInteger < XSDInteger
1250
+ Type = QName.new(Namespace, NonPositiveIntegerLiteral)
1251
+
1252
+ def initialize(value = nil)
1253
+ init(Type, value)
1254
+ end
1255
+
1256
+ private
1257
+
1258
+ def maxinclusive
1259
+ 0
1260
+ end
1261
+
1262
+ def mininclusive
1263
+ nil
1264
+ end
1265
+ end
1266
+
1267
+ class XSDNegativeInteger < XSDNonPositiveInteger
1268
+ Type = QName.new(Namespace, NegativeIntegerLiteral)
1269
+
1270
+ def initialize(value = nil)
1271
+ init(Type, value)
1272
+ end
1273
+
1274
+ private
1275
+
1276
+ def maxinclusive
1277
+ -1
1278
+ end
1279
+
1280
+ def mininclusive
1281
+ nil
1282
+ end
1283
+ end
1284
+
1285
+ class XSDLong < XSDInteger
1286
+ Type = QName.new(Namespace, LongLiteral)
1287
+
1288
+ def initialize(value = nil)
1289
+ init(Type, value)
1290
+ end
1291
+
1292
+ private
1293
+
1294
+ def maxinclusive
1295
+ +9223372036854775807
1296
+ end
1297
+
1298
+ def mininclusive
1299
+ -9223372036854775808
1300
+ end
1301
+ end
1302
+
1303
+ class XSDInt < XSDLong
1304
+ Type = QName.new(Namespace, IntLiteral)
1305
+
1306
+ def initialize(value = nil)
1307
+ init(Type, value)
1308
+ end
1309
+
1310
+ private
1311
+
1312
+ def maxinclusive
1313
+ +2147483647
1314
+ end
1315
+
1316
+ def mininclusive
1317
+ -2147483648
1318
+ end
1319
+ end
1320
+
1321
+ class XSDShort < XSDInt
1322
+ Type = QName.new(Namespace, ShortLiteral)
1323
+
1324
+ def initialize(value = nil)
1325
+ init(Type, value)
1326
+ end
1327
+
1328
+ private
1329
+
1330
+ def maxinclusive
1331
+ +32767
1332
+ end
1333
+
1334
+ def mininclusive
1335
+ -32768
1336
+ end
1337
+ end
1338
+
1339
+ class XSDByte < XSDShort
1340
+ Type = QName.new(Namespace, ByteLiteral)
1341
+
1342
+ def initialize(value = nil)
1343
+ init(Type, value)
1344
+ end
1345
+
1346
+ private
1347
+
1348
+ def maxinclusive
1349
+ +127
1350
+ end
1351
+
1352
+ def mininclusive
1353
+ -128
1354
+ end
1355
+ end
1356
+
1357
+ class XSDNonNegativeInteger < XSDInteger
1358
+ Type = QName.new(Namespace, NonNegativeIntegerLiteral)
1359
+
1360
+ def initialize(value = nil)
1361
+ init(Type, value)
1362
+ end
1363
+
1364
+ private
1365
+
1366
+ def maxinclusive
1367
+ nil
1368
+ end
1369
+
1370
+ def mininclusive
1371
+ 0
1372
+ end
1373
+ end
1374
+
1375
+ class XSDUnsignedLong < XSDNonNegativeInteger
1376
+ Type = QName.new(Namespace, UnsignedLongLiteral)
1377
+
1378
+ def initialize(value = nil)
1379
+ init(Type, value)
1380
+ end
1381
+
1382
+ private
1383
+
1384
+ def maxinclusive
1385
+ +18446744073709551615
1386
+ end
1387
+
1388
+ def mininclusive
1389
+ 0
1390
+ end
1391
+ end
1392
+
1393
+ class XSDUnsignedInt < XSDUnsignedLong
1394
+ Type = QName.new(Namespace, UnsignedIntLiteral)
1395
+
1396
+ def initialize(value = nil)
1397
+ init(Type, value)
1398
+ end
1399
+
1400
+ private
1401
+
1402
+ def maxinclusive
1403
+ +4294967295
1404
+ end
1405
+
1406
+ def mininclusive
1407
+ 0
1408
+ end
1409
+ end
1410
+
1411
+ class XSDUnsignedShort < XSDUnsignedInt
1412
+ Type = QName.new(Namespace, UnsignedShortLiteral)
1413
+
1414
+ def initialize(value = nil)
1415
+ init(Type, value)
1416
+ end
1417
+
1418
+ private
1419
+
1420
+ def maxinclusive
1421
+ +65535
1422
+ end
1423
+
1424
+ def mininclusive
1425
+ 0
1426
+ end
1427
+ end
1428
+
1429
+ class XSDUnsignedByte < XSDUnsignedShort
1430
+ Type = QName.new(Namespace, UnsignedByteLiteral)
1431
+
1432
+ def initialize(value = nil)
1433
+ init(Type, value)
1434
+ end
1435
+
1436
+ private
1437
+
1438
+ def maxinclusive
1439
+ +255
1440
+ end
1441
+
1442
+ def mininclusive
1443
+ 0
1444
+ end
1445
+ end
1446
+
1447
+ class XSDPositiveInteger < XSDNonNegativeInteger
1448
+ Type = QName.new(Namespace, PositiveIntegerLiteral)
1449
+
1450
+ def initialize(value = nil)
1451
+ init(Type, value)
1452
+ end
1453
+
1454
+ private
1455
+
1456
+ def maxinclusive
1457
+ nil
1458
+ end
1459
+
1460
+ def mininclusive
1461
+ 1
1462
+ end
1463
+ end
1464
+
1465
+
1466
+ end