stupidedi 1.1.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (714) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +217 -90
  3. data/Rakefile +13 -7
  4. data/bin/edi-ed +8 -31
  5. data/bin/edi-pp +25 -50
  6. data/doc/Navigating.md +4 -0
  7. data/doc/{Defining.md → unwritten/Defining.md} +0 -0
  8. data/doc/{Parsing.md → unwritten/Parsing.md} +0 -0
  9. data/doc/{Tokenizing.md → unwritten/Tokenizing.md} +0 -0
  10. data/doc/{Validating.md → unwritten/Validating.md} +0 -0
  11. data/lib/ruby/array.rb +17 -0
  12. data/lib/ruby/blank.rb +4 -2
  13. data/lib/ruby/enumerable.rb +2 -2
  14. data/lib/ruby/module.rb +0 -28
  15. data/lib/ruby/to_d.rb +5 -5
  16. data/lib/ruby/try.rb +4 -2
  17. data/lib/stupidedi.rb +3 -0
  18. data/lib/stupidedi/builder.rb +1 -0
  19. data/lib/stupidedi/builder/builder_dsl.rb +2 -2
  20. data/lib/stupidedi/builder/constraint_table.rb +42 -14
  21. data/lib/stupidedi/builder/identifier_stack.rb +167 -0
  22. data/lib/stupidedi/builder/navigation.rb +95 -33
  23. data/lib/stupidedi/config.rb +53 -5
  24. data/lib/stupidedi/config/editor_config.rb +1 -2
  25. data/lib/stupidedi/config/functional_group_config.rb +2 -1
  26. data/lib/stupidedi/config/interchange_config.rb +3 -1
  27. data/lib/stupidedi/contrib.rb +9 -0
  28. data/lib/stupidedi/contrib/002001.rb +13 -0
  29. data/lib/stupidedi/contrib/002001/guides.rb +20 -0
  30. data/lib/stupidedi/contrib/002001/guides/FA997.rb +80 -0
  31. data/lib/stupidedi/contrib/002001/guides/PO830.rb +182 -0
  32. data/lib/stupidedi/contrib/002001/guides/SH856.rb +215 -0
  33. data/lib/stupidedi/contrib/002001/transaction_set_defs.rb +23 -0
  34. data/lib/stupidedi/contrib/002001/transaction_set_defs/FA997.rb +30 -0
  35. data/lib/stupidedi/contrib/002001/transaction_set_defs/PO830.rb +45 -0
  36. data/lib/stupidedi/contrib/002001/transaction_set_defs/SH856.rb +37 -0
  37. data/lib/stupidedi/contrib/003010.rb +13 -0
  38. data/lib/stupidedi/contrib/003010/guides.rb +21 -0
  39. data/lib/stupidedi/contrib/003010/guides/PC860.rb +170 -0
  40. data/lib/stupidedi/contrib/003010/guides/PO850.rb +168 -0
  41. data/lib/stupidedi/contrib/003010/guides/RA820.rb +169 -0
  42. data/lib/stupidedi/contrib/003010/transaction_set_defs.rb +21 -0
  43. data/lib/stupidedi/contrib/003010/transaction_set_defs/PC860.rb +47 -0
  44. data/lib/stupidedi/contrib/003010/transaction_set_defs/PO850.rb +48 -0
  45. data/lib/stupidedi/contrib/003010/transaction_set_defs/RA820.rb +38 -0
  46. data/lib/stupidedi/contrib/003040.rb +13 -0
  47. data/lib/stupidedi/contrib/003040/guides.rb +19 -0
  48. data/lib/stupidedi/contrib/003040/guides/WA142.rb +184 -0
  49. data/lib/stupidedi/contrib/003040/transaction_set_defs.rb +15 -0
  50. data/lib/stupidedi/contrib/003040/transaction_set_defs/WA142.rb +52 -0
  51. data/lib/stupidedi/contrib/003050.rb +13 -0
  52. data/lib/stupidedi/contrib/003050/guides.rb +15 -0
  53. data/lib/stupidedi/contrib/003050/guides/PO850.rb +95 -0
  54. data/lib/stupidedi/contrib/003050/transaction_set_defs.rb +14 -0
  55. data/lib/stupidedi/contrib/003050/transaction_set_defs/PO850.rb +42 -0
  56. data/lib/stupidedi/contrib/004010.rb +13 -0
  57. data/lib/stupidedi/contrib/004010/guides.rb +26 -0
  58. data/lib/stupidedi/contrib/004010/guides/AR943.rb +87 -0
  59. data/lib/stupidedi/contrib/004010/guides/FA997.rb +80 -0
  60. data/lib/stupidedi/contrib/004010/guides/GF990.rb +48 -0
  61. data/lib/stupidedi/contrib/004010/guides/OW940.rb +120 -0
  62. data/lib/stupidedi/contrib/004010/guides/PO850.rb +105 -0
  63. data/lib/stupidedi/contrib/004010/guides/PS830.rb +163 -0
  64. data/lib/stupidedi/contrib/004010/guides/QM214.rb +127 -0
  65. data/lib/stupidedi/contrib/004010/guides/RE944.rb +73 -0
  66. data/lib/stupidedi/contrib/004010/guides/SH856.rb +185 -0
  67. data/lib/stupidedi/contrib/004010/guides/SM204.rb +283 -0
  68. data/lib/stupidedi/contrib/004010/guides/SQ866.rb +119 -0
  69. data/lib/stupidedi/contrib/004010/guides/SS862.rb +177 -0
  70. data/lib/stupidedi/contrib/004010/guides/SW945.rb +119 -0
  71. data/lib/stupidedi/contrib/004010/transaction_set_defs.rb +51 -0
  72. data/lib/stupidedi/contrib/004010/transaction_set_defs/AR943.rb +34 -0
  73. data/lib/stupidedi/contrib/004010/transaction_set_defs/FA997.rb +30 -0
  74. data/lib/stupidedi/contrib/004010/transaction_set_defs/GF990.rb +21 -0
  75. data/lib/stupidedi/contrib/004010/transaction_set_defs/OW940.rb +43 -0
  76. data/lib/stupidedi/contrib/004010/transaction_set_defs/PO850.rb +42 -0
  77. data/lib/stupidedi/contrib/004010/transaction_set_defs/PS830.rb +44 -0
  78. data/lib/stupidedi/contrib/004010/transaction_set_defs/QM214.rb +40 -0
  79. data/lib/stupidedi/contrib/004010/transaction_set_defs/RE944.rb +34 -0
  80. data/lib/stupidedi/contrib/004010/transaction_set_defs/SH856.rb +35 -0
  81. data/lib/stupidedi/contrib/004010/transaction_set_defs/SM204.rb +66 -0
  82. data/lib/stupidedi/contrib/004010/transaction_set_defs/SQ866.rb +32 -0
  83. data/lib/stupidedi/contrib/004010/transaction_set_defs/SS862.rb +40 -0
  84. data/lib/stupidedi/contrib/004010/transaction_set_defs/SW945.rb +43 -0
  85. data/lib/stupidedi/editor.rb +4 -1
  86. data/lib/stupidedi/editor/00401.rb +341 -0
  87. data/lib/stupidedi/editor/004010.rb +452 -0
  88. data/{doc/LICENSE.md → lib/stupidedi/editor/004010/N2.rb} +0 -0
  89. data/lib/stupidedi/editor/004010/N3.rb +0 -0
  90. data/lib/stupidedi/editor/004010/N4.rb +63 -0
  91. data/lib/stupidedi/editor/004010/NM1.rb +0 -0
  92. data/lib/stupidedi/editor/X12.rb +157 -0
  93. data/lib/stupidedi/editor/transaction_set_ed.rb +1 -1
  94. data/lib/stupidedi/either.rb +2 -2
  95. data/lib/stupidedi/guides.rb +1 -0
  96. data/lib/stupidedi/guides/004010.rb +19 -0
  97. data/lib/stupidedi/guides/004010/X091A1-HP835.rb +530 -0
  98. data/lib/stupidedi/guides/004010/element_reqs.rb +38 -0
  99. data/lib/stupidedi/guides/004010/guide_builder.rb +180 -0
  100. data/lib/stupidedi/guides/004010/segment_reqs.rb +32 -0
  101. data/lib/stupidedi/guides/005010.rb +0 -1
  102. data/lib/stupidedi/guides/005010/X222-HC837P.rb +3 -3
  103. data/lib/stupidedi/guides/005010/X222A1-HC837P.rb +3 -3
  104. data/lib/stupidedi/guides/005010/guide_builder.rb +21 -1
  105. data/lib/stupidedi/reader/input/abstract_input.rb +10 -6
  106. data/lib/stupidedi/reader/input/delegated_input.rb +11 -7
  107. data/lib/stupidedi/reader/tokens/repeated_element_tok.rb +3 -2
  108. data/lib/stupidedi/schema.rb +12 -12
  109. data/lib/stupidedi/schema/code_list.rb +3 -2
  110. data/lib/stupidedi/schema/element_use.rb +4 -3
  111. data/lib/stupidedi/schema/loop_def.rb +4 -3
  112. data/lib/stupidedi/schema/repeat_count.rb +3 -2
  113. data/lib/stupidedi/schema/segment_use.rb +5 -4
  114. data/lib/stupidedi/schema/syntax_note.rb +2 -2
  115. data/lib/stupidedi/schema/table_def.rb +4 -0
  116. data/lib/stupidedi/sets.rb +12 -27
  117. data/lib/stupidedi/values/composite_element_val.rb +5 -3
  118. data/lib/stupidedi/values/functional_group_val.rb +3 -2
  119. data/lib/stupidedi/values/interchange_val.rb +15 -1
  120. data/lib/stupidedi/values/invalid_envelope_val.rb +3 -2
  121. data/lib/stupidedi/values/invalid_segment_val.rb +2 -1
  122. data/lib/stupidedi/values/loop_val.rb +3 -2
  123. data/lib/stupidedi/values/repeated_element_val.rb +10 -3
  124. data/lib/stupidedi/values/segment_val.rb +3 -1
  125. data/lib/stupidedi/values/simple_element_val.rb +4 -2
  126. data/lib/stupidedi/values/table_val.rb +3 -2
  127. data/lib/stupidedi/values/transaction_set_val.rb +3 -2
  128. data/lib/stupidedi/version.rb +1 -1
  129. data/lib/stupidedi/versions/functional_groups.rb +6 -2
  130. data/lib/stupidedi/versions/functional_groups/002001.rb +38 -0
  131. data/lib/stupidedi/versions/functional_groups/002001/element_defs.rb +10696 -0
  132. data/lib/stupidedi/versions/functional_groups/002001/element_reqs.rb +18 -0
  133. data/lib/stupidedi/versions/functional_groups/002001/element_types.rb +127 -0
  134. data/lib/stupidedi/versions/functional_groups/002001/element_types/date_val.rb +579 -0
  135. data/lib/stupidedi/versions/functional_groups/002001/element_types/fixnum_val.rb +324 -0
  136. data/lib/stupidedi/versions/functional_groups/002001/element_types/float_val.rb +356 -0
  137. data/lib/stupidedi/versions/functional_groups/002001/element_types/identifier_val.rb +373 -0
  138. data/lib/stupidedi/versions/functional_groups/002001/element_types/operators.rb +117 -0
  139. data/lib/stupidedi/versions/functional_groups/002001/element_types/string_val.rb +403 -0
  140. data/lib/stupidedi/versions/functional_groups/002001/element_types/time_val.rb +327 -0
  141. data/lib/stupidedi/versions/functional_groups/002001/functional_group_def.rb +30 -0
  142. data/lib/stupidedi/versions/functional_groups/002001/segment_defs.rb +249 -0
  143. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/AK1.rb +20 -0
  144. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/AK2.rb +21 -0
  145. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/AK3.rb +20 -0
  146. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/AK4.rb +22 -0
  147. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/AK5.rb +24 -0
  148. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/AK9.rb +24 -0
  149. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/AT7.rb +31 -0
  150. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/AT8.rb +28 -0
  151. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/ATH.rb +23 -0
  152. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/B1.rb +22 -0
  153. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/B10.rb +29 -0
  154. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/B2.rb +30 -0
  155. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/B2A.rb +20 -0
  156. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/BEG.rb +30 -0
  157. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/BFR.rb +31 -0
  158. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/BSN.rb +26 -0
  159. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/CTT.rb +28 -0
  160. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/CUR.rb +57 -0
  161. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/DTM.rb +29 -0
  162. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/FST.rb +31 -0
  163. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/G61.rb +25 -0
  164. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/G62.rb +26 -0
  165. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/G69.rb +20 -0
  166. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/GE.rb +20 -0
  167. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/GS.rb +26 -0
  168. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/HL.rb +22 -0
  169. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/J2X.rb +22 -0
  170. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/K1.rb +20 -0
  171. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/L11.rb +24 -0
  172. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/L3.rb +39 -0
  173. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/L5.rb +32 -0
  174. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/LFH.rb +28 -0
  175. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/LH1.rb +32 -0
  176. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/LH2.rb +36 -0
  177. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/LH3.rb +24 -0
  178. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/LIN.rb +50 -0
  179. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/LX.rb +19 -0
  180. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/M7.rb +23 -0
  181. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/MAN.rb +20 -0
  182. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/MEA.rb +33 -0
  183. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/MS1.rb +35 -0
  184. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/MS2.rb +25 -0
  185. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/MS3.rb +25 -0
  186. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/N1.rb +22 -0
  187. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/N2.rb +20 -0
  188. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/N3.rb +20 -0
  189. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/N4.rb +29 -0
  190. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/N7.rb +45 -0
  191. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/N9.rb +28 -0
  192. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/NTE.rb +20 -0
  193. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/PER.rb +31 -0
  194. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/PID.rb +33 -0
  195. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/PLD.rb +24 -0
  196. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/PO1.rb +59 -0
  197. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/PO4.rb +22 -0
  198. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/REF.rb +24 -0
  199. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/S5.rb +33 -0
  200. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/SDP.rb +20 -0
  201. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/SE.rb +20 -0
  202. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/SN1.rb +27 -0
  203. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/ST.rb +20 -0
  204. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/TD1.rb +29 -0
  205. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/TD3.rb +22 -0
  206. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/TD5.rb +22 -0
  207. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/UNT.rb +19 -0
  208. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/W01.rb +43 -0
  209. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/W03.rb +29 -0
  210. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/W04.rb +39 -0
  211. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/W05.rb +28 -0
  212. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/W06.rb +32 -0
  213. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/W07.rb +35 -0
  214. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/W08.rb +31 -0
  215. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/W12.rb +50 -0
  216. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/W14.rb +24 -0
  217. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/W17.rb +30 -0
  218. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/W20.rb +32 -0
  219. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/W27.rb +30 -0
  220. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/W66.rb +30 -0
  221. data/lib/stupidedi/versions/functional_groups/002001/segment_defs/W76.rb +29 -0
  222. data/lib/stupidedi/versions/functional_groups/002001/segment_reqs.rb +18 -0
  223. data/lib/stupidedi/versions/functional_groups/002001/syntax_notes.rb +174 -0
  224. data/lib/stupidedi/versions/functional_groups/002001/transaction_set_defs.rb +11 -0
  225. data/lib/stupidedi/versions/functional_groups/003010.rb +38 -0
  226. data/lib/stupidedi/versions/functional_groups/003010/element_defs.rb +9266 -0
  227. data/lib/stupidedi/versions/functional_groups/003010/element_reqs.rb +18 -0
  228. data/lib/stupidedi/versions/functional_groups/003010/element_types.rb +127 -0
  229. data/lib/stupidedi/versions/functional_groups/003010/element_types/date_val.rb +579 -0
  230. data/lib/stupidedi/versions/functional_groups/003010/element_types/fixnum_val.rb +324 -0
  231. data/lib/stupidedi/versions/functional_groups/003010/element_types/float_val.rb +355 -0
  232. data/lib/stupidedi/versions/functional_groups/003010/element_types/identifier_val.rb +372 -0
  233. data/lib/stupidedi/versions/functional_groups/003010/element_types/operators.rb +117 -0
  234. data/lib/stupidedi/versions/functional_groups/003010/element_types/string_val.rb +400 -0
  235. data/lib/stupidedi/versions/functional_groups/003010/element_types/time_val.rb +327 -0
  236. data/lib/stupidedi/versions/functional_groups/003010/functional_group_def.rb +30 -0
  237. data/lib/stupidedi/versions/functional_groups/003010/segment_defs.rb +252 -0
  238. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/AK1.rb +20 -0
  239. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/AK2.rb +21 -0
  240. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/AK3.rb +20 -0
  241. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/AK9.rb +24 -0
  242. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/AT7.rb +31 -0
  243. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/AT8.rb +28 -0
  244. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/B1.rb +22 -0
  245. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/B10.rb +29 -0
  246. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/B2.rb +30 -0
  247. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/B2A.rb +20 -0
  248. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/BCH.rb +31 -0
  249. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/BEG.rb +30 -0
  250. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/BPS.rb +26 -0
  251. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/BSN.rb +26 -0
  252. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/CTT.rb +28 -0
  253. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/CUR.rb +58 -0
  254. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/DTM.rb +30 -0
  255. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/FOB.rb +23 -0
  256. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/G61.rb +25 -0
  257. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/G62.rb +26 -0
  258. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/G69.rb +20 -0
  259. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/GE.rb +20 -0
  260. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/GS.rb +26 -0
  261. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/HL.rb +22 -0
  262. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/ITD.rb +30 -0
  263. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/K1.rb +20 -0
  264. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/L11.rb +24 -0
  265. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/L3.rb +39 -0
  266. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/L5.rb +32 -0
  267. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/LE.rb +19 -0
  268. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/LFH.rb +28 -0
  269. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/LH1.rb +32 -0
  270. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/LH2.rb +36 -0
  271. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/LH3.rb +24 -0
  272. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/LIN.rb +50 -0
  273. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/LS.rb +19 -0
  274. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/LX.rb +19 -0
  275. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/M7.rb +23 -0
  276. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/MAN.rb +27 -0
  277. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/MEA.rb +33 -0
  278. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/MS1.rb +35 -0
  279. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/MS2.rb +25 -0
  280. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/MS3.rb +25 -0
  281. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/MSG.rb +19 -0
  282. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/N1.rb +27 -0
  283. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/N2.rb +20 -0
  284. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/N3.rb +20 -0
  285. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/N4.rb +29 -0
  286. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/N7.rb +45 -0
  287. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/N9.rb +28 -0
  288. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/NTE.rb +20 -0
  289. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/PER.rb +31 -0
  290. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/PID.rb +33 -0
  291. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/PLD.rb +24 -0
  292. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/PO1.rb +59 -0
  293. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/PO4.rb +22 -0
  294. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/POC.rb +31 -0
  295. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/REF.rb +21 -0
  296. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/RMT.rb +35 -0
  297. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/S5.rb +33 -0
  298. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/SE.rb +20 -0
  299. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/SN1.rb +27 -0
  300. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/ST.rb +20 -0
  301. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/TD1.rb +29 -0
  302. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/TD3.rb +22 -0
  303. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/TD5.rb +19 -0
  304. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/W01.rb +43 -0
  305. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/W03.rb +29 -0
  306. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/W04.rb +39 -0
  307. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/W05.rb +28 -0
  308. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/W06.rb +32 -0
  309. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/W07.rb +35 -0
  310. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/W08.rb +31 -0
  311. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/W12.rb +50 -0
  312. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/W14.rb +24 -0
  313. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/W17.rb +30 -0
  314. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/W20.rb +32 -0
  315. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/W27.rb +30 -0
  316. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/W66.rb +30 -0
  317. data/lib/stupidedi/versions/functional_groups/003010/segment_defs/W76.rb +29 -0
  318. data/lib/stupidedi/versions/functional_groups/003010/segment_reqs.rb +18 -0
  319. data/lib/stupidedi/versions/functional_groups/003010/syntax_notes.rb +174 -0
  320. data/lib/stupidedi/versions/functional_groups/003010/transaction_set_defs.rb +11 -0
  321. data/lib/stupidedi/versions/functional_groups/003040.rb +38 -0
  322. data/lib/stupidedi/versions/functional_groups/003040/element_defs.rb +10777 -0
  323. data/lib/stupidedi/versions/functional_groups/003040/element_reqs.rb +18 -0
  324. data/lib/stupidedi/versions/functional_groups/003040/element_types.rb +127 -0
  325. data/lib/stupidedi/versions/functional_groups/003040/element_types/date_val.rb +578 -0
  326. data/lib/stupidedi/versions/functional_groups/003040/element_types/fixnum_val.rb +323 -0
  327. data/lib/stupidedi/versions/functional_groups/003040/element_types/float_val.rb +356 -0
  328. data/lib/stupidedi/versions/functional_groups/003040/element_types/identifier_val.rb +370 -0
  329. data/lib/stupidedi/versions/functional_groups/003040/element_types/operators.rb +117 -0
  330. data/lib/stupidedi/versions/functional_groups/003040/element_types/string_val.rb +401 -0
  331. data/lib/stupidedi/versions/functional_groups/003040/element_types/time_val.rb +327 -0
  332. data/lib/stupidedi/versions/functional_groups/003040/functional_group_def.rb +30 -0
  333. data/lib/stupidedi/versions/functional_groups/003040/segment_defs.rb +271 -0
  334. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/AK1.rb +20 -0
  335. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/AK2.rb +21 -0
  336. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/AK3.rb +20 -0
  337. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/AK9.rb +24 -0
  338. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/AMT.rb +19 -0
  339. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/AT7.rb +31 -0
  340. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/AT8.rb +28 -0
  341. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/B1.rb +22 -0
  342. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/B10.rb +29 -0
  343. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/B2.rb +30 -0
  344. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/B2A.rb +20 -0
  345. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/BEG.rb +30 -0
  346. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/BGN.rb +22 -0
  347. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/BPS.rb +26 -0
  348. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/BSN.rb +26 -0
  349. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/CTT.rb +28 -0
  350. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/CUR.rb +58 -0
  351. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/DTM.rb +30 -0
  352. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/FOB.rb +23 -0
  353. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/G61.rb +25 -0
  354. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/G62.rb +26 -0
  355. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/G69.rb +20 -0
  356. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/GE.rb +20 -0
  357. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/GS.rb +26 -0
  358. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/HL.rb +22 -0
  359. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/IT1.rb +22 -0
  360. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/ITD.rb +30 -0
  361. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/K1.rb +20 -0
  362. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/L11.rb +24 -0
  363. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/L3.rb +39 -0
  364. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/L5.rb +32 -0
  365. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/LE.rb +19 -0
  366. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/LFH.rb +28 -0
  367. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/LH1.rb +32 -0
  368. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/LH2.rb +36 -0
  369. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/LH3.rb +24 -0
  370. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/LIN.rb +50 -0
  371. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/LS.rb +19 -0
  372. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/LX.rb +19 -0
  373. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/M7.rb +23 -0
  374. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/MAN.rb +27 -0
  375. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/MEA.rb +33 -0
  376. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/MS1.rb +35 -0
  377. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/MS2.rb +25 -0
  378. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/MS3.rb +25 -0
  379. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/MSG.rb +19 -0
  380. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/N1.rb +27 -0
  381. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/N2.rb +20 -0
  382. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/N3.rb +20 -0
  383. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/N4.rb +29 -0
  384. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/N7.rb +45 -0
  385. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/N9.rb +28 -0
  386. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/NTE.rb +20 -0
  387. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/PER.rb +31 -0
  388. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/PID.rb +33 -0
  389. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/PLD.rb +24 -0
  390. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/PO1.rb +59 -0
  391. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/PO4.rb +22 -0
  392. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/PRR.rb +21 -0
  393. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/QTY.rb +20 -0
  394. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/REF.rb +21 -0
  395. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/REP.rb +21 -0
  396. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/RMT.rb +36 -0
  397. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/S5.rb +33 -0
  398. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/SE.rb +20 -0
  399. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/SN1.rb +27 -0
  400. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/SSS.rb +24 -0
  401. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/ST.rb +20 -0
  402. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/TD1.rb +29 -0
  403. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/TD3.rb +22 -0
  404. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/TD5.rb +19 -0
  405. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/TDS.rb +18 -0
  406. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/W01.rb +43 -0
  407. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/W03.rb +29 -0
  408. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/W04.rb +39 -0
  409. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/W05.rb +28 -0
  410. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/W06.rb +32 -0
  411. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/W07.rb +35 -0
  412. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/W08.rb +31 -0
  413. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/W12.rb +50 -0
  414. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/W14.rb +24 -0
  415. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/W17.rb +30 -0
  416. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/W20.rb +32 -0
  417. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/W27.rb +30 -0
  418. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/W66.rb +30 -0
  419. data/lib/stupidedi/versions/functional_groups/003040/segment_defs/W76.rb +29 -0
  420. data/lib/stupidedi/versions/functional_groups/003040/segment_reqs.rb +18 -0
  421. data/lib/stupidedi/versions/functional_groups/003040/syntax_notes.rb +174 -0
  422. data/lib/stupidedi/versions/functional_groups/003040/transaction_set_defs.rb +11 -0
  423. data/lib/stupidedi/versions/functional_groups/003050.rb +38 -0
  424. data/lib/stupidedi/versions/functional_groups/003050/element_defs.rb +10780 -0
  425. data/lib/stupidedi/versions/functional_groups/003050/element_reqs.rb +18 -0
  426. data/lib/stupidedi/versions/functional_groups/003050/element_types.rb +127 -0
  427. data/lib/stupidedi/versions/functional_groups/003050/element_types/date_val.rb +579 -0
  428. data/lib/stupidedi/versions/functional_groups/003050/element_types/fixnum_val.rb +324 -0
  429. data/lib/stupidedi/versions/functional_groups/003050/element_types/float_val.rb +357 -0
  430. data/lib/stupidedi/versions/functional_groups/003050/element_types/identifier_val.rb +371 -0
  431. data/lib/stupidedi/versions/functional_groups/003050/element_types/operators.rb +117 -0
  432. data/lib/stupidedi/versions/functional_groups/003050/element_types/string_val.rb +402 -0
  433. data/lib/stupidedi/versions/functional_groups/003050/element_types/time_val.rb +327 -0
  434. data/lib/stupidedi/versions/functional_groups/003050/functional_group_def.rb +30 -0
  435. data/lib/stupidedi/versions/functional_groups/003050/segment_defs.rb +271 -0
  436. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/AK1.rb +20 -0
  437. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/AK2.rb +21 -0
  438. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/AK3.rb +20 -0
  439. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/AK9.rb +24 -0
  440. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/AMT.rb +19 -0
  441. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/AT7.rb +31 -0
  442. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/AT8.rb +28 -0
  443. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/B1.rb +22 -0
  444. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/B10.rb +29 -0
  445. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/B2.rb +30 -0
  446. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/B2A.rb +20 -0
  447. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/BEG.rb +30 -0
  448. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/BGN.rb +22 -0
  449. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/BPS.rb +26 -0
  450. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/BSN.rb +26 -0
  451. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/CTT.rb +28 -0
  452. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/CUR.rb +58 -0
  453. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/DTM.rb +29 -0
  454. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/FOB.rb +23 -0
  455. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/G61.rb +25 -0
  456. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/G62.rb +26 -0
  457. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/G69.rb +20 -0
  458. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/GE.rb +20 -0
  459. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/GS.rb +26 -0
  460. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/HL.rb +22 -0
  461. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/IT1.rb +22 -0
  462. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/ITD.rb +30 -0
  463. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/K1.rb +20 -0
  464. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/L11.rb +24 -0
  465. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/L3.rb +39 -0
  466. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/L5.rb +32 -0
  467. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/LE.rb +19 -0
  468. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/LFH.rb +28 -0
  469. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/LH1.rb +32 -0
  470. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/LH2.rb +36 -0
  471. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/LH3.rb +24 -0
  472. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/LIN.rb +50 -0
  473. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/LS.rb +19 -0
  474. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/LX.rb +19 -0
  475. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/M7.rb +23 -0
  476. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/MAN.rb +27 -0
  477. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/MEA.rb +33 -0
  478. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/MS1.rb +35 -0
  479. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/MS2.rb +25 -0
  480. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/MS3.rb +25 -0
  481. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/MSG.rb +19 -0
  482. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/N1.rb +27 -0
  483. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/N2.rb +20 -0
  484. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/N3.rb +20 -0
  485. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/N4.rb +29 -0
  486. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/N7.rb +45 -0
  487. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/N9.rb +28 -0
  488. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/NTE.rb +20 -0
  489. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/PER.rb +31 -0
  490. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/PID.rb +33 -0
  491. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/PLD.rb +24 -0
  492. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/PO1.rb +59 -0
  493. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/PO4.rb +22 -0
  494. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/PRR.rb +21 -0
  495. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/QTY.rb +20 -0
  496. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/REF.rb +21 -0
  497. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/REP.rb +21 -0
  498. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/RMT.rb +35 -0
  499. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/S5.rb +33 -0
  500. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/SE.rb +20 -0
  501. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/SN1.rb +27 -0
  502. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/SSS.rb +24 -0
  503. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/ST.rb +20 -0
  504. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/TD1.rb +30 -0
  505. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/TD3.rb +23 -0
  506. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/TD5.rb +19 -0
  507. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/TDS.rb +18 -0
  508. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/W01.rb +43 -0
  509. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/W03.rb +29 -0
  510. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/W04.rb +39 -0
  511. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/W05.rb +28 -0
  512. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/W06.rb +32 -0
  513. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/W07.rb +35 -0
  514. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/W08.rb +31 -0
  515. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/W12.rb +50 -0
  516. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/W14.rb +24 -0
  517. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/W17.rb +30 -0
  518. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/W20.rb +32 -0
  519. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/W27.rb +30 -0
  520. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/W66.rb +30 -0
  521. data/lib/stupidedi/versions/functional_groups/003050/segment_defs/W76.rb +29 -0
  522. data/lib/stupidedi/versions/functional_groups/003050/segment_reqs.rb +18 -0
  523. data/lib/stupidedi/versions/functional_groups/003050/syntax_notes.rb +174 -0
  524. data/lib/stupidedi/versions/functional_groups/003050/transaction_set_defs.rb +11 -0
  525. data/lib/stupidedi/versions/functional_groups/004010.rb +2 -2
  526. data/lib/stupidedi/versions/functional_groups/004010/element_defs.rb +9461 -13
  527. data/lib/stupidedi/versions/functional_groups/004010/element_types.rb +3 -0
  528. data/lib/stupidedi/versions/functional_groups/004010/element_types/date_val.rb +132 -79
  529. data/lib/stupidedi/versions/functional_groups/004010/element_types/fixnum_val.rb +73 -84
  530. data/lib/stupidedi/versions/functional_groups/004010/element_types/float_val.rb +129 -72
  531. data/lib/stupidedi/versions/functional_groups/004010/element_types/identifier_val.rb +128 -43
  532. data/lib/stupidedi/versions/functional_groups/004010/element_types/operators.rb +117 -0
  533. data/lib/stupidedi/versions/functional_groups/004010/element_types/string_val.rb +116 -52
  534. data/lib/stupidedi/versions/functional_groups/004010/element_types/time_val.rb +48 -30
  535. data/lib/stupidedi/versions/functional_groups/004010/segment_defs.rb +274 -0
  536. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/AK1.rb +20 -0
  537. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/AK2.rb +21 -0
  538. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/AK3.rb +22 -0
  539. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/AK4.rb +22 -0
  540. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/AK5.rb +24 -0
  541. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/AK9.rb +28 -0
  542. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/AMT.rb +21 -0
  543. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/AT7.rb +31 -0
  544. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/AT8.rb +28 -0
  545. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/B1.rb +22 -0
  546. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/B10.rb +29 -0
  547. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/B2.rb +30 -0
  548. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/B2A.rb +20 -0
  549. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/BEG.rb +30 -0
  550. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/BFR.rb +31 -0
  551. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/BPR.rb +49 -0
  552. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/BSN.rb +23 -0
  553. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/BSS.rb +35 -0
  554. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/CAS.rb +56 -0
  555. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/CLP.rb +33 -0
  556. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/CTT.rb +28 -0
  557. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/CUR.rb +57 -0
  558. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/DTM.rb +27 -0
  559. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/FST.rb +31 -0
  560. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/G61.rb +25 -0
  561. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/G62.rb +26 -0
  562. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/G69.rb +20 -0
  563. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/HL.rb +22 -0
  564. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/JIT.rb +20 -0
  565. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/K1.rb +20 -0
  566. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/L11.rb +24 -0
  567. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/L3.rb +39 -0
  568. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/L5.rb +32 -0
  569. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/LFH.rb +28 -0
  570. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/LH1.rb +32 -0
  571. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/LH2.rb +36 -0
  572. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/LH3.rb +24 -0
  573. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/LIN.rb +53 -0
  574. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/LQ.rb +21 -0
  575. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/LX.rb +19 -0
  576. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/M7.rb +23 -0
  577. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/MAN.rb +27 -0
  578. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/MEA.rb +39 -0
  579. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/MIA.rb +45 -0
  580. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/MOA.rb +28 -0
  581. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/MS1.rb +35 -0
  582. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/MS2.rb +25 -0
  583. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/MS3.rb +25 -0
  584. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/N1.rb +27 -0
  585. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/N2.rb +20 -0
  586. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/N3.rb +20 -0
  587. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/N4.rb +25 -0
  588. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/N7.rb +45 -0
  589. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/N9.rb +28 -0
  590. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/NM1.rb +32 -0
  591. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/NTE.rb +20 -0
  592. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/PER.rb +31 -0
  593. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/PID.rb +33 -0
  594. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/PLB.rb +40 -0
  595. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/PLD.rb +24 -0
  596. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/PO1.rb +59 -0
  597. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/PO4.rb +23 -0
  598. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/QTY.rb +24 -0
  599. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/REF.rb +24 -0
  600. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/S5.rb +33 -0
  601. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/SDP.rb +20 -0
  602. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/SHP.rb +22 -0
  603. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/SN1.rb +28 -0
  604. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/ST.rb +1 -1
  605. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/SVC.rb +26 -0
  606. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/TD1.rb +23 -0
  607. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/TD3.rb +26 -0
  608. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/TD5.rb +22 -0
  609. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/TRN.rb +22 -0
  610. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/TS2.rb +40 -0
  611. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/TS3.rb +45 -0
  612. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/UIT.rb +20 -0
  613. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/W01.rb +43 -0
  614. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/W03.rb +29 -0
  615. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/W04.rb +39 -0
  616. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/W05.rb +28 -0
  617. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/W06.rb +32 -0
  618. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/W07.rb +35 -0
  619. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/W08.rb +31 -0
  620. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/W12.rb +50 -0
  621. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/W14.rb +24 -0
  622. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/W17.rb +30 -0
  623. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/W20.rb +32 -0
  624. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/W27.rb +30 -0
  625. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/W66.rb +30 -0
  626. data/lib/stupidedi/versions/functional_groups/004010/segment_defs/W76.rb +29 -0
  627. data/lib/stupidedi/versions/functional_groups/004010/transaction_set_defs.rb +13 -0
  628. data/lib/stupidedi/versions/functional_groups/004010/transaction_set_defs/HP835.rb +78 -0
  629. data/lib/stupidedi/versions/functional_groups/005010/element_defs.rb +3 -3
  630. data/lib/stupidedi/versions/functional_groups/005010/element_types/date_val.rb +4 -3
  631. data/lib/stupidedi/versions/functional_groups/005010/element_types/fixnum_val.rb +4 -1
  632. data/lib/stupidedi/versions/functional_groups/005010/element_types/float_val.rb +4 -1
  633. data/lib/stupidedi/versions/functional_groups/005010/element_types/identifier_val.rb +10 -6
  634. data/lib/stupidedi/versions/functional_groups/005010/element_types/operators.rb +1 -1
  635. data/lib/stupidedi/versions/functional_groups/005010/element_types/string_val.rb +10 -6
  636. data/lib/stupidedi/versions/functional_groups/005010/segment_defs.rb +6 -6
  637. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CUR.rb +2 -1
  638. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/N1.rb +4 -1
  639. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/N4.rb +0 -1
  640. data/lib/stupidedi/versions/functional_groups/005010/segment_defs/REF.rb +1 -0
  641. data/lib/stupidedi/versions/functional_groups/005010/syntax_notes.rb +1 -1
  642. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs.rb +4 -4
  643. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HI278.rb +42 -39
  644. data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/RA820.rb +201 -199
  645. data/lib/stupidedi/versions/interchanges.rb +3 -0
  646. data/lib/stupidedi/versions/interchanges/00200.rb +23 -0
  647. data/lib/stupidedi/versions/interchanges/00200/element_defs.rb +275 -0
  648. data/lib/stupidedi/versions/interchanges/00200/interchange_def.rb +68 -0
  649. data/lib/stupidedi/versions/interchanges/00200/segment_defs.rb +28 -0
  650. data/lib/stupidedi/versions/interchanges/00200/segment_defs/IEA.rb +20 -0
  651. data/lib/stupidedi/versions/interchanges/00200/segment_defs/ISA.rb +34 -0
  652. data/lib/stupidedi/versions/interchanges/00200/segment_defs/TA1.rb +23 -0
  653. data/lib/stupidedi/versions/interchanges/00300.rb +23 -0
  654. data/lib/stupidedi/versions/interchanges/00300/element_defs.rb +276 -0
  655. data/lib/stupidedi/versions/interchanges/00300/interchange_def.rb +68 -0
  656. data/lib/stupidedi/versions/interchanges/00300/segment_defs.rb +28 -0
  657. data/lib/stupidedi/versions/interchanges/00300/segment_defs/IEA.rb +20 -0
  658. data/lib/stupidedi/versions/interchanges/00300/segment_defs/ISA.rb +34 -0
  659. data/lib/stupidedi/versions/interchanges/00300/segment_defs/TA1.rb +23 -0
  660. data/lib/stupidedi/versions/interchanges/00400.rb +23 -0
  661. data/lib/stupidedi/versions/interchanges/00400/element_defs.rb +268 -0
  662. data/lib/stupidedi/versions/interchanges/00400/interchange_def.rb +68 -0
  663. data/lib/stupidedi/versions/interchanges/00400/segment_defs.rb +28 -0
  664. data/lib/stupidedi/versions/interchanges/00400/segment_defs/IEA.rb +20 -0
  665. data/lib/stupidedi/versions/interchanges/00400/segment_defs/ISA.rb +34 -0
  666. data/lib/stupidedi/versions/interchanges/00400/segment_defs/TA1.rb +23 -0
  667. data/lib/stupidedi/versions/interchanges/00401/element_defs.rb +53 -8
  668. data/lib/stupidedi/versions/interchanges/00401/interchange_def.rb +23 -0
  669. data/lib/stupidedi/versions/interchanges/00401/segment_defs/ISA.rb +2 -2
  670. data/lib/stupidedi/versions/interchanges/00501/element_defs.rb +3 -2
  671. data/lib/stupidedi/versions/interchanges/00501/interchange_def.rb +23 -0
  672. data/lib/stupidedi/writer/default.rb +4 -3
  673. data/spec/examples/integration/generating.example +89 -90
  674. data/spec/examples/integration/navigating.example +69 -69
  675. data/spec/examples/integration/parsing.example +250 -22
  676. data/spec/examples/ruby/array.example +76 -76
  677. data/spec/examples/ruby/object.example +3 -3
  678. data/spec/examples/ruby/symbol.example +6 -6
  679. data/spec/examples/ruby/to_d.example +1 -1
  680. data/spec/examples/ruby/try.example +6 -6
  681. data/spec/examples/stupidedi/reader.example +45 -45
  682. data/spec/examples/stupidedi/reader/failure.example +1 -1
  683. data/spec/examples/stupidedi/reader/input/delegated_input.example +3 -3
  684. data/spec/examples/stupidedi/reader/token_reader.example +35 -35
  685. data/spec/fixtures/FA997/1-good.txt +10 -0
  686. data/spec/fixtures/PC860/1-good.txt +21 -0
  687. data/spec/fixtures/PO830/1-good.txt +29 -0
  688. data/spec/fixtures/PO850/1-good-v3010.txt +31 -0
  689. data/spec/fixtures/PO850/1-good-v3050.txt +16 -0
  690. data/spec/fixtures/PS830/1-good.txt +29 -0
  691. data/spec/fixtures/RA820/1-good.txt +52 -0
  692. data/spec/fixtures/SH856/1-good.txt +70 -0
  693. data/spec/fixtures/SQ866/1-good.txt +29 -0
  694. data/spec/fixtures/SS862/1-good.txt +33 -0
  695. data/spec/fixtures/WA142/1-good.txt +307 -0
  696. data/spec/fixtures/X091A1-HP835/1-good.txt +1 -0
  697. data/spec/spec_helper.rb +11 -0
  698. data/spec/support/fixtures.rb +1 -1
  699. data/spec/support/matchers/either_matchers.rb +29 -2
  700. data/spec/support/matchers/navigation_matchers.rb +1 -1
  701. data/spec/support/quickcheck/characters.rb +5 -0
  702. data/spec/support/quickcheck/property.rb +1 -1
  703. data/spec/support/rcov.rb +3 -1
  704. metadata +674 -71
  705. data/lib/stupidedi/sets/absolute_set.rb +0 -297
  706. data/lib/stupidedi/sets/abstract_set.rb +0 -174
  707. data/lib/stupidedi/sets/null_set.rb +0 -125
  708. data/lib/stupidedi/sets/relative_complement.rb +0 -137
  709. data/lib/stupidedi/sets/relative_set.rb +0 -269
  710. data/lib/stupidedi/sets/universal_set.rb +0 -104
  711. data/spec/examples/stupidedi/sets/absolute_set.example +0 -1577
  712. data/spec/examples/stupidedi/sets/null_set.example +0 -2
  713. data/spec/examples/stupidedi/sets/relative_set.example +0 -2
  714. data/spec/examples/stupidedi/sets/universal_set.example +0 -1
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 1dc73ca111e43b38ae8715ff61a968a98a11fb37
4
+ data.tar.gz: f65b0a26440dc252b2dc63d47eb986650009d1a0
5
+ SHA512:
6
+ metadata.gz: ae4fdaee26ab0872ad5b998b108690850eb709754a22d89cca2104d137d31c0de7beb8b599e03deff9c92fe8a697c069499a3203a27b8a53c484badee183405e
7
+ data.tar.gz: 236d121428f8a7bc1f11a8d426e5335917b5d44cae3cb688a00c98f0e7f04e5e27f587608410656f89940137c9730a850ae38734dcf9323baf9047be534f16b8
data/README.md CHANGED
@@ -1,9 +1,12 @@
1
1
  # Stupidedi
2
+ [![Build Status](https://secure.travis-ci.org/kputnam/stupidedi.png?branch=master)](http://travis-ci.org/kputnam/stupidedi) [![Dependency Status](https://gemnasium.com/irobayna/stupidedi.svg)](https://gemnasium.com/irobayna/stupidedi) [![GitHub version](https://badge.fury.io/gh/kputnam%2Fstupidedi.svg)](http://badge.fury.io/gh/kputnam%2Fstupidedi) [![Code Climate](https://codeclimate.com/github/kputnam/stupidedi.png)](https://codeclimate.com/github/kputnam/stupidedi)
2
3
 
3
4
  ![Screenshot](https://raw.github.com/kputnam/stupidedi/master/doc/images/edi-pp.png)
4
5
 
6
+
5
7
  * [GitHub project](http://github.com/kputnam/stupidedi)
6
- * [Documentation](http://rubydoc.info/github/kputnam/stupidedi/master/frames)
8
+ * [Human Documentation](https://github.com/kputnam/stupidedi/tree/master/doc)
9
+ * [API Documentation](http://rubydoc.info/github/kputnam/stupidedi/master/frames)
7
10
 
8
11
  Stupidedi is a high-quality library for parsing, generating, validating,
9
12
  and manipulating ASC X12 EDI documents. Very roughly, it's jQuery for
@@ -26,7 +29,7 @@ and require flexibility to parse them.
26
29
  Stupidedi enables you to encode these transaction set specifications
27
30
  directly in Ruby. From these specifications, it will generate a parser
28
31
  to read incoming messages and a DSL to generate outgoing messages. This
29
- approach has a huge advantage of writing a parser from scratch, which
32
+ approach has a huge advantage over writing a parser from scratch, which
30
33
  can be error-prone and difficult to change.
31
34
 
32
35
  Significant thought was put into the design of the library. Some of
@@ -50,22 +53,105 @@ specification, an exception is thrown with a meaningful stack trace.
50
53
  Other libraries only perform validation after the entire document has
51
54
  been generated, while some don't perform validation at all.
52
55
 
56
+ Stupidedi performs extensive validation and ensures well-formedness.
57
+ See the human readable documentation in doc/Generating.md for more
58
+ details.
59
+
53
60
  ### Encourages readable client code
54
61
 
62
+ Unlike other libraries, generating documents doesn't involve naming
63
+ obscure identifiers from the specification (like C001, DE522 or LOOP2000),
64
+ for elements of the grammar that don't actually appear in the output.
65
+
66
+ Like HAML or Builder::XmlMarkup, the DSL for generating documents closely
67
+ matches terminology from the problem domain. You can see in the example
68
+ below that code looks very similar to an EDI document. This makes it easy
69
+ to understand, assuming a reasonable familiarity with EDI.
70
+
55
71
  ### Efficient parsing and traversing
56
72
 
73
+ The parser is designed using immutable data structures, making it thread-safe
74
+ for runtimes that can utilize multiple cores. While in certain cases,
75
+ immutability places higher demand on garbage collection, this has been
76
+ mitigated with careful optimization. Input can be streamed incrementally, so
77
+ very large files aren't read into memory all at once.
78
+
79
+ ![Benchmark](https://raw.github.com/kputnam/stupidedi/master/notes/benchmark/throughput.png)
80
+
81
+ <table>
82
+ <tr>
83
+ <th>segments</th>
84
+ <th>1.9.3</th>
85
+ <th>1.9.2</th>
86
+ <th>rbx-head</th>
87
+ <th>jruby-1.6.6</th>
88
+ </tr>
89
+ <tr>
90
+ <td>1680</td>
91
+ <td>2107.90</td>
92
+ <td>2007.17</td>
93
+ <td>503.14</td>
94
+ <td>317.52</td>
95
+ </tr>
96
+ <tr>
97
+ <td>3360</td>
98
+ <td>2461.54</td>
99
+ <td>2420.75</td>
100
+ <td>731.71</td>
101
+ <td>477.07</td>
102
+ </tr>
103
+ <tr>
104
+ <td>6720</td>
105
+ <td>2677.29</td>
106
+ <td>2620.90</td>
107
+ <td>950.63</td>
108
+ <td>685.15</td>
109
+ </tr>
110
+ <tr>
111
+ <td>13440</td>
112
+ <td>2699.88</td>
113
+ <td>2663.50</td>
114
+ <td>1071.00</td>
115
+ <td>897.50</td>
116
+ </tr>
117
+ <tr>
118
+ <td>26880</td>
119
+ <td>2558.54</td>
120
+ <td>2510.51</td>
121
+ <td>1124.50</td>
122
+ <td>1112.67</td>
123
+ </tr>
124
+ <tr>
125
+ <td>53760</td>
126
+ <td>2254.94</td>
127
+ <td>2164.16</td>
128
+ <td>1039.81</td>
129
+ <td>1292.62</td>
130
+ </tr>
131
+ </table>
132
+
133
+ These benchmarks aren't scientific by any means. They were performed on a
134
+ MacBook Pro, 2.2GHz Core i7 with 8GB RAM by reading the X222-HC837 fixture data
135
+ files, in serial. The results show the parser runtime is O(n), linear in the
136
+ size of the input, but the drop in throughput at 13K+ segments is likely due to
137
+ memory allocation. The steady increase in throughput on JRuby and Rubinus is
138
+ probably attributable optimizations performed by the JIT compiler.
139
+
140
+ Lastly, these results should approximate the performance of document generation
141
+ with BuilderDSL, except BuilderDSL API should have less overhead, as it skips
142
+ the tokenizer. On the other hand, BuilderDSL frequently queries the call stack
143
+ to track provenance of elements in the parse tree. In common real-world use,
144
+ custom application logic and database access are going to bottleneck performance,
145
+ rather than Stupidedi.
146
+
57
147
  ### Helps developers gain familiarity
58
148
 
59
149
  ## Why not a commercial translator?
60
150
 
61
- Because enterprise software is garbage. The costs include not only
62
- licensing, but support, maintenance, and training.
63
-
64
- Most importantly, commercial EDI translators solve a different set
65
- of problems. Many focus on translating between EDI and another data
66
- format, like XML, CSV, or a relational database. This isn't particularly
67
- productive, as you still have to unserialize the data to do
68
- anything with it.
151
+ Commercial EDI translators solve a different set of problems. Many focus
152
+ on translating between EDI and another data format, like XML, CSV, or a
153
+ relational database. This isn't particularly productive, as you still have
154
+ to unserialize the data to do anything with it.
69
155
 
70
156
  ## What doesn't it solve?
71
157
 
@@ -76,24 +162,35 @@ commercial EDI translators have, so it...
76
162
  * Doesn't transmit or receive files
77
163
  * Doesn't do encryption
78
164
  * Doesn't connect to your database
165
+ * Doesn't transmit over a dial-up modem
79
166
  * Doesn't queue messages for delivery or receipt
80
167
  * Doesn't generate acknowledgements
81
168
  * Doesn't have a graphical interface
82
169
 
83
- These can be accomplished using other libraries or your own code.
170
+ These features are orthogonal to the problem Stupidedi aims to solve, but they
171
+ can certainly be implemented with other code taking advantage of Stupidedi.
84
172
 
85
173
  ## Alternative libraries
86
174
 
87
175
  Stupidedi is an opinionated library, and maybe you don't agree with
88
176
  it. Here are a few alternative libraries:
89
177
 
178
+ * https://github.com/rjackson/X12
179
+ * https://github.com/dlabare/ruby-edi
180
+ * https://github.com/pstuteville/x12
90
181
  * http://www.appdesign.com/x12parser/
182
+ * https://github.com/swalberg/x12
183
+ * https://github.com/mjpete3/x12
184
+ * https://github.com/mrcsparker/x12_parser
91
185
  * http://edi4r.rubyforge.org/edi4r/
92
186
  * http://edival.sourceforge.net/
93
187
  * http://www.edidev.com/
94
188
 
95
189
  ## Examples
96
190
 
191
+ In addition to these brief examples, see sample code in the `notes` directory
192
+ and the human-readable Markdown documentation in `doc`.
193
+
97
194
  ### Utilities
98
195
 
99
196
  Pretty print the syntax tree
@@ -131,85 +228,115 @@ Perform validation on a file
131
228
 
132
229
  ### Generating, Writing
133
230
 
134
- require "stupidedi"
135
-
136
- b = Stupidedi::Builder::BuilderDsl.build(Stupidedi::Config.default)
137
-
138
- b.ISA("00", "", "00", "",
139
- "ZZ", "SUBMITTER ID",
140
- "ZZ", "RECEIVER ID",
141
- "990531", "1230", nil, "00501", "123456789", "1", "T", nil)
142
- b. GS("HC", "SENDER ID", "RECEIVER ID", "19990531", "1230", "1", "X", "005010X222")
143
- b. ST("837", "1234", b.default)
144
- b.BHT("0019", "00", "X"*30, "19990531", Time.now.utc, "CH")
145
- b.NM1(b.default, "1", "PREMIER BILLING SERVICE", "", "", "", "", "46", "12EEER000TY")
146
- b.PER("IC", "JERRY THE CLOWN", "TE", "3056660000")
147
- b.NM1("40", "2", "REPRICER JONES", "", "", "", "", "46", "66783JJT")
148
- b. HL("1", "", "20", "1")
149
- b.NM1("85", "2", "PREMIER BILLING SERVICE", "", "", "", "", "XX", "123234560")
150
- b. N3("1234 SEAWAY ST")
151
- b. N4("MIAMI", "FL", "331111234")
152
- b.REF("EI", "123667894")
153
- b.PER("IC", b.blank, "TE", "3056661111")
154
- b.NM1("87", "2")
155
- b. N3("2345 OCEAN BLVD")
156
- b. N4("MIAMI", "FL", "33111")
157
- b. HL("2", "1", "22", "0")
158
- b.SBR("S", "18", "", "", "12", "", "", "", "MB")
159
- b.NM1("IL", "1", "BACON", "KEVIN", "", "", "", "MI", "222334444")
160
- b. N3("236 N MAIN ST")
161
- b. N4("MIAMI", "FL", "33413")
162
- b.DMG("D8", "19431022", "F")
163
-
164
- b.machine.zipper.tap do |z|
165
- separators =
166
- Stupidedi::Reader::Separators.build(:segment => "~\n",
167
- :element => "*",
168
- :component => ":",
169
- :repetition => "^")
170
-
171
- w = Stupidedi::Writer::Default.new(z.root, separators)
172
- w.write($stdout)
173
- end
231
+ ```ruby
232
+ require "stupidedi"
233
+
234
+ # You can customize this to delegate to your own grammar definitions, if needed.
235
+ config = Stupidedi::Config.default
236
+
237
+ b = Stupidedi::Builder::BuilderDsl.build(config)
238
+
239
+ # These methods perform error checking: number of elements, element types, min/max
240
+ # length requirements, conditionally required elements, valid segments, number of
241
+ # segment occurrences, number of loop occurrences, etc.
242
+ b.ISA "00", nil, "00", nil,
243
+ "ZZ", "SUBMITTER ID",
244
+ "ZZ", "RECEIVER ID",
245
+ "990531", "1230", nil, "00501", "123456789", "1", "T", nil
246
+
247
+ # The API tracks the current position in the specification (e.g., the current loop,
248
+ # table, etc) to ensure well-formedness as each segment is generated.
249
+ b.GS "HC", "SENDER ID", "RECEIVER ID", "19990531", "1230", "1", "X", "005010X222"
250
+
251
+ # The `b.default` value can be used to generate the appropriate value if it can
252
+ # be unambigously inferred from the grammar.
253
+ b.ST "837", "1234", b.default
254
+ # You can use string representations of data or standard Ruby data types, like Time.
255
+ b.BHT "0019", "00", "X"*30, "19990531", Time.now.utc, "CH"
256
+ b.NM1 b.default, "1", "PREMIER BILLING SERVICE", nil, nil, nil, nil, "46", "12EEER000TY"
257
+ b.PER "IC", "JERRY THE CLOWN", "TE", "3056660000"
258
+
259
+ b.NM1 "40", "2", "REPRICER JONES", nil, nil, nil, nil, "46", "66783JJT"
260
+ b.HL "1", nil, "20", "1"
261
+
262
+ b.NM1 "85", "2", "PREMIER BILLING SERVICE", nil, nil, nil, nil, "XX", "123234560"
263
+ b.N3 "1234 SEAWAY ST"
264
+ b.N4 "MIAMI", "FL", "331111234"
265
+ b.REF "EI", "123667894"
266
+ b.PER "IC", b.blank, "TE", "3056661111"
267
+
268
+ b.NM1 "87", "2"
269
+ b.N3 "2345 OCEAN BLVD"
270
+ b.N4 "MIAMI", "FL", "33111"
271
+
272
+ b.HL "2", "1", "22", "0"
273
+ b.SBR "S", "18", nil, nil, "12", nil, nil, nil, "MB"
274
+
275
+ b.NM1 "IL", "1", "BACON", "KEVIN", nil, nil, nil, "MI", "222334444"
276
+ b.N3 "236 N MAIN ST"
277
+ b.N4 "MIAMI", "FL", "33413"
278
+ b.DMG "D8", "19431022", "F"
279
+
280
+ b.machine.zipper.tap do |z|
281
+ # The :component, and :repetition parameters can also be specified as elements
282
+ # of the ISA segment, at `b.ISA(...)` above. When generating a document from
283
+ # scratch, :segment and :element must be specified -- if you've parsed the doc
284
+ # from a file, these params will default to whatever was used in the file, or
285
+ # you can override them here.
286
+ separators =
287
+ Stupidedi::Reader::Separators.build :segment => "~\n",
288
+ :element => "*",
289
+ :component => ":",
290
+ :repetition => "^"
291
+
292
+ # You can also serialize any subtree within the document (e.g., everything inside
293
+ # some ST..SE transaction set, or a single loop. Here, z.root is the entire tree.
294
+ w = Stupidedi::Writer::Default.new(z.root, separators)
295
+ w.write($stdout)
296
+ end
297
+ ```
174
298
 
175
299
  ### Reading, Traversing
176
300
 
177
- require "stupidedi"
178
-
179
- config = Stupidedi::Config.default
180
- parser = Stupidedi::Builder::StateMachine.build(config)
181
-
182
- input = if RUBY_VERSION > "1.8"
183
- File.open("spec/fixtures/X221-HP835/1-good.txt", :encoding => "ISO-8859-1")
184
- else
185
- File.open("spec/fixtures/X221-HP835/1-good.txt")
186
- end
187
-
188
- # Reader.build accepts IO (File), String, and DelegateInput
189
- parser, result = parser.read(Stupidedi::Reader.build(input))
190
-
191
- # Report fatal tokenizer failures
192
- if result.fatal?
193
- result.explain{|reason| raise reason + " at #{result.position.inspect}" }
194
- end
195
-
196
- def el(m, *ns, &block)
197
- if Stupidedi::Either === m
198
- m.tap{|m| el(m, *ns, &block) }
199
- else
200
- yield(*ns.map{|n| m.element(*n).map(&:node).map(&:value).fetch(nil) })
201
- end
202
- end
203
-
204
- # Print some information
205
- parser.first
206
- .flatmap{|m| m.find(:GS) }
207
- .flatmap{|m| m.find(:ST) }
208
- .tap do |m|
209
- el(m.find(:N1, "PR"), 2){|e| puts "Payer: #{e}" }
210
- el(m.find(:N1, "PE"), 2){|e| puts "Payee: #{e}" }
211
- end
212
- .flatmap{|m| m.find(:LX) }
213
- .flatmap{|m| m.find(:CLP) }
214
- .flatmap{|m| m.find(:NM1, "QC") }
215
- .tap{|m| el(m, 3, 4){|l,f| puts "Patient: #{l}, #{f}" }}
301
+ ```ruby
302
+ require "stupidedi"
303
+
304
+ config = Stupidedi::Config.default
305
+ parser = Stupidedi::Builder::StateMachine.build(config)
306
+
307
+ input = if RUBY_VERSION > "1.8"
308
+ File.open("spec/fixtures/X221-HP835/1-good.txt", :encoding => "ISO-8859-1")
309
+ else
310
+ File.open("spec/fixtures/X221-HP835/1-good.txt")
311
+ end
312
+
313
+ # Reader.build accepts IO (File), String, and DelegateInput
314
+ parser, result = parser.read(Stupidedi::Reader.build(input))
315
+
316
+ # Report fatal tokenizer failures
317
+ if result.fatal?
318
+ result.explain{|reason| raise reason + " at #{result.position.inspect}" }
319
+ end
320
+
321
+ # Helper function: fetch an element from the current segment
322
+ def el(m, *ns, &block)
323
+ if Stupidedi::Either === m
324
+ m.tap{|m| el(m, *ns, &block) }
325
+ else
326
+ yield(*ns.map{|n| m.elementn(n).map(&:value).fetch })
327
+ end
328
+ end
329
+
330
+ # Print some information
331
+ parser.first
332
+ .flatmap{|m| m.find(:GS) }
333
+ .flatmap{|m| m.find(:ST) }
334
+ .tap do |m|
335
+ el(m.find(:N1, "PR"), 2){|e| puts "Payer: #{e}" }
336
+ el(m.find(:N1, "PE"), 2){|e| puts "Payee: #{e}" }
337
+ end
338
+ .flatmap{|m| m.find(:LX) }
339
+ .flatmap{|m| m.find(:CLP) }
340
+ .flatmap{|m| m.find(:NM1, "QC") }
341
+ .tap{|m| el(m, 3, 4){|l,f| puts "Patient: #{l}, #{f}" }}
342
+ ```
data/Rakefile CHANGED
@@ -3,8 +3,8 @@ abspath = Pathname.new(File.dirname(__FILE__)).expand_path
3
3
  relpath = abspath.relative_path_from(Pathname.pwd)
4
4
 
5
5
  begin
6
- require "rubygems"
7
- require "bundler/setup"
6
+ # require "rubygems"
7
+ # require "bundler/setup"
8
8
  rescue LoadError
9
9
  warn "couldn't load bundler:"
10
10
  warn " #{$!}"
@@ -13,7 +13,7 @@ end
13
13
  task :default => :spec
14
14
 
15
15
  task :console do
16
- exec *%w(irb -I lib -r stupidedi)
16
+ exec(*%w(irb -I lib -r stupidedi))
17
17
  end
18
18
 
19
19
  begin
@@ -80,12 +80,18 @@ begin
80
80
  end
81
81
  end
82
82
  end
83
- rescue LoadError
83
+ rescue LoadError => e
84
84
  task :rcov do
85
85
  warn "couldn't load rcov:"
86
- warn " #{$!}"
86
+ warn " #{e}"
87
87
  exit 1
88
88
  end
89
+ end if RUBY_VERSION <= "1.9"
90
+
91
+ if RUBY_VERSION >= "1.9"
92
+ # spec/spec_helper.rb will load SimpleCov
93
+ task :rcov => :spec do
94
+ end
89
95
  end
90
96
 
91
97
  begin
@@ -99,10 +105,10 @@ begin
99
105
  mkdir_p "#{relpath}/doc/generated/images"
100
106
  end
101
107
 
102
- rescue LoadError
108
+ rescue LoadError => e
103
109
  task :yard do
104
110
  warn "couldn't load yard:"
105
- warn " #{$!}"
111
+ warn " #{e}"
106
112
  exit 1
107
113
  end
108
114
  end
data/bin/edi-ed CHANGED
@@ -2,41 +2,18 @@
2
2
  require "pathname"
3
3
  $:.unshift(File.expand_path("../../lib", Pathname.new(__FILE__).realpath))
4
4
 
5
+ # Short-lived processes should win some peformance gains here
6
+ GC.disable
7
+
5
8
  require "stupidedi"
6
9
  require "pp"
7
10
 
8
11
  # This will be auto-enabled when $stdout.tty?, but -C forces color output
9
12
  require "term/ansicolor" if ARGV.delete("-C")
10
13
 
11
- config = Stupidedi::Config.new
12
- config.interchange.tap do |c|
13
- c.register("00401") { Stupidedi::Versions::Interchanges::FourOhOne::InterchangeDef }
14
- c.register("00501") { Stupidedi::Versions::Interchanges::FiveOhOne::InterchangeDef }
15
- end
16
-
17
- config.functional_group.tap do |c|
18
- # c.register("004010") { Stupidedi::Versions::FunctionalGroups::FortyTen::FunctionalGroupDef }
19
- c.register("004010") { Stupidedi::Versions::FunctionalGroups::FiftyTen::FunctionalGroupDef }
20
- c.register("005010") { Stupidedi::Versions::FunctionalGroups::FiftyTen::FunctionalGroupDef }
21
- end
22
-
23
- config.transaction_set.tap do |c|
24
- c.register("005010", "HN", "277") { Stupidedi::Versions::FunctionalGroups::FiftyTen::TransactionSetDefs::HN277 }
25
- c.register("005010", "HP", "835") { Stupidedi::Versions::FunctionalGroups::FiftyTen::TransactionSetDefs::HP835 }
26
- c.register("005010", "HC", "837") { Stupidedi::Versions::FunctionalGroups::FiftyTen::TransactionSetDefs::HC837 }
27
- c.register("005010", "FA", "999") { Stupidedi::Versions::FunctionalGroups::FiftyTen::TransactionSetDefs::FA999 }
28
-
29
- c.register("005010X214", "HN", "277") { Stupidedi::Guides::FiftyTen::X214::HN277 }
30
- c.register("005010X221", "HP", "835") { Stupidedi::Guides::FiftyTen::X221::HP835 }
31
- c.register("005010X222", "HC", "837") { Stupidedi::Guides::FiftyTen::X222::HC837P }
32
- c.register("005010X231", "FA", "999") { Stupidedi::Guides::FiftyTen::X231::FA999 }
33
-
34
- c.register("005010X221A1", "HP", "835") { Stupidedi::Guides::FiftyTen::X221A1::HP835 }
35
- c.register("004010X098A1", "HC", "837") { Stupidedi::Guides::FiftyTen::X222A1::HC837P }
36
- c.register("005010X222A1", "HC", "837") { Stupidedi::Guides::FiftyTen::X222A1::HC837P }
37
- c.register("005010X231A1", "FA", "999") { Stupidedi::Guides::FiftyTen::X231A1::FA999 }
38
- end
39
-
14
+ # config = Stupidedi::Config.default
15
+ # config = Stupidedi::Config.contrib
16
+ config = Stupidedi::Config.hipaa
40
17
  config.editor.tap do |c|
41
18
  c.register(Stupidedi::Versions::Interchanges::FourOhOne::InterchangeDef) { Stupidedi::Editor::FiveOhOneEd }
42
19
  c.register(Stupidedi::Versions::Interchanges::FiveOhOne::InterchangeDef) { Stupidedi::Editor::FiveOhOneEd }
@@ -51,7 +28,7 @@ start = Time.now
51
28
 
52
29
  ARGV.each do |path|
53
30
  File.open(path) do |io|
54
- parser, result = parser.read(Stupidedi::Reader.build(io))
31
+ parser, = parser.read(Stupidedi::Reader.build(io))
55
32
  end
56
33
  end
57
34
 
@@ -64,7 +41,7 @@ begin
64
41
  a = parser.first
65
42
  b = parser.last
66
43
 
67
- a.flatmap{|a| b.flatmap{|b| a.distance(b) }}.
44
+ a.flatmap{|_a| b.flatmap{|_b| _a.distance(_b) }}.
68
45
  tap{|d| puts "#{d + 1} segments" }
69
46
  end
70
47