stupidedi 1.1.0

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 (500) hide show
  1. data/README.md +215 -0
  2. data/Rakefile +108 -0
  3. data/bin/edi-ed +71 -0
  4. data/bin/edi-pp +81 -0
  5. data/doc/Defining.md +0 -0
  6. data/doc/Generating.md +321 -0
  7. data/doc/LICENSE.md +0 -0
  8. data/doc/Navigating.md +645 -0
  9. data/doc/Parsing.md +0 -0
  10. data/doc/Serializing.md +7 -0
  11. data/doc/Tokenizing.md +0 -0
  12. data/doc/Validating.md +0 -0
  13. data/doc/design/Parser.md +0 -0
  14. data/doc/design/Reader.md +0 -0
  15. data/lib/ruby/array.rb +164 -0
  16. data/lib/ruby/blank.rb +67 -0
  17. data/lib/ruby/enumerable.rb +35 -0
  18. data/lib/ruby/exception.rb +33 -0
  19. data/lib/ruby/hash.rb +4 -0
  20. data/lib/ruby/instance_exec.rb +26 -0
  21. data/lib/ruby/module.rb +79 -0
  22. data/lib/ruby/object.rb +63 -0
  23. data/lib/ruby/string.rb +73 -0
  24. data/lib/ruby/symbol.rb +24 -0
  25. data/lib/ruby/to_d.rb +81 -0
  26. data/lib/ruby/to_date.rb +33 -0
  27. data/lib/ruby/to_time.rb +24 -0
  28. data/lib/ruby/try.rb +43 -0
  29. data/lib/stupidedi/blank_slate.rb +11 -0
  30. data/lib/stupidedi/builder/builder_dsl.rb +281 -0
  31. data/lib/stupidedi/builder/constraint_table.rb +418 -0
  32. data/lib/stupidedi/builder/generation.rb +112 -0
  33. data/lib/stupidedi/builder/instruction.rb +102 -0
  34. data/lib/stupidedi/builder/instruction_table.rb +204 -0
  35. data/lib/stupidedi/builder/navigation.rb +655 -0
  36. data/lib/stupidedi/builder/state_machine.rb +55 -0
  37. data/lib/stupidedi/builder/states/abstract_state.rb +332 -0
  38. data/lib/stupidedi/builder/states/failure_state.rb +69 -0
  39. data/lib/stupidedi/builder/states/functional_group_state.rb +97 -0
  40. data/lib/stupidedi/builder/states/initial_state.rb +63 -0
  41. data/lib/stupidedi/builder/states/interchange_state.rb +94 -0
  42. data/lib/stupidedi/builder/states/loop_state.rb +79 -0
  43. data/lib/stupidedi/builder/states/table_state.rb +96 -0
  44. data/lib/stupidedi/builder/states/transaction_set_state.rb +112 -0
  45. data/lib/stupidedi/builder/states/transmission_state.rb +59 -0
  46. data/lib/stupidedi/builder/tokenization.rb +196 -0
  47. data/lib/stupidedi/builder.rb +23 -0
  48. data/lib/stupidedi/color.rb +93 -0
  49. data/lib/stupidedi/config/code_list_config.rb +42 -0
  50. data/lib/stupidedi/config/editor_config.rb +51 -0
  51. data/lib/stupidedi/config/functional_group_config.rb +62 -0
  52. data/lib/stupidedi/config/interchange_config.rb +79 -0
  53. data/lib/stupidedi/config/transaction_set_config.rb +91 -0
  54. data/lib/stupidedi/config.rb +101 -0
  55. data/lib/stupidedi/editor/00501.rb +341 -0
  56. data/lib/stupidedi/editor/005010/N2.rb +0 -0
  57. data/lib/stupidedi/editor/005010/N3.rb +0 -0
  58. data/lib/stupidedi/editor/005010/N4.rb +63 -0
  59. data/lib/stupidedi/editor/005010/NM1.rb +0 -0
  60. data/lib/stupidedi/editor/005010.rb +469 -0
  61. data/lib/stupidedi/editor/X222-HC837.rb +195 -0
  62. data/lib/stupidedi/editor/abstract_ed.rb +36 -0
  63. data/lib/stupidedi/editor/claim_ack.rb +9 -0
  64. data/lib/stupidedi/editor/implementation_ack.rb +213 -0
  65. data/lib/stupidedi/editor/interchange_ack.rb +9 -0
  66. data/lib/stupidedi/editor/result.rb +100 -0
  67. data/lib/stupidedi/editor/result_set.rb +69 -0
  68. data/lib/stupidedi/editor/transaction_set_ed.rb +275 -0
  69. data/lib/stupidedi/editor/transmission_ed.rb +90 -0
  70. data/lib/stupidedi/editor.rb +37 -0
  71. data/lib/stupidedi/either.rb +287 -0
  72. data/lib/stupidedi/exceptions/invalid_element_error.rb +8 -0
  73. data/lib/stupidedi/exceptions/invalid_schema_error.rb +8 -0
  74. data/lib/stupidedi/exceptions/output_error.rb +8 -0
  75. data/lib/stupidedi/exceptions/parse_error.rb +8 -0
  76. data/lib/stupidedi/exceptions/stupidedi_error.rb +8 -0
  77. data/lib/stupidedi/exceptions/tokenize_error.rb +8 -0
  78. data/lib/stupidedi/exceptions/zipper_error.rb +8 -0
  79. data/lib/stupidedi/exceptions.rb +11 -0
  80. data/lib/stupidedi/guides/005010/X214-HN277.rb +409 -0
  81. data/lib/stupidedi/guides/005010/X221-HP835.rb +613 -0
  82. data/lib/stupidedi/guides/005010/X221A1-HP835.rb +613 -0
  83. data/lib/stupidedi/guides/005010/X222-HC837P.rb +2291 -0
  84. data/lib/stupidedi/guides/005010/X222A1-HC837P.rb +2297 -0
  85. data/lib/stupidedi/guides/005010/X231-FA999.rb +123 -0
  86. data/lib/stupidedi/guides/005010/X231A1-FA999.rb +119 -0
  87. data/lib/stupidedi/guides/005010/element_reqs.rb +38 -0
  88. data/lib/stupidedi/guides/005010/guide_builder.rb +180 -0
  89. data/lib/stupidedi/guides/005010/segment_reqs.rb +32 -0
  90. data/lib/stupidedi/guides/005010.rb +64 -0
  91. data/lib/stupidedi/guides.rb +5 -0
  92. data/lib/stupidedi/inspect.rb +26 -0
  93. data/lib/stupidedi/reader/input/abstract_input.rb +133 -0
  94. data/lib/stupidedi/reader/input/delegated_input.rb +111 -0
  95. data/lib/stupidedi/reader/input/file_input.rb +155 -0
  96. data/lib/stupidedi/reader/input.rb +30 -0
  97. data/lib/stupidedi/reader/position.rb +69 -0
  98. data/lib/stupidedi/reader/result.rb +168 -0
  99. data/lib/stupidedi/reader/segment_dict.rb +175 -0
  100. data/lib/stupidedi/reader/separators.rb +85 -0
  101. data/lib/stupidedi/reader/stream_reader.rb +172 -0
  102. data/lib/stupidedi/reader/token_reader.rb +466 -0
  103. data/lib/stupidedi/reader/tokens/component_element_tok.rb +56 -0
  104. data/lib/stupidedi/reader/tokens/composite_element_tok.rb +64 -0
  105. data/lib/stupidedi/reader/tokens/repeated_element_tok.rb +64 -0
  106. data/lib/stupidedi/reader/tokens/segment_tok.rb +51 -0
  107. data/lib/stupidedi/reader/tokens/simple_element_tok.rb +63 -0
  108. data/lib/stupidedi/reader.rb +121 -0
  109. data/lib/stupidedi/schema/abstract_def.rb +74 -0
  110. data/lib/stupidedi/schema/abstract_use.rb +73 -0
  111. data/lib/stupidedi/schema/code_list.rb +94 -0
  112. data/lib/stupidedi/schema/element_def.rb +173 -0
  113. data/lib/stupidedi/schema/element_req.rb +56 -0
  114. data/lib/stupidedi/schema/element_use.rb +251 -0
  115. data/lib/stupidedi/schema/functional_group_def.rb +114 -0
  116. data/lib/stupidedi/schema/interchange_def.rb +93 -0
  117. data/lib/stupidedi/schema/loop_def.rb +152 -0
  118. data/lib/stupidedi/schema/repeat_count.rb +85 -0
  119. data/lib/stupidedi/schema/segment_def.rb +108 -0
  120. data/lib/stupidedi/schema/segment_req.rb +43 -0
  121. data/lib/stupidedi/schema/segment_use.rb +98 -0
  122. data/lib/stupidedi/schema/syntax_note.rb +63 -0
  123. data/lib/stupidedi/schema/table_def.rb +139 -0
  124. data/lib/stupidedi/schema/transaction_set_def.rb +88 -0
  125. data/lib/stupidedi/schema.rb +28 -0
  126. data/lib/stupidedi/sets/absolute_set.rb +297 -0
  127. data/lib/stupidedi/sets/abstract_set.rb +174 -0
  128. data/lib/stupidedi/sets/null_set.rb +125 -0
  129. data/lib/stupidedi/sets/relative_complement.rb +137 -0
  130. data/lib/stupidedi/sets/relative_set.rb +269 -0
  131. data/lib/stupidedi/sets/universal_set.rb +104 -0
  132. data/lib/stupidedi/sets.rb +57 -0
  133. data/lib/stupidedi/tail_call.rb +109 -0
  134. data/lib/stupidedi/thread_local.rb +174 -0
  135. data/lib/stupidedi/values/abstract_element_val.rb +19 -0
  136. data/lib/stupidedi/values/abstract_val.rb +130 -0
  137. data/lib/stupidedi/values/composite_element_val.rb +95 -0
  138. data/lib/stupidedi/values/functional_group_val.rb +102 -0
  139. data/lib/stupidedi/values/interchange_val.rb +86 -0
  140. data/lib/stupidedi/values/invalid_envelope_val.rb +61 -0
  141. data/lib/stupidedi/values/invalid_segment_val.rb +78 -0
  142. data/lib/stupidedi/values/loop_val.rb +70 -0
  143. data/lib/stupidedi/values/repeated_element_val.rb +105 -0
  144. data/lib/stupidedi/values/segment_val.rb +104 -0
  145. data/lib/stupidedi/values/segment_val_group.rb +20 -0
  146. data/lib/stupidedi/values/simple_element_val.rb +80 -0
  147. data/lib/stupidedi/values/table_val.rb +66 -0
  148. data/lib/stupidedi/values/transaction_set_val.rb +66 -0
  149. data/lib/stupidedi/values/transmission_val.rb +52 -0
  150. data/lib/stupidedi/values.rb +21 -0
  151. data/lib/stupidedi/version.rb +3 -0
  152. data/lib/stupidedi/versions/functional_groups/004010/element_defs.rb +54 -0
  153. data/lib/stupidedi/versions/functional_groups/004010/element_reqs.rb +18 -0
  154. data/lib/stupidedi/versions/functional_groups/004010/element_types/date_val.rb +527 -0
  155. data/lib/stupidedi/versions/functional_groups/004010/element_types/fixnum_val.rb +335 -0
  156. data/lib/stupidedi/versions/functional_groups/004010/element_types/float_val.rb +299 -0
  157. data/lib/stupidedi/versions/functional_groups/004010/element_types/identifier_val.rb +287 -0
  158. data/lib/stupidedi/versions/functional_groups/004010/element_types/string_val.rb +338 -0
  159. data/lib/stupidedi/versions/functional_groups/004010/element_types/time_val.rb +309 -0
  160. data/lib/stupidedi/versions/functional_groups/004010/element_types.rb +124 -0
  161. data/lib/stupidedi/versions/functional_groups/004010/functional_group_def.rb +30 -0
  162. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/GE.rb +20 -0
  163. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/GS.rb +27 -0
  164. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/SE.rb +20 -0
  165. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/ST.rb +20 -0
  166. data/lib/stupidedi/versions/functional_groups/004010/segment_defs.rb +23 -0
  167. data/lib/stupidedi/versions/functional_groups/004010/segment_reqs.rb +18 -0
  168. data/lib/stupidedi/versions/functional_groups/004010/syntax_notes.rb +174 -0
  169. data/lib/stupidedi/versions/functional_groups/004010.rb +38 -0
  170. data/lib/stupidedi/versions/functional_groups/005010/element_defs.rb +1405 -0
  171. data/lib/stupidedi/versions/functional_groups/005010/element_reqs.rb +18 -0
  172. data/lib/stupidedi/versions/functional_groups/005010/element_types/date_val.rb +577 -0
  173. data/lib/stupidedi/versions/functional_groups/005010/element_types/fixnum_val.rb +322 -0
  174. data/lib/stupidedi/versions/functional_groups/005010/element_types/float_val.rb +354 -0
  175. data/lib/stupidedi/versions/functional_groups/005010/element_types/identifier_val.rb +368 -0
  176. data/lib/stupidedi/versions/functional_groups/005010/element_types/operators.rb +117 -0
  177. data/lib/stupidedi/versions/functional_groups/005010/element_types/string_val.rb +398 -0
  178. data/lib/stupidedi/versions/functional_groups/005010/element_types/time_val.rb +327 -0
  179. data/lib/stupidedi/versions/functional_groups/005010/element_types.rb +132 -0
  180. data/lib/stupidedi/versions/functional_groups/005010/functional_group_def.rb +30 -0
  181. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/AK1.rb +21 -0
  182. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/AK2.rb +21 -0
  183. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/AK9.rb +28 -0
  184. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/AMT.rb +21 -0
  185. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/BHT.rb +24 -0
  186. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/BPR.rb +49 -0
  187. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CAS.rb +56 -0
  188. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CL1.rb +22 -0
  189. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CLM.rb +41 -0
  190. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CLP.rb +34 -0
  191. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CN1.rb +24 -0
  192. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CR1.rb +32 -0
  193. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CR2.rb +35 -0
  194. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CR3.rb +25 -0
  195. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CRC.rb +26 -0
  196. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CTP.rb +36 -0
  197. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CTX.rb +24 -0
  198. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CUR.rb +57 -0
  199. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/DMG.rb +34 -0
  200. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/DN1.rb +22 -0
  201. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/DN2.rb +24 -0
  202. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/DTM.rb +24 -0
  203. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/DTP.rb +21 -0
  204. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/FRM.rb +25 -0
  205. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/GE.rb +20 -0
  206. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/GS.rb +27 -0
  207. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/HCP.rb +39 -0
  208. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/HI.rb +31 -0
  209. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/HL.rb +22 -0
  210. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/IK3.rb +22 -0
  211. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/IK4.rb +22 -0
  212. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/IK5.rb +24 -0
  213. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/K3.rb +21 -0
  214. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/LIN.rb +69 -0
  215. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/LQ.rb +22 -0
  216. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/LX.rb +19 -0
  217. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/MEA.rb +39 -0
  218. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/MIA.rb +45 -0
  219. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/MOA.rb +28 -0
  220. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/N1.rb +24 -0
  221. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/N2.rb +20 -0
  222. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/N3.rb +20 -0
  223. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/N4.rb +30 -0
  224. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/NM1.rb +35 -0
  225. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/NTE.rb +20 -0
  226. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/OI.rb +24 -0
  227. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/PAT.rb +31 -0
  228. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/PER.rb +32 -0
  229. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/PLB.rb +40 -0
  230. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/PRV.rb +26 -0
  231. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/PS1.rb +21 -0
  232. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/PWK.rb +30 -0
  233. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/QTY.rb +25 -0
  234. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/RDM.rb +23 -0
  235. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/REF.rb +23 -0
  236. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SBR.rb +28 -0
  237. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SE.rb +20 -0
  238. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/ST.rb +21 -0
  239. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/STC.rb +30 -0
  240. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SV1.rb +44 -0
  241. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SV2.rb +29 -0
  242. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SV3.rb +30 -0
  243. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SV5.rb +29 -0
  244. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SVC.rb +26 -0
  245. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SVD.rb +24 -0
  246. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/TOO.rb +21 -0
  247. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/TRN.rb +22 -0
  248. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/TS2.rb +40 -0
  249. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/TS3.rb +45 -0
  250. data/lib/stupidedi/versions/functional_groups/005010/segment_defs.rb +227 -0
  251. data/lib/stupidedi/versions/functional_groups/005010/segment_reqs.rb +18 -0
  252. data/lib/stupidedi/versions/functional_groups/005010/syntax_notes.rb +165 -0
  253. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/FA999.rb +38 -0
  254. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HB271.rb +85 -0
  255. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HC837.rb +163 -0
  256. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HI278.rb +64 -0
  257. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HN277.rb +74 -0
  258. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HP835.rb +68 -0
  259. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HR276.rb +57 -0
  260. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HS270.rb +53 -0
  261. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/RA820.rb +240 -0
  262. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs.rb +68 -0
  263. data/lib/stupidedi/versions/functional_groups/005010.rb +38 -0
  264. data/lib/stupidedi/versions/functional_groups.rb +8 -0
  265. data/lib/stupidedi/versions/interchanges/00401/element_defs.rb +224 -0
  266. data/lib/stupidedi/versions/interchanges/00401/interchange_def.rb +45 -0
  267. data/lib/stupidedi/versions/interchanges/00401/segment_defs/IEA.rb +20 -0
  268. data/lib/stupidedi/versions/interchanges/00401/segment_defs/ISA.rb +34 -0
  269. data/lib/stupidedi/versions/interchanges/00401/segment_defs/TA1.rb +23 -0
  270. data/lib/stupidedi/versions/interchanges/00401/segment_defs.rb +28 -0
  271. data/lib/stupidedi/versions/interchanges/00401.rb +23 -0
  272. data/lib/stupidedi/versions/interchanges/00501/element_defs.rb +269 -0
  273. data/lib/stupidedi/versions/interchanges/00501/interchange_def.rb +47 -0
  274. data/lib/stupidedi/versions/interchanges/00501/segment_defs/IEA.rb +20 -0
  275. data/lib/stupidedi/versions/interchanges/00501/segment_defs/ISA.rb +34 -0
  276. data/lib/stupidedi/versions/interchanges/00501/segment_defs/ISB.rb +18 -0
  277. data/lib/stupidedi/versions/interchanges/00501/segment_defs/ISE.rb +18 -0
  278. data/lib/stupidedi/versions/interchanges/00501/segment_defs/TA1.rb +23 -0
  279. data/lib/stupidedi/versions/interchanges/00501/segment_defs/TA3.rb +18 -0
  280. data/lib/stupidedi/versions/interchanges/00501/segment_defs.rb +37 -0
  281. data/lib/stupidedi/versions/interchanges/00501.rb +23 -0
  282. data/lib/stupidedi/versions/interchanges.rb +8 -0
  283. data/lib/stupidedi/versions.rb +6 -0
  284. data/lib/stupidedi/writer/claredi.rb +142 -0
  285. data/lib/stupidedi/writer/default.rb +124 -0
  286. data/lib/stupidedi/writer.rb +6 -0
  287. data/lib/stupidedi/zipper/abstract_cursor.rb +351 -0
  288. data/lib/stupidedi/zipper/dangling_cursor.rb +103 -0
  289. data/lib/stupidedi/zipper/edited_cursor.rb +157 -0
  290. data/lib/stupidedi/zipper/memoized_cursor.rb +131 -0
  291. data/lib/stupidedi/zipper/path.rb +124 -0
  292. data/lib/stupidedi/zipper/root_cursor.rb +120 -0
  293. data/lib/stupidedi/zipper.rb +25 -0
  294. data/lib/stupidedi.rb +66 -0
  295. data/spec/examples/integration/generating.example +551 -0
  296. data/spec/examples/integration/navigating.example +214 -0
  297. data/spec/examples/integration/parsing.example +445 -0
  298. data/spec/examples/ruby/array.example +476 -0
  299. data/spec/examples/ruby/blank.example +62 -0
  300. data/spec/examples/ruby/count.example +68 -0
  301. data/spec/examples/ruby/object.example +99 -0
  302. data/spec/examples/ruby/string.example +111 -0
  303. data/spec/examples/ruby/symbol.example +117 -0
  304. data/spec/examples/ruby/to_d.example +90 -0
  305. data/spec/examples/ruby/try.example +50 -0
  306. data/spec/examples/stupidedi/either.example +375 -0
  307. data/spec/examples/stupidedi/reader/failure.example +68 -0
  308. data/spec/examples/stupidedi/reader/input/delegated_input.example +292 -0
  309. data/spec/examples/stupidedi/reader/separators.example +73 -0
  310. data/spec/examples/stupidedi/reader/stream_reader.example +48 -0
  311. data/spec/examples/stupidedi/reader/success.example +34 -0
  312. data/spec/examples/stupidedi/reader/token_reader.example +775 -0
  313. data/spec/examples/stupidedi/reader.example +168 -0
  314. data/spec/examples/stupidedi/sets/absolute_set.example +1577 -0
  315. data/spec/examples/stupidedi/sets/null_set.example +2 -0
  316. data/spec/examples/stupidedi/sets/relative_set.example +2 -0
  317. data/spec/examples/stupidedi/sets/universal_set.example +1 -0
  318. data/spec/examples/stupidedi/versions/005010/element_types/an.example +201 -0
  319. data/spec/examples/stupidedi/versions/005010/element_types/dt.example +258 -0
  320. data/spec/examples/stupidedi/versions/005010/element_types/id.example +192 -0
  321. data/spec/examples/stupidedi/versions/005010/element_types/nn.example +177 -0
  322. data/spec/examples/stupidedi/versions/005010/element_types/r.example +178 -0
  323. data/spec/examples/stupidedi/versions/005010/element_types/tm.example +2 -0
  324. data/spec/examples/stupidedi/zipper/abstract_cursor.example +417 -0
  325. data/spec/examples/stupidedi/zipper.example +9 -0
  326. data/spec/fixtures/X186-AG824/1-bad.txt +21 -0
  327. data/spec/fixtures/X186-AG824/1-good.txt +17 -0
  328. data/spec/fixtures/X186-AG824/2-bad.txt +26 -0
  329. data/spec/fixtures/X186-AG824/2-good.txt +21 -0
  330. data/spec/fixtures/X186-AG824/3-bad.txt +87 -0
  331. data/spec/fixtures/X186-AG824/3-good.txt +61 -0
  332. data/spec/fixtures/X212-HN277/1-bad.txt +54 -0
  333. data/spec/fixtures/X212-HN277/1-good.txt +46 -0
  334. data/spec/fixtures/X212-HN277/2-bad.txt +37 -0
  335. data/spec/fixtures/X212-HN277/2-good.txt +29 -0
  336. data/spec/fixtures/X212-HN277/3-bad.txt +22 -0
  337. data/spec/fixtures/X212-HN277/3-good.txt +17 -0
  338. data/spec/fixtures/X212-HN277/4-bad.txt +30 -0
  339. data/spec/fixtures/X212-HN277/4-good.txt +24 -0
  340. data/spec/fixtures/X212-HR276/1-bad.txt +53 -0
  341. data/spec/fixtures/X212-HR276/1-good.txt +46 -0
  342. data/spec/fixtures/X212-HR276/2-bad.txt +45 -0
  343. data/spec/fixtures/X212-HR276/2-good.txt +38 -0
  344. data/spec/fixtures/X212-HR276/3-bad.txt +32 -0
  345. data/spec/fixtures/X212-HR276/3-good.txt +26 -0
  346. data/spec/fixtures/X212-HR276/4-bad.txt +32 -0
  347. data/spec/fixtures/X212-HR276/4-good.txt +26 -0
  348. data/spec/fixtures/X214-HN277/1-bad.txt +58 -0
  349. data/spec/fixtures/X214-HN277/1-good.txt +47 -0
  350. data/spec/fixtures/X214-HN277/2-bad.txt +34 -0
  351. data/spec/fixtures/X214-HN277/2-good.txt +22 -0
  352. data/spec/fixtures/X214-HN277/3-bad.txt +64 -0
  353. data/spec/fixtures/X214-HN277/3-good.txt +54 -0
  354. data/spec/fixtures/X214-HN277/4-bad.txt +77 -0
  355. data/spec/fixtures/X214-HN277/4-good.txt +63 -0
  356. data/spec/fixtures/X216-HI278/1-bad.txt +42 -0
  357. data/spec/fixtures/X216-HI278/1-good.txt +27 -0
  358. data/spec/fixtures/X216-HI278/2-bad.txt +43 -0
  359. data/spec/fixtures/X216-HI278/2-good.txt +29 -0
  360. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-1.txt +24 -0
  361. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-1_Clean.txt +20 -0
  362. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-2.txt +46 -0
  363. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-2_Clean.txt +30 -0
  364. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-3.txt +38 -0
  365. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-3_Clean.txt +24 -0
  366. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-4a.txt +39 -0
  367. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-4a_Clean.txt +24 -0
  368. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-4b.txt +43 -0
  369. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-4b_Clean.txt +25 -0
  370. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-5.txt +63 -0
  371. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-5_Clean.txt +41 -0
  372. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-6.txt +36 -0
  373. data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-6_Clean.txt +20 -0
  374. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-1r.txt +34 -0
  375. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-1r_Clean.txt +23 -0
  376. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-2r.txt +46 -0
  377. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-2r_Clean.txt +31 -0
  378. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-3r.txt +44 -0
  379. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-3r_Clean.txt +26 -0
  380. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-4ar_Clean.txt +28 -0
  381. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-4br_Clean.txt +35 -0
  382. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-5r.txt +60 -0
  383. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-5r_Clean.txt +42 -0
  384. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-6r.txt +40 -0
  385. data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-6r_Clean.txt +24 -0
  386. data/spec/fixtures/X218-RA820/1-bad.txt +31 -0
  387. data/spec/fixtures/X218-RA820/1-good.txt +25 -0
  388. data/spec/fixtures/X218-RA820/2-bad.txt +37 -0
  389. data/spec/fixtures/X218-RA820/2-good.txt +29 -0
  390. data/spec/fixtures/X218-RA820/3-bad.txt +29 -0
  391. data/spec/fixtures/X218-RA820/3-good.txt +23 -0
  392. data/spec/fixtures/X218-RA820/4-bad.txt +36 -0
  393. data/spec/fixtures/X218-RA820/4-good.txt +27 -0
  394. data/spec/fixtures/X220-BE834/1-bad.txt +35 -0
  395. data/spec/fixtures/X220-BE834/1-good.txt +29 -0
  396. data/spec/fixtures/X220-BE834/10-bad.txt +26 -0
  397. data/spec/fixtures/X220-BE834/10-good.txt +19 -0
  398. data/spec/fixtures/X220-BE834/2-bad.txt +31 -0
  399. data/spec/fixtures/X220-BE834/2-good.txt +23 -0
  400. data/spec/fixtures/X220-BE834/3-bad.txt +36 -0
  401. data/spec/fixtures/X220-BE834/3-good.txt +26 -0
  402. data/spec/fixtures/X220-BE834/4-bad.txt +27 -0
  403. data/spec/fixtures/X220-BE834/4-good.txt +21 -0
  404. data/spec/fixtures/X220-BE834/5-bad.txt +26 -0
  405. data/spec/fixtures/X220-BE834/5-good.txt +17 -0
  406. data/spec/fixtures/X220-BE834/6-bad.txt +25 -0
  407. data/spec/fixtures/X220-BE834/6-good.txt +20 -0
  408. data/spec/fixtures/X220-BE834/7-bad.txt +25 -0
  409. data/spec/fixtures/X220-BE834/7-good.txt +20 -0
  410. data/spec/fixtures/X220-BE834/8-bad.txt +25 -0
  411. data/spec/fixtures/X220-BE834/8-good.txt +20 -0
  412. data/spec/fixtures/X220-BE834/9-bad.txt +27 -0
  413. data/spec/fixtures/X220-BE834/9-good.txt +21 -0
  414. data/spec/fixtures/X221-HP835/1-bad.txt +58 -0
  415. data/spec/fixtures/X221-HP835/1-good.txt +40 -0
  416. data/spec/fixtures/X221-HP835/2-bad.txt +51 -0
  417. data/spec/fixtures/X221-HP835/2-good.txt +40 -0
  418. data/spec/fixtures/X221-HP835/3a-bad.txt +78 -0
  419. data/spec/fixtures/X221-HP835/3a-good.txt +49 -0
  420. data/spec/fixtures/X221-HP835/3b-bad.txt +60 -0
  421. data/spec/fixtures/X221-HP835/3b-good.txt +32 -0
  422. data/spec/fixtures/X221-HP835/3c-bad.txt +55 -0
  423. data/spec/fixtures/X221-HP835/3c-good.txt +34 -0
  424. data/spec/fixtures/X222-HC837/1-bad.txt +60 -0
  425. data/spec/fixtures/X222-HC837/1-good.txt +53 -0
  426. data/spec/fixtures/X222-HC837/10a-bad.txt +52 -0
  427. data/spec/fixtures/X222-HC837/10a-good.txt +40 -0
  428. data/spec/fixtures/X222-HC837/10b-bad.txt +99 -0
  429. data/spec/fixtures/X222-HC837/10b-good.txt +80 -0
  430. data/spec/fixtures/X222-HC837/10c-bad.txt +105 -0
  431. data/spec/fixtures/X222-HC837/10c-good.txt +80 -0
  432. data/spec/fixtures/X222-HC837/11-bad.txt +69 -0
  433. data/spec/fixtures/X222-HC837/11-good.txt +45 -0
  434. data/spec/fixtures/X222-HC837/12-bad.txt +73 -0
  435. data/spec/fixtures/X222-HC837/12-good.txt +51 -0
  436. data/spec/fixtures/X222-HC837/13-bad.txt +64 -0
  437. data/spec/fixtures/X222-HC837/13-good.txt +46 -0
  438. data/spec/fixtures/X222-HC837/3a-bad.txt +83 -0
  439. data/spec/fixtures/X222-HC837/3a-good.txt +59 -0
  440. data/spec/fixtures/X222-HC837/3b-bad.txt +97 -0
  441. data/spec/fixtures/X222-HC837/3b-good.txt +70 -0
  442. data/spec/fixtures/X222-HC837/3c-bad.txt +95 -0
  443. data/spec/fixtures/X222-HC837/3c-good.txt +74 -0
  444. data/spec/fixtures/X222-HC837/4-bad.txt +67 -0
  445. data/spec/fixtures/X222-HC837/4-good.txt +48 -0
  446. data/spec/fixtures/X222-HC837/5-bad.txt +73 -0
  447. data/spec/fixtures/X222-HC837/5-good.txt +60 -0
  448. data/spec/fixtures/X222-HC837/6-bad.txt +50 -0
  449. data/spec/fixtures/X222-HC837/6-good.txt +39 -0
  450. data/spec/fixtures/X222-HC837/7-bad.txt +93 -0
  451. data/spec/fixtures/X222-HC837/7-good.txt +78 -0
  452. data/spec/fixtures/X222-HC837/8-bad.txt +64 -0
  453. data/spec/fixtures/X222-HC837/8-good.txt +52 -0
  454. data/spec/fixtures/X222-HC837/9-bad.txt +56 -0
  455. data/spec/fixtures/X222-HC837/9-good.txt +38 -0
  456. data/spec/fixtures/X223-HC837/1-bad.txt +66 -0
  457. data/spec/fixtures/X223-HC837/1-good.txt +53 -0
  458. data/spec/fixtures/X223-HC837/2-bad.txt +69 -0
  459. data/spec/fixtures/X223-HC837/2-good.txt +60 -0
  460. data/spec/fixtures/X223-HC837/3-bad.txt +89 -0
  461. data/spec/fixtures/X223-HC837/3-good.txt +61 -0
  462. data/spec/fixtures/X223-HC837/4-bad.txt +60 -0
  463. data/spec/fixtures/X223-HC837/4-good.txt +40 -0
  464. data/spec/fixtures/X223-HC837/5-bad.txt +75 -0
  465. data/spec/fixtures/X223-HC837/5-good.txt +58 -0
  466. data/spec/fixtures/X224-HC837/1-bad.txt +54 -0
  467. data/spec/fixtures/X224-HC837/1-good.txt +44 -0
  468. data/spec/fixtures/X224-HC837/2a-bad.txt +52 -0
  469. data/spec/fixtures/X224-HC837/2a-good.txt +42 -0
  470. data/spec/fixtures/X224-HC837/2b-bad.txt +67 -0
  471. data/spec/fixtures/X224-HC837/2b-good.txt +52 -0
  472. data/spec/fixtures/X224-HC837/3-bad.txt +67 -0
  473. data/spec/fixtures/X224-HC837/3-good.txt +51 -0
  474. data/spec/fixtures/X224-HC837/4-bad.txt +49 -0
  475. data/spec/fixtures/X224-HC837/4-good.txt +40 -0
  476. data/spec/fixtures/X230-FA997/1-bad.txt +19 -0
  477. data/spec/fixtures/X230-FA997/1-good.txt +16 -0
  478. data/spec/fixtures/X231-FA999/1-bad.txt +20 -0
  479. data/spec/fixtures/X231-FA999/1-good.txt +20 -0
  480. data/spec/fixtures/X279-HB271/1-bad.txt +36 -0
  481. data/spec/fixtures/X279-HB271/1-good.txt +30 -0
  482. data/spec/fixtures/X279-HB271/2-bad.txt +22 -0
  483. data/spec/fixtures/X279-HB271/2-good.txt +16 -0
  484. data/spec/fixtures/X279-HB271/3-bad.txt +44 -0
  485. data/spec/fixtures/X279-HB271/3-good.txt +36 -0
  486. data/spec/fixtures/X279-HS270/1-bad.txt +29 -0
  487. data/spec/fixtures/X279-HS270/1-good.txt +23 -0
  488. data/spec/fixtures/X279-HS270/2-bad.txt +32 -0
  489. data/spec/fixtures/X279-HS270/2-good.txt +25 -0
  490. data/spec/spec_helper.rb +34 -0
  491. data/spec/support/fixtures.rb +26 -0
  492. data/spec/support/matchers/either_matchers.rb +26 -0
  493. data/spec/support/matchers/navigation_matchers.rb +247 -0
  494. data/spec/support/node.rb +41 -0
  495. data/spec/support/quickcheck/characters.rb +28 -0
  496. data/spec/support/quickcheck/property.rb +105 -0
  497. data/spec/support/quickcheck/serialized_edi.rb +399 -0
  498. data/spec/support/quickcheck.rb +302 -0
  499. data/spec/support/rcov.rb +34 -0
  500. metadata +577 -0
@@ -0,0 +1,34 @@
1
+ module Stupidedi
2
+ module Versions
3
+ module Interchanges
4
+ module FourOhOne
5
+ module SegmentDefs
6
+
7
+ s = Schema
8
+ e = ElementDefs
9
+ r = FunctionalGroups::FortyTen::ElementReqs
10
+
11
+ ISA = s::SegmentDef.build(:ISA, "Interchange Control Header",
12
+ "To start and identify an interchange of zero or more functional groups and interchange-related control segments",
13
+ e::I01.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
14
+ e::I02.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
15
+ e::I03.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
16
+ e::I04.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
17
+ e::I05.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
18
+ e::I06.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
19
+ e::I05.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
20
+ e::I07.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
21
+ e::I08.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
22
+ e::I09.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
23
+ e::I10.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
24
+ e::I11.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
25
+ e::I12.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
26
+ e::I13.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
27
+ e::I14.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
28
+ e::I15.simple_use(r::Mandatory, s::RepeatCount.bounded(1)))
29
+
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,23 @@
1
+ module Stupidedi
2
+ module Versions
3
+ module Interchanges
4
+ module FourOhOne
5
+ module SegmentDefs
6
+
7
+ s = Schema
8
+ e = ElementDefs
9
+ r = FunctionalGroups::FortyTen::ElementReqs
10
+
11
+ TA1 = s::SegmentDef.build(:TA1, "Interchange Acknowledgement",
12
+ "To report the status of processing a received interchange header and trailer or the non-delivery by a network provider",
13
+ e::I12.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
14
+ e::I08.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
15
+ e::I09.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
16
+ e::I17.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
17
+ e::I18.simple_use(r::Mandatory, s::RepeatCount.bounded(1)))
18
+
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,28 @@
1
+ module Stupidedi
2
+ module Versions
3
+ module Interchanges
4
+ module FourOhOne
5
+
6
+ #
7
+ # @see Schema::SegmentDef.build
8
+ #
9
+ module SegmentDefs
10
+
11
+ s = Schema
12
+ e = ElementDefs
13
+ m = FunctionalGroups::FortyTen::ElementReqs
14
+
15
+ autoload :ISA,
16
+ "stupidedi/versions/interchanges/00401/segment_defs/ISA"
17
+
18
+ autoload :IEA,
19
+ "stupidedi/versions/interchanges/00401/segment_defs/IEA"
20
+
21
+ autoload :TA1,
22
+ "stupidedi/versions/interchanges/00401/segment_defs/TA1"
23
+
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,23 @@
1
+ module Stupidedi
2
+ module Versions
3
+ module Interchanges
4
+
5
+ #
6
+ # @see FunctionalGroups::FortyTen
7
+ #
8
+ module FourOhOne
9
+
10
+ autoload :ElementDefs,
11
+ "stupidedi/versions/interchanges/00401/element_defs"
12
+
13
+ autoload :SegmentDefs,
14
+ "stupidedi/versions/interchanges/00401/segment_defs"
15
+
16
+ autoload :InterchangeDef,
17
+ "stupidedi/versions/interchanges/00401/interchange_def"
18
+
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,269 @@
1
+ module Stupidedi
2
+ module Versions
3
+ module Interchanges
4
+ module FiveOhOne
5
+
6
+ #
7
+ # @see FunctionalGroups::FiftyTen::ElementTypes
8
+ # @see Schema::CodeList
9
+ #
10
+ module ElementDefs
11
+
12
+ # Import definitions of B, DT, R, ID, Nn, AN, TM, and SimpleElementDef
13
+ t = FunctionalGroups::FiftyTen::ElementTypes
14
+ s = Schema
15
+
16
+ # Namespace workaround for SpecialAN inner classes
17
+ T = t
18
+
19
+ # Fun (stupid) problem. The specifications declare ISA02 and ISA04 are
20
+ # required elements, but they only have "meaningful information" when
21
+ # ISA01 and ISA03 qualifiers aren't "00".
22
+ #
23
+ # Without specifications regarding what should be entered in these
24
+ # required elements, our best option is to defer to convention, which
25
+ # seems to be that these elements should have 10 spaces -- which means
26
+ # they're blank. So we can't really make these elements required! Even
27
+ # stupider, these are the only blank elements that should be written
28
+ # out space-padded to the min_length -- every other element should be
29
+ # collapsed to an empty string.
30
+ #
31
+ # So this "Special" class overrides to_x12 for empty values, but it
32
+ # otherwise looks and acts like a normal AN and StringVal
33
+ class SpecialAN < t::AN
34
+ def companion
35
+ SpecialVal
36
+ end
37
+
38
+ class SpecialVal < T::StringVal
39
+ class Empty < T::StringVal::Empty
40
+ # @return [String]
41
+ def to_x12
42
+ " " * definition.min_length
43
+ end
44
+ end
45
+
46
+ class NonEmpty < T::StringVal::NonEmpty
47
+ def too_short?
48
+ false
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ class SeparatorElementVal < Values::SimpleElementVal
55
+
56
+ delegate :to_s, :length, :to => :@value
57
+
58
+ def initialize(value, usage, position)
59
+ @value = value
60
+ super(usage, position)
61
+ end
62
+
63
+ # @return [SeparatorElementVal]
64
+ def copy(changes = {})
65
+ SeparatorElementVal.new \
66
+ changes.fetch(:value, @value),
67
+ changes.fetch(:usage, usage),
68
+ changes.fetch(:position, position)
69
+ end
70
+
71
+ def valid?
72
+ true
73
+ end
74
+
75
+ def empty?
76
+ @value.blank?
77
+ end
78
+
79
+ def too_short?
80
+ @value.length < 1
81
+ end
82
+
83
+ def too_long?
84
+ @value.length > 1
85
+ end
86
+
87
+ def separator?
88
+ true
89
+ end
90
+
91
+ # @return [String]
92
+ def to_x12
93
+ @value.to_s
94
+ end
95
+
96
+ def inspect
97
+ id = definition.try{|d| ansi.bold("[#{d.id}]") }
98
+ ansi.element("SeparatorElementVal.value#{id}") << "(#{@value || "nil"})"
99
+ end
100
+ end
101
+
102
+ class << SeparatorElementVal
103
+ # @group Constructors
104
+ ###################################################################
105
+
106
+ # @raise NoMethodError
107
+ def empty(usage, position)
108
+ SeparatorElementVal.new(nil, usage, position)
109
+ end
110
+
111
+ # @return [SeparatorElementVal]
112
+ def value(character, usage, position)
113
+ SeparatorElementVal.new(character, usage, position)
114
+ end
115
+
116
+ # @return [SeparatorElementVal]
117
+ def parse(character, usage, position)
118
+ SeparatorElementVal.new(character, usage, position)
119
+ end
120
+
121
+ # @endgroup
122
+ ###################################################################
123
+ end
124
+
125
+ I01 = t::ID.new(:I01, "Authorization Information Qualifier", 2, 2,
126
+ s::CodeList.build(
127
+ "00" => "No Authorization Information Present (No Meaningful Information in I02)",
128
+ "01" => "UCS Communications ID",
129
+ "02" => "EDX Communications ID",
130
+ "03" => "Additional Data Identification",
131
+ "04" => "Rail Communication ID",
132
+ "05" => "Deparment of Defense (DoD) Communication Identifier",
133
+ "06" => "United States Federal Government Communication Identifier"))
134
+
135
+ I02 = SpecialAN.new(:I02, "Authorization Information", 10, 10)
136
+
137
+ I03 = t::ID.new(:I03, "Security Information Qualifier", 2, 2,
138
+ s::CodeList.build(
139
+ "00" => "No Security Information (No Meaningful Information in I04)",
140
+ "01" => "Password"))
141
+
142
+ I04 = SpecialAN.new(:I04, "Security Information", 10, 10)
143
+
144
+ I05 = t::ID.new(:I05, "Interchange ID Qualifier", 2, 2,
145
+ s::CodeList.build(
146
+ "01" => "Duns (Dun & Bradstreet)",
147
+ "02" => "SCAC (Standard Carrier Alpha Code)",
148
+ "03" => "FMC (Federal Maritime Commission)",
149
+ "04" => "IATA (International Air Transport Association)",
150
+ "07" => s::CodeList.external("583"),
151
+ "08" => "UCC EDI Communications ID (Comm ID)",
152
+ "09" => "X.121 (CCITT)",
153
+ "10" => s::CodeList.external("350"),
154
+ "11" => "DEA (Drug Enforcement Administration)",
155
+ "12" => "Phone (Telephone Companies)",
156
+ "13" => "UCS Code (The UCS Code is a Code Used for UCS Transmissions; it includes the Area Code and Telephone Number of a Modem; it Does Not Include Punctation, Blanks, or Access Code)",
157
+ "14" => "Duns Plus Suffix",
158
+ "15" => "Petroleum Accountants Society of Canada Company Code",
159
+ "16" => "Duns Number With 4-Character Suffix",
160
+ "17" => "American Bankers Association (ABA) Transit Routing Number (Including Check Digit, 9 Digit)",
161
+ "18" => s::CodeList.external("420"),
162
+ "19" => s::CodeList.external("421"),
163
+ "20" => s::CodeList.external("121"),
164
+ "21" => s::CodeList.external("422"),
165
+ "22" => s::CodeList.external("423"),
166
+ "23" => s::CodeList.external("424"),
167
+ "24" => s::CodeList.external("425"),
168
+ "25" => s::CodeList.external("426"),
169
+ "26" => s::CodeList.external("296", "300"),
170
+ "27" => "Carrier Identification Number as assigned by Health Care Financing Administration (HCFA)",
171
+ "28" => "Fiscal Intermediary Identification Number as assigned by Health Care Financing Administration (HCFA)",
172
+ "29" => "Medicare Provider and Supplier Identification Number as assigned by Health Care Financing Administration (HCFA)",
173
+ "30" => "US Federal Tax Identification Number",
174
+ "31" => "Jurisdiction Identification Number Plus 4 as assigned by the Interational Association of Industrial Accident Boards and Commissions (IAIABC)",
175
+ "32" => "US Federal Employer Identification Number (FEIN)",
176
+ "33" => "National Association of Insurance Commissioners Company Code (NAIC)",
177
+ "34" => "Medicaid Provider and Supplier Identification Number as assigned by individual State Medicaid Agencies in conjunction with Health Care Financing Administration (HCFA)",
178
+ "35" => "Statistics Canada Canadian College Student Information System Institution Codes",
179
+ "36" => s::CodeList.external("300"),
180
+ "37" => s::CodeList.external("573"),
181
+ "38" => s::CodeList.external("862"),
182
+ "AM" => s::CodeList.external("497"),
183
+ "NR" => "National Retail Merchants Association (NRMA) Assigned",
184
+ "SA" => s::CodeList.external("851"),
185
+ "SN" => s::CodeList.external("42"),
186
+ "ZZ" => "Mutually Defined"))
187
+
188
+ I06 = SpecialAN.new(:I06, "Interchange Sender ID", 15, 15)
189
+ I07 = SpecialAN.new(:I07, "Interchange Receiver ID", 15, 15)
190
+ I08 = t::DT.new(:I08, "Interchange Date", 6, 6)
191
+ I09 = t::TM.new(:I09, "Interchange Time", 4, 4)
192
+
193
+ I11 = t::ID.new(:I11, "Interchange Control Version Number", 5, 5,
194
+ s::CodeList.build(
195
+ "00501" => "Standards Approved for Publication by ASC X12 Procedures Review Board through October 2003"))
196
+
197
+ I12 = t::Nn.new(:I12, "Interchange Control Number", 9, 9, 0)
198
+
199
+ I13 = t::ID.new(:I13, "Acknowledgment Requested", 1, 1,
200
+ s::CodeList.build(
201
+ "0" => "No Interchange Acknowledgment Requested",
202
+ "1" => "Interchange Acknowledgment Requested (TA1)"))
203
+
204
+ I14 = t::ID.new(:I14, "Interchange Usage Indicator", 1, 1,
205
+ s::CodeList.build(
206
+ "I" => "Information",
207
+ "P" => "Production Data",
208
+ "T" => "Test Data"))
209
+
210
+ I15 = Class.new(t::SimpleElementDef) do
211
+ def companion
212
+ SeparatorElementVal
213
+ end
214
+ end.new(:I15, "Component Element Separator", 1, 1)
215
+
216
+ I16 = t::Nn.new(:I16, "Number of Included Functional Groups", 1, 5, 0)
217
+
218
+ I17 = t::ID.new(:I17, "Interchange Acknowledgement Code", 1, 1,
219
+ s::CodeList.build(
220
+ "A" => "The Transmitted Interchange Control Structure Header and Trailer Have Been Received and Have No Errors",
221
+ "E" => "The Transmitted Interchange Control Structure Header and Trailer Have Been Received and Are Accepted But Errors Are Noted. This Means the Sender Must Not Resend the Data.",
222
+ "R" => "The Transmitted Interchange Control Structure Header and Trailer are Rejected Because of Errors"))
223
+
224
+ I18 = t::ID.new(:I18, "Interchange Note Code", 3, 3,
225
+ s::CodeList.build(
226
+ "000" => "No error",
227
+ "001" => "The Interchange Control Number in the Header and Trailer Do Not Match. The Value From the Header is Used in the Acknowledgement",
228
+ "002" => "This Standard as Noted in the Control Standards Identifier is Not Supported",
229
+ "003" => "This Version of the Controls is Not Supported",
230
+ "004" => "The Segment Terminator is Invalid",
231
+ "005" => "Invalid Interchange ID Qualifier for Sender",
232
+ "006" => "Invalid Interchange Sender ID",
233
+ "007" => "Invalid Interchange ID Qualifier for Receiver",
234
+ "008" => "Invalid Interchange Receiver ID",
235
+ "009" => "Unknown Interchange Receiver ID",
236
+ "010" => "Invalid Authorization Information Qualifier Value",
237
+ "011" => "Invalid Authorization Information Value",
238
+ "012" => "Invalid Security Information Qualifier Value",
239
+ "013" => "Invalid Security Information Value",
240
+ "014" => "Invalid Interchange Date Value",
241
+ "015" => "Invalid Interchange Time Value",
242
+ "016" => "Invalid Interchange Standards Identifier Value",
243
+ "017" => "Invalid Interchange Version ID Value",
244
+ "018" => "Invalid Interchange Control Number Value",
245
+ "019" => "Invalid Acknowledgement Requested Value",
246
+ "020" => "Invalid Test Indicator Value",
247
+ "021" => "Invalid Number of Included Groups Value",
248
+ "022" => "Invalid Control Characters",
249
+ "023" => "Improper (Premature) End-of-File (Transmission)",
250
+ "024" => "Invalid Interchange Content (ex Invalid GS Segment)",
251
+ "025" => "Duplicate Interchange Control Numbers",
252
+ "026" => "Invalid Data Structure Separator",
253
+ "027" => "Invalid Component Element Separator",
254
+ "028" => "Invalid Date in Deferred Delivery Request",
255
+ "029" => "Invalid Time in Deferred Delivery Request",
256
+ "030" => "Invalid Delivery Time Code in Deferred Delivery Request",
257
+ "031" => "Invalid Grade of Service"))
258
+
259
+ I65 = Class.new(t::SimpleElementDef) do
260
+ def companion
261
+ SeparatorElementVal
262
+ end
263
+ end.new(:I65, "Repetition Separator", 1, 1)
264
+
265
+ end
266
+ end
267
+ end
268
+ end
269
+ end
@@ -0,0 +1,47 @@
1
+ module Stupidedi
2
+ module Versions
3
+ module Interchanges
4
+
5
+ #
6
+ # @see Values::InterchangeDef
7
+ #
8
+ module FiveOhOne
9
+
10
+ s = Schema
11
+ r = FunctionalGroups::FiftyTen::ElementReqs
12
+
13
+ InterchangeDef = Class.new(Schema::InterchangeDef) do
14
+ # @group Constructors
15
+ #####################################################################
16
+
17
+ # @return [Values::InterchangeVal]
18
+ def empty(separators)
19
+ Values::InterchangeVal.new(self, [], separators)
20
+ end
21
+
22
+ # @endgroup
23
+ #####################################################################
24
+
25
+ # @return [Module]
26
+ def segment_dict
27
+ SegmentDefs
28
+ end
29
+
30
+ # @return [Reader::Separators]
31
+ def separators(isa)
32
+ Reader::Separators.new(isa.element(16).to_s, isa.element(11).to_s, nil, nil)
33
+ end
34
+ end.new "00501",
35
+ # Interchange header
36
+ [ SegmentDefs::ISA.use(1, r::Mandatory, s::RepeatCount.bounded(1)),
37
+ # SegmentDefs::ISB.use(2, r::Optional, s::RepeatCount.bounded(1)),
38
+ # SegmentDefs::ISE.use(3, r::Optional, s::RepeatCount.bounded(1)),
39
+ SegmentDefs::TA1.use(4, r::Optional, s::RepeatCount.unbounded) ],
40
+
41
+ # Interchange trailer
42
+ [ SegmentDefs::IEA.use(5, r::Mandatory, s::RepeatCount.bounded(1)) ]
43
+
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,20 @@
1
+ module Stupidedi
2
+ module Versions
3
+ module Interchanges
4
+ module FiveOhOne
5
+ module SegmentDefs
6
+
7
+ s = Schema
8
+ e = ElementDefs
9
+ r = FunctionalGroups::FiftyTen::ElementReqs
10
+
11
+ IEA = s::SegmentDef.build(:IEA, "Interchange Control Trailer",
12
+ "To define the end of an interchange of zero or more functional groups and interchange-related control segments",
13
+ e::I16.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
14
+ e::I12.simple_use(r::Mandatory, s::RepeatCount.bounded(1)))
15
+
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,34 @@
1
+ module Stupidedi
2
+ module Versions
3
+ module Interchanges
4
+ module FiveOhOne
5
+ module SegmentDefs
6
+
7
+ s = Schema
8
+ e = ElementDefs
9
+ r = FunctionalGroups::FiftyTen::ElementReqs
10
+
11
+ ISA = s::SegmentDef.build(:ISA, "Interchange Control Header",
12
+ "To start and identify an interchange of zero or more functional groups and interchange-related control segments",
13
+ e::I01.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
14
+ e::I02.simple_use(r::Optional, s::RepeatCount.bounded(1)),
15
+ e::I03.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
16
+ e::I04.simple_use(r::Optional, s::RepeatCount.bounded(1)),
17
+ e::I05.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
18
+ e::I06.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
19
+ e::I05.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
20
+ e::I07.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
21
+ e::I08.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
22
+ e::I09.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
23
+ e::I65.simple_use(r::Optional, s::RepeatCount.bounded(1)),
24
+ e::I11.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
25
+ e::I12.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
26
+ e::I13.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
27
+ e::I14.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
28
+ e::I15.simple_use(r::Optional, s::RepeatCount.bounded(1)))
29
+
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,18 @@
1
+ module Stupidedi
2
+ module Versions
3
+ module Interchanges
4
+ module FiveOhOne
5
+ module SegmentDefs
6
+
7
+ s = Schema
8
+ e = ElementDefs
9
+ r = FunctionalGroups::FiftyTen::ElementReqs
10
+
11
+ # @todo: Where's the documentation for this?
12
+ ISB = s::SegmentDef.build(:ISB, "Grade of Service Request", "")
13
+
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ module Stupidedi
2
+ module Versions
3
+ module Interchanges
4
+ module FiveOhOne
5
+ module SegmentDefs
6
+
7
+ s = Schema
8
+ e = ElementDefs
9
+ r = FunctionalGroups::FiftyTen::ElementReqs
10
+
11
+ # @todo: Where's the documentation for this?
12
+ ISE = s::SegmentDef.build(:ISE, "Deferred Delivery Request", "")
13
+
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,23 @@
1
+ module Stupidedi
2
+ module Versions
3
+ module Interchanges
4
+ module FiveOhOne
5
+ module SegmentDefs
6
+
7
+ s = Schema
8
+ e = ElementDefs
9
+ r = FunctionalGroups::FiftyTen::ElementReqs
10
+
11
+ TA1 = s::SegmentDef.build(:TA1, "Interchange Acknowledgement",
12
+ "",
13
+ e::I12.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
14
+ e::I08.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
15
+ e::I09.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
16
+ e::I17.simple_use(r::Mandatory, s::RepeatCount.bounded(1)),
17
+ e::I18.simple_use(r::Mandatory, s::RepeatCount.bounded(1)))
18
+
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,18 @@
1
+ module Stupidedi
2
+ module Versions
3
+ module Interchanges
4
+ module FiveOhOne
5
+ module SegmentDefs
6
+
7
+ s = Schema
8
+ e = ElementDefs
9
+ r = FunctionalGroups::FiftyTen::ElementReqs
10
+
11
+ # @todo: Where's the documentation for this?
12
+ TA3 = s::SegmentDef.build(:TA3, "Interchange Delivery Notice", "")
13
+
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,37 @@
1
+ module Stupidedi
2
+ module Versions
3
+ module Interchanges
4
+ module FiveOhOne
5
+
6
+ #
7
+ # @see Schema::SegmentDef.build
8
+ #
9
+ module SegmentDefs
10
+
11
+ s = Schema
12
+ e = ElementDefs
13
+ m = FunctionalGroups::FiftyTen::ElementReqs
14
+
15
+ autoload :ISA,
16
+ "stupidedi/versions/interchanges/00501/segment_defs/ISA"
17
+
18
+ autoload :IEA,
19
+ "stupidedi/versions/interchanges/00501/segment_defs/IEA"
20
+
21
+ # autoload :ISB,
22
+ # "stupidedi/versions/interchanges/00501/segment_defs/ISB"
23
+
24
+ # autoload :ISE,
25
+ # "stupidedi/versions/interchanges/00501/segment_defs/ISE"
26
+
27
+ autoload :TA1,
28
+ "stupidedi/versions/interchanges/00501/segment_defs/TA1"
29
+
30
+ # autoload :TA3,
31
+ # "stupidedi/versions/interchanges/00501/segment_defs/TA3"
32
+
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,23 @@
1
+ module Stupidedi
2
+ module Versions
3
+ module Interchanges
4
+
5
+ #
6
+ # @see FunctionalGroups::FiftyTen
7
+ #
8
+ module FiveOhOne
9
+
10
+ autoload :ElementDefs,
11
+ "stupidedi/versions/interchanges/00501/element_defs"
12
+
13
+ autoload :SegmentDefs,
14
+ "stupidedi/versions/interchanges/00501/segment_defs"
15
+
16
+ autoload :InterchangeDef,
17
+ "stupidedi/versions/interchanges/00501/interchange_def"
18
+
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,8 @@
1
+ module Stupidedi
2
+ module Versions
3
+ module Interchanges
4
+ autoload :FourOhOne, "stupidedi/versions/interchanges/00401"
5
+ autoload :FiveOhOne, "stupidedi/versions/interchanges/00501"
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,6 @@
1
+ module Stupidedi
2
+ module Versions
3
+ autoload :FunctionalGroups, "stupidedi/versions/functional_groups"
4
+ autoload :Interchanges, "stupidedi/versions/interchanges"
5
+ end
6
+ end