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.
- data/README.md +215 -0
- data/Rakefile +108 -0
- data/bin/edi-ed +71 -0
- data/bin/edi-pp +81 -0
- data/doc/Defining.md +0 -0
- data/doc/Generating.md +321 -0
- data/doc/LICENSE.md +0 -0
- data/doc/Navigating.md +645 -0
- data/doc/Parsing.md +0 -0
- data/doc/Serializing.md +7 -0
- data/doc/Tokenizing.md +0 -0
- data/doc/Validating.md +0 -0
- data/doc/design/Parser.md +0 -0
- data/doc/design/Reader.md +0 -0
- data/lib/ruby/array.rb +164 -0
- data/lib/ruby/blank.rb +67 -0
- data/lib/ruby/enumerable.rb +35 -0
- data/lib/ruby/exception.rb +33 -0
- data/lib/ruby/hash.rb +4 -0
- data/lib/ruby/instance_exec.rb +26 -0
- data/lib/ruby/module.rb +79 -0
- data/lib/ruby/object.rb +63 -0
- data/lib/ruby/string.rb +73 -0
- data/lib/ruby/symbol.rb +24 -0
- data/lib/ruby/to_d.rb +81 -0
- data/lib/ruby/to_date.rb +33 -0
- data/lib/ruby/to_time.rb +24 -0
- data/lib/ruby/try.rb +43 -0
- data/lib/stupidedi/blank_slate.rb +11 -0
- data/lib/stupidedi/builder/builder_dsl.rb +281 -0
- data/lib/stupidedi/builder/constraint_table.rb +418 -0
- data/lib/stupidedi/builder/generation.rb +112 -0
- data/lib/stupidedi/builder/instruction.rb +102 -0
- data/lib/stupidedi/builder/instruction_table.rb +204 -0
- data/lib/stupidedi/builder/navigation.rb +655 -0
- data/lib/stupidedi/builder/state_machine.rb +55 -0
- data/lib/stupidedi/builder/states/abstract_state.rb +332 -0
- data/lib/stupidedi/builder/states/failure_state.rb +69 -0
- data/lib/stupidedi/builder/states/functional_group_state.rb +97 -0
- data/lib/stupidedi/builder/states/initial_state.rb +63 -0
- data/lib/stupidedi/builder/states/interchange_state.rb +94 -0
- data/lib/stupidedi/builder/states/loop_state.rb +79 -0
- data/lib/stupidedi/builder/states/table_state.rb +96 -0
- data/lib/stupidedi/builder/states/transaction_set_state.rb +112 -0
- data/lib/stupidedi/builder/states/transmission_state.rb +59 -0
- data/lib/stupidedi/builder/tokenization.rb +196 -0
- data/lib/stupidedi/builder.rb +23 -0
- data/lib/stupidedi/color.rb +93 -0
- data/lib/stupidedi/config/code_list_config.rb +42 -0
- data/lib/stupidedi/config/editor_config.rb +51 -0
- data/lib/stupidedi/config/functional_group_config.rb +62 -0
- data/lib/stupidedi/config/interchange_config.rb +79 -0
- data/lib/stupidedi/config/transaction_set_config.rb +91 -0
- data/lib/stupidedi/config.rb +101 -0
- data/lib/stupidedi/editor/00501.rb +341 -0
- data/lib/stupidedi/editor/005010/N2.rb +0 -0
- data/lib/stupidedi/editor/005010/N3.rb +0 -0
- data/lib/stupidedi/editor/005010/N4.rb +63 -0
- data/lib/stupidedi/editor/005010/NM1.rb +0 -0
- data/lib/stupidedi/editor/005010.rb +469 -0
- data/lib/stupidedi/editor/X222-HC837.rb +195 -0
- data/lib/stupidedi/editor/abstract_ed.rb +36 -0
- data/lib/stupidedi/editor/claim_ack.rb +9 -0
- data/lib/stupidedi/editor/implementation_ack.rb +213 -0
- data/lib/stupidedi/editor/interchange_ack.rb +9 -0
- data/lib/stupidedi/editor/result.rb +100 -0
- data/lib/stupidedi/editor/result_set.rb +69 -0
- data/lib/stupidedi/editor/transaction_set_ed.rb +275 -0
- data/lib/stupidedi/editor/transmission_ed.rb +90 -0
- data/lib/stupidedi/editor.rb +37 -0
- data/lib/stupidedi/either.rb +287 -0
- data/lib/stupidedi/exceptions/invalid_element_error.rb +8 -0
- data/lib/stupidedi/exceptions/invalid_schema_error.rb +8 -0
- data/lib/stupidedi/exceptions/output_error.rb +8 -0
- data/lib/stupidedi/exceptions/parse_error.rb +8 -0
- data/lib/stupidedi/exceptions/stupidedi_error.rb +8 -0
- data/lib/stupidedi/exceptions/tokenize_error.rb +8 -0
- data/lib/stupidedi/exceptions/zipper_error.rb +8 -0
- data/lib/stupidedi/exceptions.rb +11 -0
- data/lib/stupidedi/guides/005010/X214-HN277.rb +409 -0
- data/lib/stupidedi/guides/005010/X221-HP835.rb +613 -0
- data/lib/stupidedi/guides/005010/X221A1-HP835.rb +613 -0
- data/lib/stupidedi/guides/005010/X222-HC837P.rb +2291 -0
- data/lib/stupidedi/guides/005010/X222A1-HC837P.rb +2297 -0
- data/lib/stupidedi/guides/005010/X231-FA999.rb +123 -0
- data/lib/stupidedi/guides/005010/X231A1-FA999.rb +119 -0
- data/lib/stupidedi/guides/005010/element_reqs.rb +38 -0
- data/lib/stupidedi/guides/005010/guide_builder.rb +180 -0
- data/lib/stupidedi/guides/005010/segment_reqs.rb +32 -0
- data/lib/stupidedi/guides/005010.rb +64 -0
- data/lib/stupidedi/guides.rb +5 -0
- data/lib/stupidedi/inspect.rb +26 -0
- data/lib/stupidedi/reader/input/abstract_input.rb +133 -0
- data/lib/stupidedi/reader/input/delegated_input.rb +111 -0
- data/lib/stupidedi/reader/input/file_input.rb +155 -0
- data/lib/stupidedi/reader/input.rb +30 -0
- data/lib/stupidedi/reader/position.rb +69 -0
- data/lib/stupidedi/reader/result.rb +168 -0
- data/lib/stupidedi/reader/segment_dict.rb +175 -0
- data/lib/stupidedi/reader/separators.rb +85 -0
- data/lib/stupidedi/reader/stream_reader.rb +172 -0
- data/lib/stupidedi/reader/token_reader.rb +466 -0
- data/lib/stupidedi/reader/tokens/component_element_tok.rb +56 -0
- data/lib/stupidedi/reader/tokens/composite_element_tok.rb +64 -0
- data/lib/stupidedi/reader/tokens/repeated_element_tok.rb +64 -0
- data/lib/stupidedi/reader/tokens/segment_tok.rb +51 -0
- data/lib/stupidedi/reader/tokens/simple_element_tok.rb +63 -0
- data/lib/stupidedi/reader.rb +121 -0
- data/lib/stupidedi/schema/abstract_def.rb +74 -0
- data/lib/stupidedi/schema/abstract_use.rb +73 -0
- data/lib/stupidedi/schema/code_list.rb +94 -0
- data/lib/stupidedi/schema/element_def.rb +173 -0
- data/lib/stupidedi/schema/element_req.rb +56 -0
- data/lib/stupidedi/schema/element_use.rb +251 -0
- data/lib/stupidedi/schema/functional_group_def.rb +114 -0
- data/lib/stupidedi/schema/interchange_def.rb +93 -0
- data/lib/stupidedi/schema/loop_def.rb +152 -0
- data/lib/stupidedi/schema/repeat_count.rb +85 -0
- data/lib/stupidedi/schema/segment_def.rb +108 -0
- data/lib/stupidedi/schema/segment_req.rb +43 -0
- data/lib/stupidedi/schema/segment_use.rb +98 -0
- data/lib/stupidedi/schema/syntax_note.rb +63 -0
- data/lib/stupidedi/schema/table_def.rb +139 -0
- data/lib/stupidedi/schema/transaction_set_def.rb +88 -0
- data/lib/stupidedi/schema.rb +28 -0
- data/lib/stupidedi/sets/absolute_set.rb +297 -0
- data/lib/stupidedi/sets/abstract_set.rb +174 -0
- data/lib/stupidedi/sets/null_set.rb +125 -0
- data/lib/stupidedi/sets/relative_complement.rb +137 -0
- data/lib/stupidedi/sets/relative_set.rb +269 -0
- data/lib/stupidedi/sets/universal_set.rb +104 -0
- data/lib/stupidedi/sets.rb +57 -0
- data/lib/stupidedi/tail_call.rb +109 -0
- data/lib/stupidedi/thread_local.rb +174 -0
- data/lib/stupidedi/values/abstract_element_val.rb +19 -0
- data/lib/stupidedi/values/abstract_val.rb +130 -0
- data/lib/stupidedi/values/composite_element_val.rb +95 -0
- data/lib/stupidedi/values/functional_group_val.rb +102 -0
- data/lib/stupidedi/values/interchange_val.rb +86 -0
- data/lib/stupidedi/values/invalid_envelope_val.rb +61 -0
- data/lib/stupidedi/values/invalid_segment_val.rb +78 -0
- data/lib/stupidedi/values/loop_val.rb +70 -0
- data/lib/stupidedi/values/repeated_element_val.rb +105 -0
- data/lib/stupidedi/values/segment_val.rb +104 -0
- data/lib/stupidedi/values/segment_val_group.rb +20 -0
- data/lib/stupidedi/values/simple_element_val.rb +80 -0
- data/lib/stupidedi/values/table_val.rb +66 -0
- data/lib/stupidedi/values/transaction_set_val.rb +66 -0
- data/lib/stupidedi/values/transmission_val.rb +52 -0
- data/lib/stupidedi/values.rb +21 -0
- data/lib/stupidedi/version.rb +3 -0
- data/lib/stupidedi/versions/functional_groups/004010/element_defs.rb +54 -0
- data/lib/stupidedi/versions/functional_groups/004010/element_reqs.rb +18 -0
- data/lib/stupidedi/versions/functional_groups/004010/element_types/date_val.rb +527 -0
- data/lib/stupidedi/versions/functional_groups/004010/element_types/fixnum_val.rb +335 -0
- data/lib/stupidedi/versions/functional_groups/004010/element_types/float_val.rb +299 -0
- data/lib/stupidedi/versions/functional_groups/004010/element_types/identifier_val.rb +287 -0
- data/lib/stupidedi/versions/functional_groups/004010/element_types/string_val.rb +338 -0
- data/lib/stupidedi/versions/functional_groups/004010/element_types/time_val.rb +309 -0
- data/lib/stupidedi/versions/functional_groups/004010/element_types.rb +124 -0
- data/lib/stupidedi/versions/functional_groups/004010/functional_group_def.rb +30 -0
- data/lib/stupidedi/versions/functional_groups/004010/segment_defs/GE.rb +20 -0
- data/lib/stupidedi/versions/functional_groups/004010/segment_defs/GS.rb +27 -0
- data/lib/stupidedi/versions/functional_groups/004010/segment_defs/SE.rb +20 -0
- data/lib/stupidedi/versions/functional_groups/004010/segment_defs/ST.rb +20 -0
- data/lib/stupidedi/versions/functional_groups/004010/segment_defs.rb +23 -0
- data/lib/stupidedi/versions/functional_groups/004010/segment_reqs.rb +18 -0
- data/lib/stupidedi/versions/functional_groups/004010/syntax_notes.rb +174 -0
- data/lib/stupidedi/versions/functional_groups/004010.rb +38 -0
- data/lib/stupidedi/versions/functional_groups/005010/element_defs.rb +1405 -0
- data/lib/stupidedi/versions/functional_groups/005010/element_reqs.rb +18 -0
- data/lib/stupidedi/versions/functional_groups/005010/element_types/date_val.rb +577 -0
- data/lib/stupidedi/versions/functional_groups/005010/element_types/fixnum_val.rb +322 -0
- data/lib/stupidedi/versions/functional_groups/005010/element_types/float_val.rb +354 -0
- data/lib/stupidedi/versions/functional_groups/005010/element_types/identifier_val.rb +368 -0
- data/lib/stupidedi/versions/functional_groups/005010/element_types/operators.rb +117 -0
- data/lib/stupidedi/versions/functional_groups/005010/element_types/string_val.rb +398 -0
- data/lib/stupidedi/versions/functional_groups/005010/element_types/time_val.rb +327 -0
- data/lib/stupidedi/versions/functional_groups/005010/element_types.rb +132 -0
- data/lib/stupidedi/versions/functional_groups/005010/functional_group_def.rb +30 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/AK1.rb +21 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/AK2.rb +21 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/AK9.rb +28 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/AMT.rb +21 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/BHT.rb +24 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/BPR.rb +49 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CAS.rb +56 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CL1.rb +22 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CLM.rb +41 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CLP.rb +34 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CN1.rb +24 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CR1.rb +32 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CR2.rb +35 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CR3.rb +25 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CRC.rb +26 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CTP.rb +36 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CTX.rb +24 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/CUR.rb +57 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/DMG.rb +34 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/DN1.rb +22 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/DN2.rb +24 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/DTM.rb +24 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/DTP.rb +21 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/FRM.rb +25 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/GE.rb +20 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/GS.rb +27 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/HCP.rb +39 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/HI.rb +31 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/HL.rb +22 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/IK3.rb +22 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/IK4.rb +22 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/IK5.rb +24 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/K3.rb +21 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/LIN.rb +69 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/LQ.rb +22 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/LX.rb +19 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/MEA.rb +39 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/MIA.rb +45 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/MOA.rb +28 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/N1.rb +24 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/N2.rb +20 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/N3.rb +20 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/N4.rb +30 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/NM1.rb +35 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/NTE.rb +20 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/OI.rb +24 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/PAT.rb +31 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/PER.rb +32 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/PLB.rb +40 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/PRV.rb +26 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/PS1.rb +21 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/PWK.rb +30 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/QTY.rb +25 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/RDM.rb +23 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/REF.rb +23 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SBR.rb +28 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SE.rb +20 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/ST.rb +21 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/STC.rb +30 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SV1.rb +44 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SV2.rb +29 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SV3.rb +30 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SV5.rb +29 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SVC.rb +26 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/SVD.rb +24 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/TOO.rb +21 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/TRN.rb +22 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/TS2.rb +40 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs/TS3.rb +45 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs.rb +227 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_reqs.rb +18 -0
- data/lib/stupidedi/versions/functional_groups/005010/syntax_notes.rb +165 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/FA999.rb +38 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HB271.rb +85 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HC837.rb +163 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HI278.rb +64 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HN277.rb +74 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HP835.rb +68 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HR276.rb +57 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HS270.rb +53 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/RA820.rb +240 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs.rb +68 -0
- data/lib/stupidedi/versions/functional_groups/005010.rb +38 -0
- data/lib/stupidedi/versions/functional_groups.rb +8 -0
- data/lib/stupidedi/versions/interchanges/00401/element_defs.rb +224 -0
- data/lib/stupidedi/versions/interchanges/00401/interchange_def.rb +45 -0
- data/lib/stupidedi/versions/interchanges/00401/segment_defs/IEA.rb +20 -0
- data/lib/stupidedi/versions/interchanges/00401/segment_defs/ISA.rb +34 -0
- data/lib/stupidedi/versions/interchanges/00401/segment_defs/TA1.rb +23 -0
- data/lib/stupidedi/versions/interchanges/00401/segment_defs.rb +28 -0
- data/lib/stupidedi/versions/interchanges/00401.rb +23 -0
- data/lib/stupidedi/versions/interchanges/00501/element_defs.rb +269 -0
- data/lib/stupidedi/versions/interchanges/00501/interchange_def.rb +47 -0
- data/lib/stupidedi/versions/interchanges/00501/segment_defs/IEA.rb +20 -0
- data/lib/stupidedi/versions/interchanges/00501/segment_defs/ISA.rb +34 -0
- data/lib/stupidedi/versions/interchanges/00501/segment_defs/ISB.rb +18 -0
- data/lib/stupidedi/versions/interchanges/00501/segment_defs/ISE.rb +18 -0
- data/lib/stupidedi/versions/interchanges/00501/segment_defs/TA1.rb +23 -0
- data/lib/stupidedi/versions/interchanges/00501/segment_defs/TA3.rb +18 -0
- data/lib/stupidedi/versions/interchanges/00501/segment_defs.rb +37 -0
- data/lib/stupidedi/versions/interchanges/00501.rb +23 -0
- data/lib/stupidedi/versions/interchanges.rb +8 -0
- data/lib/stupidedi/versions.rb +6 -0
- data/lib/stupidedi/writer/claredi.rb +142 -0
- data/lib/stupidedi/writer/default.rb +124 -0
- data/lib/stupidedi/writer.rb +6 -0
- data/lib/stupidedi/zipper/abstract_cursor.rb +351 -0
- data/lib/stupidedi/zipper/dangling_cursor.rb +103 -0
- data/lib/stupidedi/zipper/edited_cursor.rb +157 -0
- data/lib/stupidedi/zipper/memoized_cursor.rb +131 -0
- data/lib/stupidedi/zipper/path.rb +124 -0
- data/lib/stupidedi/zipper/root_cursor.rb +120 -0
- data/lib/stupidedi/zipper.rb +25 -0
- data/lib/stupidedi.rb +66 -0
- data/spec/examples/integration/generating.example +551 -0
- data/spec/examples/integration/navigating.example +214 -0
- data/spec/examples/integration/parsing.example +445 -0
- data/spec/examples/ruby/array.example +476 -0
- data/spec/examples/ruby/blank.example +62 -0
- data/spec/examples/ruby/count.example +68 -0
- data/spec/examples/ruby/object.example +99 -0
- data/spec/examples/ruby/string.example +111 -0
- data/spec/examples/ruby/symbol.example +117 -0
- data/spec/examples/ruby/to_d.example +90 -0
- data/spec/examples/ruby/try.example +50 -0
- data/spec/examples/stupidedi/either.example +375 -0
- data/spec/examples/stupidedi/reader/failure.example +68 -0
- data/spec/examples/stupidedi/reader/input/delegated_input.example +292 -0
- data/spec/examples/stupidedi/reader/separators.example +73 -0
- data/spec/examples/stupidedi/reader/stream_reader.example +48 -0
- data/spec/examples/stupidedi/reader/success.example +34 -0
- data/spec/examples/stupidedi/reader/token_reader.example +775 -0
- data/spec/examples/stupidedi/reader.example +168 -0
- data/spec/examples/stupidedi/sets/absolute_set.example +1577 -0
- data/spec/examples/stupidedi/sets/null_set.example +2 -0
- data/spec/examples/stupidedi/sets/relative_set.example +2 -0
- data/spec/examples/stupidedi/sets/universal_set.example +1 -0
- data/spec/examples/stupidedi/versions/005010/element_types/an.example +201 -0
- data/spec/examples/stupidedi/versions/005010/element_types/dt.example +258 -0
- data/spec/examples/stupidedi/versions/005010/element_types/id.example +192 -0
- data/spec/examples/stupidedi/versions/005010/element_types/nn.example +177 -0
- data/spec/examples/stupidedi/versions/005010/element_types/r.example +178 -0
- data/spec/examples/stupidedi/versions/005010/element_types/tm.example +2 -0
- data/spec/examples/stupidedi/zipper/abstract_cursor.example +417 -0
- data/spec/examples/stupidedi/zipper.example +9 -0
- data/spec/fixtures/X186-AG824/1-bad.txt +21 -0
- data/spec/fixtures/X186-AG824/1-good.txt +17 -0
- data/spec/fixtures/X186-AG824/2-bad.txt +26 -0
- data/spec/fixtures/X186-AG824/2-good.txt +21 -0
- data/spec/fixtures/X186-AG824/3-bad.txt +87 -0
- data/spec/fixtures/X186-AG824/3-good.txt +61 -0
- data/spec/fixtures/X212-HN277/1-bad.txt +54 -0
- data/spec/fixtures/X212-HN277/1-good.txt +46 -0
- data/spec/fixtures/X212-HN277/2-bad.txt +37 -0
- data/spec/fixtures/X212-HN277/2-good.txt +29 -0
- data/spec/fixtures/X212-HN277/3-bad.txt +22 -0
- data/spec/fixtures/X212-HN277/3-good.txt +17 -0
- data/spec/fixtures/X212-HN277/4-bad.txt +30 -0
- data/spec/fixtures/X212-HN277/4-good.txt +24 -0
- data/spec/fixtures/X212-HR276/1-bad.txt +53 -0
- data/spec/fixtures/X212-HR276/1-good.txt +46 -0
- data/spec/fixtures/X212-HR276/2-bad.txt +45 -0
- data/spec/fixtures/X212-HR276/2-good.txt +38 -0
- data/spec/fixtures/X212-HR276/3-bad.txt +32 -0
- data/spec/fixtures/X212-HR276/3-good.txt +26 -0
- data/spec/fixtures/X212-HR276/4-bad.txt +32 -0
- data/spec/fixtures/X212-HR276/4-good.txt +26 -0
- data/spec/fixtures/X214-HN277/1-bad.txt +58 -0
- data/spec/fixtures/X214-HN277/1-good.txt +47 -0
- data/spec/fixtures/X214-HN277/2-bad.txt +34 -0
- data/spec/fixtures/X214-HN277/2-good.txt +22 -0
- data/spec/fixtures/X214-HN277/3-bad.txt +64 -0
- data/spec/fixtures/X214-HN277/3-good.txt +54 -0
- data/spec/fixtures/X214-HN277/4-bad.txt +77 -0
- data/spec/fixtures/X214-HN277/4-good.txt +63 -0
- data/spec/fixtures/X216-HI278/1-bad.txt +42 -0
- data/spec/fixtures/X216-HI278/1-good.txt +27 -0
- data/spec/fixtures/X216-HI278/2-bad.txt +43 -0
- data/spec/fixtures/X216-HI278/2-good.txt +29 -0
- data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-1.txt +24 -0
- data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-1_Clean.txt +20 -0
- data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-2.txt +46 -0
- data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-2_Clean.txt +30 -0
- data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-3.txt +38 -0
- data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-3_Clean.txt +24 -0
- data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-4a.txt +39 -0
- data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-4a_Clean.txt +24 -0
- data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-4b.txt +43 -0
- data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-4b_Clean.txt +25 -0
- data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-5.txt +63 -0
- data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-5_Clean.txt +41 -0
- data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-6.txt +36 -0
- data/spec/fixtures/X217-HI278/Sample_278_Request_5010X217-6_Clean.txt +20 -0
- data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-1r.txt +34 -0
- data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-1r_Clean.txt +23 -0
- data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-2r.txt +46 -0
- data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-2r_Clean.txt +31 -0
- data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-3r.txt +44 -0
- data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-3r_Clean.txt +26 -0
- data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-4ar_Clean.txt +28 -0
- data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-4br_Clean.txt +35 -0
- data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-5r.txt +60 -0
- data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-5r_Clean.txt +42 -0
- data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-6r.txt +40 -0
- data/spec/fixtures/X217-HI278/Sample_278_Response_5010X217-6r_Clean.txt +24 -0
- data/spec/fixtures/X218-RA820/1-bad.txt +31 -0
- data/spec/fixtures/X218-RA820/1-good.txt +25 -0
- data/spec/fixtures/X218-RA820/2-bad.txt +37 -0
- data/spec/fixtures/X218-RA820/2-good.txt +29 -0
- data/spec/fixtures/X218-RA820/3-bad.txt +29 -0
- data/spec/fixtures/X218-RA820/3-good.txt +23 -0
- data/spec/fixtures/X218-RA820/4-bad.txt +36 -0
- data/spec/fixtures/X218-RA820/4-good.txt +27 -0
- data/spec/fixtures/X220-BE834/1-bad.txt +35 -0
- data/spec/fixtures/X220-BE834/1-good.txt +29 -0
- data/spec/fixtures/X220-BE834/10-bad.txt +26 -0
- data/spec/fixtures/X220-BE834/10-good.txt +19 -0
- data/spec/fixtures/X220-BE834/2-bad.txt +31 -0
- data/spec/fixtures/X220-BE834/2-good.txt +23 -0
- data/spec/fixtures/X220-BE834/3-bad.txt +36 -0
- data/spec/fixtures/X220-BE834/3-good.txt +26 -0
- data/spec/fixtures/X220-BE834/4-bad.txt +27 -0
- data/spec/fixtures/X220-BE834/4-good.txt +21 -0
- data/spec/fixtures/X220-BE834/5-bad.txt +26 -0
- data/spec/fixtures/X220-BE834/5-good.txt +17 -0
- data/spec/fixtures/X220-BE834/6-bad.txt +25 -0
- data/spec/fixtures/X220-BE834/6-good.txt +20 -0
- data/spec/fixtures/X220-BE834/7-bad.txt +25 -0
- data/spec/fixtures/X220-BE834/7-good.txt +20 -0
- data/spec/fixtures/X220-BE834/8-bad.txt +25 -0
- data/spec/fixtures/X220-BE834/8-good.txt +20 -0
- data/spec/fixtures/X220-BE834/9-bad.txt +27 -0
- data/spec/fixtures/X220-BE834/9-good.txt +21 -0
- data/spec/fixtures/X221-HP835/1-bad.txt +58 -0
- data/spec/fixtures/X221-HP835/1-good.txt +40 -0
- data/spec/fixtures/X221-HP835/2-bad.txt +51 -0
- data/spec/fixtures/X221-HP835/2-good.txt +40 -0
- data/spec/fixtures/X221-HP835/3a-bad.txt +78 -0
- data/spec/fixtures/X221-HP835/3a-good.txt +49 -0
- data/spec/fixtures/X221-HP835/3b-bad.txt +60 -0
- data/spec/fixtures/X221-HP835/3b-good.txt +32 -0
- data/spec/fixtures/X221-HP835/3c-bad.txt +55 -0
- data/spec/fixtures/X221-HP835/3c-good.txt +34 -0
- data/spec/fixtures/X222-HC837/1-bad.txt +60 -0
- data/spec/fixtures/X222-HC837/1-good.txt +53 -0
- data/spec/fixtures/X222-HC837/10a-bad.txt +52 -0
- data/spec/fixtures/X222-HC837/10a-good.txt +40 -0
- data/spec/fixtures/X222-HC837/10b-bad.txt +99 -0
- data/spec/fixtures/X222-HC837/10b-good.txt +80 -0
- data/spec/fixtures/X222-HC837/10c-bad.txt +105 -0
- data/spec/fixtures/X222-HC837/10c-good.txt +80 -0
- data/spec/fixtures/X222-HC837/11-bad.txt +69 -0
- data/spec/fixtures/X222-HC837/11-good.txt +45 -0
- data/spec/fixtures/X222-HC837/12-bad.txt +73 -0
- data/spec/fixtures/X222-HC837/12-good.txt +51 -0
- data/spec/fixtures/X222-HC837/13-bad.txt +64 -0
- data/spec/fixtures/X222-HC837/13-good.txt +46 -0
- data/spec/fixtures/X222-HC837/3a-bad.txt +83 -0
- data/spec/fixtures/X222-HC837/3a-good.txt +59 -0
- data/spec/fixtures/X222-HC837/3b-bad.txt +97 -0
- data/spec/fixtures/X222-HC837/3b-good.txt +70 -0
- data/spec/fixtures/X222-HC837/3c-bad.txt +95 -0
- data/spec/fixtures/X222-HC837/3c-good.txt +74 -0
- data/spec/fixtures/X222-HC837/4-bad.txt +67 -0
- data/spec/fixtures/X222-HC837/4-good.txt +48 -0
- data/spec/fixtures/X222-HC837/5-bad.txt +73 -0
- data/spec/fixtures/X222-HC837/5-good.txt +60 -0
- data/spec/fixtures/X222-HC837/6-bad.txt +50 -0
- data/spec/fixtures/X222-HC837/6-good.txt +39 -0
- data/spec/fixtures/X222-HC837/7-bad.txt +93 -0
- data/spec/fixtures/X222-HC837/7-good.txt +78 -0
- data/spec/fixtures/X222-HC837/8-bad.txt +64 -0
- data/spec/fixtures/X222-HC837/8-good.txt +52 -0
- data/spec/fixtures/X222-HC837/9-bad.txt +56 -0
- data/spec/fixtures/X222-HC837/9-good.txt +38 -0
- data/spec/fixtures/X223-HC837/1-bad.txt +66 -0
- data/spec/fixtures/X223-HC837/1-good.txt +53 -0
- data/spec/fixtures/X223-HC837/2-bad.txt +69 -0
- data/spec/fixtures/X223-HC837/2-good.txt +60 -0
- data/spec/fixtures/X223-HC837/3-bad.txt +89 -0
- data/spec/fixtures/X223-HC837/3-good.txt +61 -0
- data/spec/fixtures/X223-HC837/4-bad.txt +60 -0
- data/spec/fixtures/X223-HC837/4-good.txt +40 -0
- data/spec/fixtures/X223-HC837/5-bad.txt +75 -0
- data/spec/fixtures/X223-HC837/5-good.txt +58 -0
- data/spec/fixtures/X224-HC837/1-bad.txt +54 -0
- data/spec/fixtures/X224-HC837/1-good.txt +44 -0
- data/spec/fixtures/X224-HC837/2a-bad.txt +52 -0
- data/spec/fixtures/X224-HC837/2a-good.txt +42 -0
- data/spec/fixtures/X224-HC837/2b-bad.txt +67 -0
- data/spec/fixtures/X224-HC837/2b-good.txt +52 -0
- data/spec/fixtures/X224-HC837/3-bad.txt +67 -0
- data/spec/fixtures/X224-HC837/3-good.txt +51 -0
- data/spec/fixtures/X224-HC837/4-bad.txt +49 -0
- data/spec/fixtures/X224-HC837/4-good.txt +40 -0
- data/spec/fixtures/X230-FA997/1-bad.txt +19 -0
- data/spec/fixtures/X230-FA997/1-good.txt +16 -0
- data/spec/fixtures/X231-FA999/1-bad.txt +20 -0
- data/spec/fixtures/X231-FA999/1-good.txt +20 -0
- data/spec/fixtures/X279-HB271/1-bad.txt +36 -0
- data/spec/fixtures/X279-HB271/1-good.txt +30 -0
- data/spec/fixtures/X279-HB271/2-bad.txt +22 -0
- data/spec/fixtures/X279-HB271/2-good.txt +16 -0
- data/spec/fixtures/X279-HB271/3-bad.txt +44 -0
- data/spec/fixtures/X279-HB271/3-good.txt +36 -0
- data/spec/fixtures/X279-HS270/1-bad.txt +29 -0
- data/spec/fixtures/X279-HS270/1-good.txt +23 -0
- data/spec/fixtures/X279-HS270/2-bad.txt +32 -0
- data/spec/fixtures/X279-HS270/2-good.txt +25 -0
- data/spec/spec_helper.rb +34 -0
- data/spec/support/fixtures.rb +26 -0
- data/spec/support/matchers/either_matchers.rb +26 -0
- data/spec/support/matchers/navigation_matchers.rb +247 -0
- data/spec/support/node.rb +41 -0
- data/spec/support/quickcheck/characters.rb +28 -0
- data/spec/support/quickcheck/property.rb +105 -0
- data/spec/support/quickcheck/serialized_edi.rb +399 -0
- data/spec/support/quickcheck.rb +302 -0
- data/spec/support/rcov.rb +34 -0
- metadata +577 -0
data/doc/Generating.md
ADDED
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
Generating X12
|
|
2
|
+
==============
|
|
3
|
+
|
|
4
|
+
Stupidedi has a simple interface for generating X12 documents. Once you have
|
|
5
|
+
defined a transaction set or implementation guide (see {file:Defining.md Defining}),
|
|
6
|
+
you can generate well-formed documents using [`BuilderDsl`][1].
|
|
7
|
+
|
|
8
|
+
[1]: Stupidedi/Builder/BuilderDsl.html
|
|
9
|
+
|
|
10
|
+
Configuration
|
|
11
|
+
-------------
|
|
12
|
+
|
|
13
|
+
Minimal configuration is needed so Stupidedi can load the correct definitions
|
|
14
|
+
and ensure well-formedness. The configuration below links interchange version
|
|
15
|
+
00501 to an instance of [`InterchangeDef`][2], the functional group version
|
|
16
|
+
005010 to an instance of [`FunctionalGroupDef`][3] and links the transaction set
|
|
17
|
+
(identified by three elements) to an instance of [`TransactionSetDef`][4].
|
|
18
|
+
|
|
19
|
+
[2]: Stupidedi/Envelope/InterchangeDef.html
|
|
20
|
+
[3]: Stupidedi/Envelope/FunctionalGroupDef.html
|
|
21
|
+
[4]: Stupidedi/Envelope/TransactionSetDef.html
|
|
22
|
+
|
|
23
|
+
config = Stupidedi::Config.new
|
|
24
|
+
|
|
25
|
+
# Link the "00501" value in ISA12 element to the 5010 interchange definition
|
|
26
|
+
config.interchange.register("00501") do
|
|
27
|
+
Stupidedi::Versions::Interchanges::FiveOhOne::InterchangeDef
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Link the "005010" value in GS08 to the 5010 functional group definition
|
|
31
|
+
config.functional_group.register("005010") do
|
|
32
|
+
Stupidedi::Versions::FunctionalGroups::FiftyTen::FunctionalGroupDef
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Link "005010X222" in GS08 or ST03, "HC" in GS01, and "837"
|
|
36
|
+
# in ST01 to the implementation guide definition
|
|
37
|
+
config.transaction_set.register("005010X222", "HC", "837") do
|
|
38
|
+
Stupidedi::Guides::FiftyTen::X222::HC837P
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Instantiate a new BuilderDsl
|
|
42
|
+
b = Stupidedi::Builder::BuilderDsl.build(config)
|
|
43
|
+
|
|
44
|
+
[`InterchangeDef`][2] specifies which segments can occur directly in the
|
|
45
|
+
interchange envelope (e.g. `ISA` and `ISE`), the order in which they can occur,
|
|
46
|
+
and the definition of those segments.
|
|
47
|
+
|
|
48
|
+
[`FunctionalGroupDef`][3] specifies which segments can occur directly in the
|
|
49
|
+
functional group envelope (e.g. `GS` and `GE`), the order in which they occur,
|
|
50
|
+
and the definition of _every_ segment that can occur _inside_ the envelope.
|
|
51
|
+
|
|
52
|
+
[`TransactionSetDef`][4] specifies the structure of an X12 message, including
|
|
53
|
+
groupings of segments (e.g. tables and loops), and the order in which segments
|
|
54
|
+
and groups of segments may occur. The definition of each segment is given by the
|
|
55
|
+
parent [`FunctionalGroupDef`][3].
|
|
56
|
+
|
|
57
|
+
Generating a Segment
|
|
58
|
+
--------------------
|
|
59
|
+
|
|
60
|
+
The [`BuilderDsl`][1] API uses `method_missing` to dynamically respond to method
|
|
61
|
+
calls. If the method name matches the format of a segment identifier, a segment
|
|
62
|
+
is constructed and added to the parse tree. The arguments to the method call
|
|
63
|
+
should be the elements of the segment.
|
|
64
|
+
|
|
65
|
+
b.ISA("00", "", # authorization information
|
|
66
|
+
"00", "", # authentication information
|
|
67
|
+
"ZZ", "SUBMITTER ID", # submitter identification
|
|
68
|
+
"ZZ", "RECEIVER ID", # recipient identification
|
|
69
|
+
Time.now.utc, # date
|
|
70
|
+
Time.now.utc, # time
|
|
71
|
+
"^", # repetition separator
|
|
72
|
+
"00501", # interchange version
|
|
73
|
+
"333666999", # control number
|
|
74
|
+
"1", # acknowledgement request
|
|
75
|
+
"T", # usage indicator
|
|
76
|
+
":") # component separator
|
|
77
|
+
|
|
78
|
+
> _Note_: The repetition separator "ˆ" and component separator ":" have no
|
|
79
|
+
> special meaning when generating X12. These elements are only meaningful to
|
|
80
|
+
> Stupidedi when parsing X12 from an input stream (see
|
|
81
|
+
> [Parsing X12](Parsing.html)).
|
|
82
|
+
|
|
83
|
+
Alternatively, the [`#segment!`][5] method can be used to avoid the method
|
|
84
|
+
lookup overhead incurred by `method_missing`.
|
|
85
|
+
|
|
86
|
+
[5]: Stupidedi/Builder/BuilderDsl.html#segment!-instance_method
|
|
87
|
+
|
|
88
|
+
### Simple Elements
|
|
89
|
+
|
|
90
|
+
Simple elements of _any_ type can be constructed from Strings (this is how X12
|
|
91
|
+
is parsed from a file), but certain element types can be constructed from other
|
|
92
|
+
types of Ruby values.
|
|
93
|
+
|
|
94
|
+
The description of each element type below pertains to the `FiftyTen` functional
|
|
95
|
+
group definition. The [`SimpleElementDef`][7] and [`SimpleElementVal`][8] classes
|
|
96
|
+
define the minimal interfaces that are extended by subclasses like `AN` and
|
|
97
|
+
`StringVal`. See the [`FiftyTen::ElementTypes`][6] namespace for more examples.
|
|
98
|
+
|
|
99
|
+
[6]: Stupidedi/Versions/FunctionalGroups/FiftyTen/ElementTypes.html
|
|
100
|
+
[7]: Stupidedi/Schema/SimpleElementDef.html
|
|
101
|
+
[8]: Stupidedi/Values/SimpleElementVal.html
|
|
102
|
+
|
|
103
|
+
#### Strings
|
|
104
|
+
|
|
105
|
+
String elements (declared with type `AN`) can be constructed from any value that
|
|
106
|
+
responds to `#to_s`. The constructed element is a [`StringVal`][9].
|
|
107
|
+
|
|
108
|
+
[9]: Stupidedi/Versions/FunctionalGroups/FiftyTen/ElementTypes/StringVal.html
|
|
109
|
+
|
|
110
|
+
#### Identifiers
|
|
111
|
+
|
|
112
|
+
Identifier elements (declared with type `ID`) can be constructed from any value
|
|
113
|
+
that responds to `#to_s`. The constructed element is an [`IdentifierVal`][10].
|
|
114
|
+
|
|
115
|
+
[10]: Stupidedi/Versions/FunctionalGroups/FiftyTen/ElementTypes/IdentifierVal.html
|
|
116
|
+
|
|
117
|
+
#### Dates
|
|
118
|
+
|
|
119
|
+
Date elements (declared with type `DT`) can be constructed from a `String` of
|
|
120
|
+
either six or eight characters, and from any value that responds to `#year`,
|
|
121
|
+
`#month`, and `#day`. This includes the `Date`, `Time`, and `DateTime` classes
|
|
122
|
+
included with the standard Ruby libraries. The constructed element is a
|
|
123
|
+
[`DateVal`][11].
|
|
124
|
+
|
|
125
|
+
[11]: Stupidedi/Versions/FunctionalGroups/FiftyTen/ElementTypes/DateVal.html
|
|
126
|
+
|
|
127
|
+
#### Times
|
|
128
|
+
|
|
129
|
+
Time elements (declared with type `TM`) can be constructed from a `String` of
|
|
130
|
+
either two, four, six, or more than six characters, and from the `Time` and
|
|
131
|
+
`DateTime` value types. The constructed element is a [`TimeVal`][12].
|
|
132
|
+
|
|
133
|
+
[12]: Stupidedi/Versions/FunctionalGroups/FiftyTen/ElementTypes/TimeVal.html
|
|
134
|
+
|
|
135
|
+
#### Numbers
|
|
136
|
+
|
|
137
|
+
Numeric and decimal elements (declared with type `Nn` and `R`, respectively) can
|
|
138
|
+
be constructed from any value that responds to `#to_d`. The constructed element
|
|
139
|
+
is a [`FixnumVal`][13] or [`FloatVal`][14].
|
|
140
|
+
|
|
141
|
+
[13]: Stupidedi/Versions/FunctionalGroups/FiftyTen/ElementTypes/FixnumVal.html
|
|
142
|
+
[14]: Stupidedi/Versions/FunctionalGroups/FiftyTen/ElementTypes/FloatVal.html
|
|
143
|
+
|
|
144
|
+
### Composite Elements
|
|
145
|
+
|
|
146
|
+
Composite elements are constructed with the [`#composite`][24] method. The
|
|
147
|
+
constructed element is a [`CompositeElementVal`][15]. Arguments to the method
|
|
148
|
+
call should be the component elements. For instance, to generate an `HI` segment
|
|
149
|
+
with three composite elements:
|
|
150
|
+
|
|
151
|
+
b.HI(b.composite("ABK", "7868"),
|
|
152
|
+
b.composite("ABF", "052"),
|
|
153
|
+
b.composite("ABF", "E9283"))
|
|
154
|
+
|
|
155
|
+
[15]: Stupidedi/Values/CompositeElementVal.html
|
|
156
|
+
|
|
157
|
+
### Repeated Elements
|
|
158
|
+
|
|
159
|
+
Repeated elements are constructed using the [`#repeated`][25] method. The
|
|
160
|
+
constructed element is a [`RepeatedElementVal`][16]. The arguments to the method
|
|
161
|
+
call should be either all simple elements or all composite elements, according
|
|
162
|
+
to the element definition.
|
|
163
|
+
|
|
164
|
+
b.AK9(b.repeated("R", "X", "E"), 1, 1, 0)
|
|
165
|
+
|
|
166
|
+
b.IK4(b.repeated(
|
|
167
|
+
b.composite(3, 1),
|
|
168
|
+
b.composite(4)),
|
|
169
|
+
1068, 7, "B")
|
|
170
|
+
|
|
171
|
+
[16]: Stupidedi/Values/RepeatedElementVal.html
|
|
172
|
+
|
|
173
|
+
Element Placeholders
|
|
174
|
+
--------------------
|
|
175
|
+
|
|
176
|
+
Because [`BuilderDsl`][1] builds a parse tree as segments are generated, it can
|
|
177
|
+
infer and validate certain information about the elements in a segment.
|
|
178
|
+
|
|
179
|
+
### Blank Elements
|
|
180
|
+
|
|
181
|
+
Blank elements (simple, composite, and repeated) can be generated from a `nil`
|
|
182
|
+
argument, but you can improve readability by using [`#blank`][26], and
|
|
183
|
+
no-argument calls to [`#composite`][24] and [`#repeated`][25]. These are
|
|
184
|
+
arguably more self-documenting.
|
|
185
|
+
|
|
186
|
+
b.AK9(nil, 1, 1, 0)
|
|
187
|
+
b.AK9(b.repeated, 1, 1, 0)
|
|
188
|
+
|
|
189
|
+
b.HI(nil, b.composite(b.blank, "052"))
|
|
190
|
+
b.HI(b.composite, b.composite(b.blank, "052"))
|
|
191
|
+
|
|
192
|
+
Also, if fewer than the defined number of elements are given as arguments, the
|
|
193
|
+
missing arguments generate blank elements. For example, the following statements
|
|
194
|
+
both generate the same segment.
|
|
195
|
+
|
|
196
|
+
b.ST("835", "1234")
|
|
197
|
+
b.ST("835", "1234", b.blank)
|
|
198
|
+
|
|
199
|
+
### Default Elements
|
|
200
|
+
|
|
201
|
+
Certain elements are declared with a single value in [`#allowed_values`][18].
|
|
202
|
+
These are usually qualifier elements, like `NM103`, whose value adds little
|
|
203
|
+
readability. These values can be inferred by [`BuilderDsl`][1] when the
|
|
204
|
+
[`#default`][27] placeholder is used. For example, when generating the X222 837P
|
|
205
|
+
the following statements generate the same segment.
|
|
206
|
+
|
|
207
|
+
b.BHT("0019", "00", control_number, Time.now.utc, Time.now.utc, "CH")
|
|
208
|
+
|
|
209
|
+
b.BHT(b.default, "00", control_number, Time.now.utc, Time.now.utc, "CH")
|
|
210
|
+
|
|
211
|
+
When a default value cannot be inferred, a [`ParseError`][17] is thrown. Note
|
|
212
|
+
that repeated and composite elements can only be generated by [`#default`][27],
|
|
213
|
+
when they are declared `NOT USED`.
|
|
214
|
+
|
|
215
|
+
[17]: Stupidedi/Exceptions/ParseError.html
|
|
216
|
+
[18]: Stupidedi/Schema/SimpleElementUse.html#allowed_values-instance_method
|
|
217
|
+
|
|
218
|
+
### Unused Elements
|
|
219
|
+
|
|
220
|
+
For elements that are declared to never be sent, `nil` or [`#blank`][26] will
|
|
221
|
+
generate the empty element; however using [`#not_used`][28] is arguably more
|
|
222
|
+
self-documenting. If [`BuilderDsl`][1] determines that the element is not
|
|
223
|
+
declared as such, it will raise a [`ParseError`][17]. For example the X221 835
|
|
224
|
+
document declares ST03 with `NOT USED`:
|
|
225
|
+
|
|
226
|
+
b.ST("835", "1234", b.not_used)
|
|
227
|
+
|
|
228
|
+
Syntax Validation
|
|
229
|
+
-----------------
|
|
230
|
+
|
|
231
|
+
The parse tree that [`BuilderDsl`][1] maintains is used to ensure only
|
|
232
|
+
well-formed X12 is generated. This means segments occur in the correct order
|
|
233
|
+
and have the correct number and type of elements.
|
|
234
|
+
|
|
235
|
+
### Segment Order
|
|
236
|
+
|
|
237
|
+
The order in which segments may occur is defined by the active
|
|
238
|
+
[`TransactionSetDef`][4], [`FunctionalGroupDef`][3], and [`InterchangeDef`][2].
|
|
239
|
+
Internally, an instance of [`StateMachine`][19] is used to both
|
|
240
|
+
incrementally build the parse tree and keep track of which segments can occur
|
|
241
|
+
from the given state. The [`#successors`][21] method will return one or more
|
|
242
|
+
[`InstructionTable`][20] values which enumerate the segments that may occur in
|
|
243
|
+
the current state:
|
|
244
|
+
|
|
245
|
+
pp b.successors
|
|
246
|
+
|
|
247
|
+
[InstructionTable(
|
|
248
|
+
1: Instruction[REF: Subscriber Secon..](pop: 0, drop: 0),
|
|
249
|
+
2: Instruction[REF: Property and Cas..](pop: 0, drop: 0),
|
|
250
|
+
3: Instruction[PER: Property and Cas..](pop: 0, drop: 3),
|
|
251
|
+
4: Instruction[NM1: Subscriber Name ](pop: 1, drop: 0, push: LoopState),
|
|
252
|
+
5: Instruction[NM1: Payer Name ](pop: 1, drop: 0, push: LoopState),
|
|
253
|
+
6: Instruction[CLM: Claim Informatio..](pop: 1, drop: 2, push: LoopState),
|
|
254
|
+
7: Instruction[ HL: Subscriber Hiera..](pop: 2, drop: 0, push: LoopState),
|
|
255
|
+
8: Instruction[ HL: Billing Provider..](pop: 3, drop: 0, push: TableState),
|
|
256
|
+
9: Instruction[ HL: Subscriber Hiera..](pop: 3, drop: 0, push: TableState),
|
|
257
|
+
10: Instruction[ HL: Patient Hierachi..](pop: 3, drop: 0, push: TableState),
|
|
258
|
+
11: Instruction[ SE: Transaction Set ..](pop: 3, drop: 4, push: TableState),
|
|
259
|
+
12: Instruction[ ST](pop: 4, drop: 0, push: TransactionSetState),
|
|
260
|
+
13: Instruction[ GE: Functional Group..](pop: 4, drop: 2),
|
|
261
|
+
14: Instruction[ GS](pop: 5, drop: 0, push: FunctionalGroupState),
|
|
262
|
+
15: Instruction[IEA: Interchange Cont..](pop: 5, drop: 2),
|
|
263
|
+
16: Instruction[ISA](pop: 6, drop: 0, push: InterchangeState))]
|
|
264
|
+
|
|
265
|
+
[19]: Stupidedi/Builder/StateMachine.html
|
|
266
|
+
[20]: Stupidedi/Builder/InstructionTable.html
|
|
267
|
+
[21]: Stupidedi/Builder/BuilderDsl.html#successors-instance_method
|
|
268
|
+
|
|
269
|
+
The above output pertains to the X222 837 implementation guide. The output shows
|
|
270
|
+
a single active [`InstructionTable`][20] and the segments it is able to accept.
|
|
271
|
+
For more information about how the parser works, see {file:design/Parser.md Parser Design}.
|
|
272
|
+
Attempting to generate a segment that is not a member of at least one of the
|
|
273
|
+
instruction tables will cause a [`ParseError`][17] to be raised.
|
|
274
|
+
|
|
275
|
+
b.N3("SUITE 111", "1234 OCEAN BLVD")
|
|
276
|
+
#=> Segment N3 cannot occur here (Stupidedi::Exceptions::ParseError)
|
|
277
|
+
|
|
278
|
+
### Element Types
|
|
279
|
+
|
|
280
|
+
The [`InterchangeDef`][2] and [`TransactionSetDef`][4] classes both respond to
|
|
281
|
+
`#segment_dict`, which allows looking up a [`SegmentDef`][23] by segment its
|
|
282
|
+
identifier. The [`SegmentDef`][23] indicates the number of elements and their
|
|
283
|
+
types (composite, repeated, simple). This information allows [`BuilderDsl`][1]
|
|
284
|
+
to raise a [`ParseError`][17] on the following conditions:
|
|
285
|
+
|
|
286
|
+
[23]: Stupidedi/Schema/SegmentDef.html
|
|
287
|
+
|
|
288
|
+
Generating a composite element where a simple or repeated element is defined:
|
|
289
|
+
|
|
290
|
+
b.NM1(b.composite(nil, "B"), nil)
|
|
291
|
+
#=> NM101 is a simple element (Stupidedi::Exceptions::ParseError)
|
|
292
|
+
|
|
293
|
+
Generating a simple element where a repeated or composite element is defined:
|
|
294
|
+
|
|
295
|
+
b.REF(nil, nil, nil, "D")
|
|
296
|
+
#=> REF04 is a composite element (Stupidedi::Exceptions::ParseError)
|
|
297
|
+
|
|
298
|
+
b.DMG(nil, nil, nil, nli, "E")
|
|
299
|
+
#=> DMG05 is a repeatable element (Stupiedi::Exceptions::ParseError)
|
|
300
|
+
|
|
301
|
+
b.DMG(nil, nil, nil, nil, b.repeated("E"))
|
|
302
|
+
#=> DMG05 is a composite element (Stupidedi::Exceptions::ParseError)
|
|
303
|
+
|
|
304
|
+
Generating a repeated element where a non-repeated element is defined:
|
|
305
|
+
|
|
306
|
+
b.NM1(b.repeated("A", "B"))
|
|
307
|
+
#=> NM101 is a simple element (Stupidedi::Exceptions::ParseError)
|
|
308
|
+
|
|
309
|
+
Generating more than the defined number of elements:
|
|
310
|
+
|
|
311
|
+
b.N3(nil, nil, nil)
|
|
312
|
+
#=> N3 has only 4 elements (Stupidedi::Exceptions::ParseError)
|
|
313
|
+
|
|
314
|
+
b.REF(nil, nil, nil, b.composite("A", "B", "C", "D", "E", "F", "G"))
|
|
315
|
+
#=> REF04 has only 6 components (Stupidedi::Exceptions::ParseError)
|
|
316
|
+
|
|
317
|
+
[24]: Stupidedi/Builder/BuilderDsl.html#composite-instance_method
|
|
318
|
+
[25]: Stupidedi/Builder/BuilderDsl.html#repeated-instance_method
|
|
319
|
+
[26]: Stupidedi/Builder/BuilderDsl.html#blank-instance_method
|
|
320
|
+
[27]: Stupidedi/Builder/BuilderDsl.html#default-instance_method
|
|
321
|
+
[28]: Stupidedi/Builder/BuilderDsl.html#not_used-instance_method
|
data/doc/LICENSE.md
ADDED
|
File without changes
|