X12 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. data/CHANGELOG +13 -0
  2. data/COPYING +502 -0
  3. data/README +309 -0
  4. data/Rakefile +157 -0
  5. data/TODO +6 -0
  6. data/doc/classes/X12.html +174 -0
  7. data/doc/classes/X12/Base.html +677 -0
  8. data/doc/classes/X12/Composite.html +156 -0
  9. data/doc/classes/X12/Empty.html +186 -0
  10. data/doc/classes/X12/Field.html +339 -0
  11. data/doc/classes/X12/Loop.html +202 -0
  12. data/doc/classes/X12/Parser.html +306 -0
  13. data/doc/classes/X12/Segment.html +277 -0
  14. data/doc/classes/X12/Table.html +198 -0
  15. data/doc/created.rid +1 -0
  16. data/doc/files/CHANGELOG.html +108 -0
  17. data/doc/files/README.html +474 -0
  18. data/doc/files/TODO.html +95 -0
  19. data/doc/files/lib/X12/Base_rb.html +83 -0
  20. data/doc/files/lib/X12/Composite_rb.html +83 -0
  21. data/doc/files/lib/X12/Empty_rb.html +83 -0
  22. data/doc/files/lib/X12/Field_rb.html +83 -0
  23. data/doc/files/lib/X12/Loop_rb.html +83 -0
  24. data/doc/files/lib/X12/Parser_rb.html +83 -0
  25. data/doc/files/lib/X12/Segment_rb.html +83 -0
  26. data/doc/files/lib/X12/Table_rb.html +83 -0
  27. data/doc/files/lib/X12_rb.html +100 -0
  28. data/doc/fr_class_index.html +35 -0
  29. data/doc/fr_file_index.html +38 -0
  30. data/doc/fr_method_index.html +62 -0
  31. data/doc/index.html +27 -0
  32. data/doc/rdoc-style.css +208 -0
  33. data/example/factory.rb +92 -0
  34. data/example/parse.rb +56 -0
  35. data/lib/X12.rb +50 -0
  36. data/lib/X12/Base.rb +192 -0
  37. data/lib/X12/Composite.rb +37 -0
  38. data/lib/X12/Empty.rb +43 -0
  39. data/lib/X12/Field.rb +81 -0
  40. data/lib/X12/Loop.rb +74 -0
  41. data/lib/X12/Parser.rb +98 -0
  42. data/lib/X12/Segment.rb +92 -0
  43. data/lib/X12/Table.rb +44 -0
  44. data/lib/X12/x12syntax.treetop +256 -0
  45. data/misc/997.d12 +885 -0
  46. data/misc/rdoc_template.rb +697 -0
  47. data/test/tc_factory_997.rb +130 -0
  48. data/test/tc_parse_997.rb +146 -0
  49. data/test/ts_x12.rb +27 -0
  50. metadata +108 -0
@@ -0,0 +1,130 @@
1
+ #--
2
+ # This file is part of the X12Parser library that provides tools to
3
+ # manipulate X12 messages using Ruby native syntax.
4
+ #
5
+ # http://x12parser.rubyforge.org
6
+ #
7
+ # Copyright (C) 2008 APP Design, Inc.
8
+ #
9
+ # This library is free software; you can redistribute it and/or
10
+ # modify it under the terms of the GNU Lesser General Public
11
+ # License as published by the Free Software Foundation; either
12
+ # version 2.1 of the License, or (at your option) any later version.
13
+ #
14
+ # This library is distributed in the hope that it will be useful,
15
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
+ # Lesser General Public License for more details.
18
+ #
19
+ # You should have received a copy of the GNU Lesser General Public
20
+ # License along with this library; if not, write to the Free Software
21
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22
+ #++
23
+ #
24
+ require 'x12'
25
+ require 'test/unit'
26
+
27
+ class TestFactory < Test::Unit::TestCase
28
+
29
+ @@p = nil
30
+ RESULT=<<-EOT
31
+ ST*997*2878~
32
+ AK1*HS*293328532~
33
+ AK2*270*~
34
+ AK3*NM1**L1000D~
35
+ AK4***55*Bad element~
36
+ AK5*~
37
+ AK3*DMG*0*L1010*22~
38
+ AK4*0**0~
39
+ AK4*0**1~
40
+ AK4*1**0~
41
+ AK4*1**1~
42
+ AK5*666****999~
43
+ AK9****~
44
+ SE**~
45
+ EOT
46
+
47
+ @@result = RESULT.gsub!(/\n/,'')
48
+ TIMES = 1000
49
+
50
+ def setup
51
+ unless @@p
52
+ @@p = X12::Parser.new('misc/997.d12')
53
+ end
54
+ end # setup
55
+
56
+ def teardown
57
+ # Nothing
58
+ end # teardown
59
+
60
+ def test_all
61
+ @r = @@p.factory('997')
62
+
63
+ @r.ST.TransactionSetIdentifierCode = 997
64
+ @r.ST.TransactionSetControlNumber = '2878'
65
+
66
+ @r.AK1 { |ak1|
67
+ ak1.FunctionalIdentifierCode = 'HS'
68
+ ak1.GroupControlNumber = 293328532
69
+ }
70
+
71
+ @r.L1000.L1010.AK4.DataElementSyntaxErrorCode=55
72
+ @r.L1000.AK2.TransactionSetIdentifierCode = 270
73
+ @r.L1000.L1010 {|l|
74
+ l.AK3 {|s|
75
+ s.SegmentIdCode = 'NM1'
76
+ #SegmentPositionInTransactionSet
77
+ s.LoopIdentifierCode = 'L1000D'
78
+ #SegmentSyntaxErrorCode
79
+ }
80
+
81
+ l.AK4 {|s|
82
+ #s.PositionInSegment =
83
+ #s.DataElementReferenceNumber =
84
+ #s.DataElementSyntaxErrorCode =
85
+ s.CopyOfBadDataElement = 'Bad element'
86
+ }
87
+ }
88
+
89
+ # Should be two repeats in total
90
+ @r.L1000.repeat {|l1000|
91
+ (0..1).each {|loop_repeat| # Two repeats of the loop L1010
92
+ l1000.L1010.repeat {|l1010|
93
+
94
+ l1010.AK3 {|s|
95
+ s.SegmentIdCode = 'DMG'
96
+ s.SegmentPositionInTransactionSet = 0
97
+ s.LoopIdentifierCode = 'L1010'
98
+ s.SegmentSyntaxErrorCode = 22
99
+ } if loop_repeat == 0 # AK3 only in the first repeat of L1010
100
+
101
+ (0..1).each {|ak4_repeat| # Two repeats of the segment AK4
102
+ l1010.AK4.repeat {|s|
103
+ s.PositionInSegment = loop_repeat
104
+ #s.DataElementReferenceNumber =
105
+ s.DataElementSyntaxErrorCode = ak4_repeat
106
+ #s.CopyOfBadDataElement =
107
+ } # s
108
+ } # ak4_repeat
109
+ } # l1010
110
+ } # loop_repeat
111
+
112
+ l1000.AK5{|a|
113
+ a.TransactionSetAcknowledgmentCode = 666
114
+ a.TransactionSetSyntaxErrorCode4 = 999
115
+ } # a
116
+ } # l1000
117
+
118
+ assert_equal(@@result, @r.render)
119
+ end # test_all
120
+
121
+ def test_timing
122
+ start = Time::now
123
+ TIMES.times do
124
+ test_all
125
+ end
126
+ finish = Time::now
127
+ puts "Factories per second: #{TIMES.to_f/(finish-start)}, elapsed: #{finish-start}"
128
+ end # test_timing
129
+
130
+ end # TestList
@@ -0,0 +1,146 @@
1
+ #--
2
+ # This file is part of the X12Parser library that provides tools to
3
+ # manipulate X12 messages using Ruby native syntax.
4
+ #
5
+ # http://x12parser.rubyforge.org
6
+ #
7
+ # Copyright (C) 2008 APP Design, Inc.
8
+ #
9
+ # This library is free software; you can redistribute it and/or
10
+ # modify it under the terms of the GNU Lesser General Public
11
+ # License as published by the Free Software Foundation; either
12
+ # version 2.1 of the License, or (at your option) any later version.
13
+ #
14
+ # This library is distributed in the hope that it will be useful,
15
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
+ # Lesser General Public License for more details.
18
+ #
19
+ # You should have received a copy of the GNU Lesser General Public
20
+ # License along with this library; if not, write to the Free Software
21
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22
+ #++
23
+ #
24
+ require 'x12'
25
+ require 'test/unit'
26
+
27
+ class TestParse < Test::Unit::TestCase
28
+
29
+ @@p = nil
30
+ @@parser = X12::Parser.new('misc/997.d12')
31
+ TIMES = 1000
32
+
33
+ def setup
34
+ unless @@p
35
+ @@m997=<<-EOT
36
+ ST*997*2878~
37
+ AK1*HS*293328532~
38
+ AK2*270*307272179~
39
+ AK3*NM1*8*L1010_0*8~
40
+ AK4*0:0*66*1~
41
+ AK4*0:1*66*1~
42
+ AK4*0:2*66*1~
43
+ AK3*NM1*8*L1010_1*8~
44
+ AK4*1:0*66*1~
45
+ AK4*1:1*66*1~
46
+ AK3*NM1*8*L1010_2*8~
47
+ AK4*2:0*66*1~
48
+ AK5*R*5~
49
+ AK9*R*1*1*0~
50
+ SE*8*2878~
51
+ EOT
52
+
53
+ # This should parse into
54
+ # 997 [0]: ST*997*2878~AK1*HS*293328532~A...AK5*R*5~AK9*R*1*1*0~SE*8*2878~
55
+ # ST [0]: ST*997*2878~
56
+ # AK1 [0]: AK1*HS*293328532~
57
+ # L1000 [0]: AK2*270*307272179~AK3*NM1*8*L1...1010_2*8~AK4*2:0*66*1~AK5*R*5~
58
+ # AK2 [0]: AK2*270*307272179~
59
+ # L1010 [0]: AK3*NM1*8*L1010_0*8~AK4*0:0*66*1~AK4*0:1*66*1~AK4*0:2*66*1~
60
+ # AK3 [0]: AK3*NM1*8*L1010_0*8~
61
+ # AK4 [0]: AK4*0:0*66*1~
62
+ # AK4 [1]: AK4*0:1*66*1~
63
+ # AK4 [2]: AK4*0:2*66*1~
64
+ # L1010 [1]: AK3*NM1*8*L1010_1*8~AK4*1:0*66*1~AK4*1:1*66*1~
65
+ # AK3 [0]: AK3*NM1*8*L1010_1*8~
66
+ # AK4 [0]: AK4*1:0*66*1~
67
+ # AK4 [1]: AK4*1:1*66*1~
68
+ # L1010 [2]: AK3*NM1*8*L1010_2*8~AK4*2:0*66*1~
69
+ # AK3 [0]: AK3*NM1*8*L1010_2*8~
70
+ # AK4 [0]: AK4*2:0*66*1~
71
+ # AK5 [0]: AK5*R*5~
72
+ # AK9 [0]: AK9*R*1*1*0~
73
+ # SE [0]: SE*8*2878~
74
+
75
+ @@m997.gsub!(/\n/,'')
76
+
77
+ @@p = @@parser.parse('997', @@m997)
78
+ end
79
+ @r = @@p
80
+ end # setup
81
+
82
+ def teardown
83
+ # Nothing
84
+ end # teardown
85
+
86
+ def test_ST
87
+ assert_equal('ST*997*2878~', @r.ST.to_s)
88
+ assert_equal('997', @r.ST.TransactionSetIdentifierCode)
89
+ end # test_ST
90
+
91
+ def test_AK1
92
+ assert_equal('293328532', @r.AK1.GroupControlNumber)
93
+ end # test_AK1
94
+
95
+ def test_AK2
96
+ assert_equal('270', @r.L1000.AK2.TransactionSetIdentifierCode)
97
+ end # test_AK2
98
+
99
+ def test_L1010
100
+ assert_match(/L1010_0/, @r.L1000.L1010.to_s)
101
+ assert_equal(3, @r.L1000.L1010.to_a.size)
102
+ assert_equal(3, @r.L1000.L1010.size)
103
+ assert_match(/L1010_2/, @r.L1000.L1010.to_a[2].to_s)
104
+ assert_match(/L1010_2/, @r.L1000.L1010[2].to_s)
105
+ end # test_L1010
106
+
107
+ def test_AK4
108
+ assert_equal('AK4*1:0*66*1~', @r.L1000.L1010.to_a[1].AK4.to_s)
109
+ assert_equal('AK4*1:0*66*1~', @r.L1000.L1010[1].AK4.to_s)
110
+ assert_equal(3, @r.L1000.L1010.AK4.to_a.size)
111
+ assert_equal(3, @r.L1000.L1010.AK4.size)
112
+ assert_equal(2, @r.L1000.L1010.to_a[1].AK4.to_a.size)
113
+ assert_equal(2, @r.L1000.L1010[1].AK4.size)
114
+ assert_equal('AK4*1:1*66*1~', @r.L1000.L1010.to_a[1].AK4.to_a[1].to_s)
115
+ assert_equal('AK4*1:1*66*1~', @r.L1000.L1010[1].AK4[1].to_s)
116
+ assert_equal('66', @r.L1000.L1010.AK4.DataElementReferenceNumber)
117
+ end # test_AK4
118
+
119
+ def test_absent
120
+ assert_equal(X12::EMPTY, @r.L1000.AK8.TransactionSetIdentifierCode)
121
+ assert_equal(X12::EMPTY, @r.L1000.L1111)
122
+ assert_equal(X12::EMPTY, @r.L1000.L1111.L2222)
123
+ assert_equal(X12::EMPTY, @r.L1000.L1111.L2222.AFAFA)
124
+ assert_equal(X12::EMPTY, @r.L1000.L1010[-99])
125
+ assert_equal(X12::EMPTY, @r.L1000.L1010[99])
126
+ assert_equal(X12::EMPTY, @r.L1000.L1010[99].AK4)
127
+
128
+ assert_equal('', @r.L1000.AK8.TransactionSetIdentifierCode.to_s)
129
+ end # test_absent
130
+
131
+ def test_timing
132
+ start = Time::now
133
+ TIMES.times do
134
+ @r = @@parser.parse('997', @@m997)
135
+ test_ST
136
+ test_AK1
137
+ test_AK2
138
+ test_AK4
139
+ test_L1010
140
+ test_absent
141
+ end
142
+ finish = Time::now
143
+ puts "Parses per second: #{TIMES.to_f/(finish-start)}, elapsed: #{finish-start}"
144
+ end # test_timing
145
+
146
+ end # TestList
@@ -0,0 +1,27 @@
1
+ #--
2
+ # This file is part of the X12Parser library that provides tools to
3
+ # manipulate X12 messages using Ruby native syntax.
4
+ #
5
+ # http://x12parser.rubyforge.org
6
+ #
7
+ # Copyright (C) 2008 APP Design, Inc.
8
+ #
9
+ # This library is free software; you can redistribute it and/or
10
+ # modify it under the terms of the GNU Lesser General Public
11
+ # License as published by the Free Software Foundation; either
12
+ # version 2.1 of the License, or (at your option) any later version.
13
+ #
14
+ # This library is distributed in the hope that it will be useful,
15
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
+ # Lesser General Public License for more details.
18
+ #
19
+ # You should have received a copy of the GNU Lesser General Public
20
+ # License along with this library; if not, write to the Free Software
21
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22
+ #++
23
+ #
24
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
25
+
26
+ require 'tc_parse_997'
27
+ require 'tc_factory_997'
metadata ADDED
@@ -0,0 +1,108 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.4
3
+ specification_version: 1
4
+ name: X12
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.0.5
7
+ date: 2008-11-13 00:00:00 -06:00
8
+ summary: X12 parsing and generation library
9
+ require_paths:
10
+ - lib
11
+ email: info@appdesign.com
12
+ homepage: http://www.appdesign.com
13
+ rubyforge_project: X12
14
+ description: Library to parse X12 messages and manipulate their loops, segments, fields, composites, and validation tables.
15
+ autorequire: x12
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - APP Design, Inc.
31
+ files:
32
+ - Rakefile
33
+ - README
34
+ - TODO
35
+ - CHANGELOG
36
+ - COPYING
37
+ - doc/classes
38
+ - doc/classes/X12
39
+ - doc/classes/X12/Base.html
40
+ - doc/classes/X12/Composite.html
41
+ - doc/classes/X12/Empty.html
42
+ - doc/classes/X12/Field.html
43
+ - doc/classes/X12/Loop.html
44
+ - doc/classes/X12/Parser.html
45
+ - doc/classes/X12/Segment.html
46
+ - doc/classes/X12/Table.html
47
+ - doc/classes/X12.html
48
+ - doc/created.rid
49
+ - doc/files
50
+ - doc/files/CHANGELOG.html
51
+ - doc/files/lib
52
+ - doc/files/lib/X12
53
+ - doc/files/lib/X12/Base_rb.html
54
+ - doc/files/lib/X12/Composite_rb.html
55
+ - doc/files/lib/X12/Empty_rb.html
56
+ - doc/files/lib/X12/Field_rb.html
57
+ - doc/files/lib/X12/Loop_rb.html
58
+ - doc/files/lib/X12/Parser_rb.html
59
+ - doc/files/lib/X12/Segment_rb.html
60
+ - doc/files/lib/X12/Table_rb.html
61
+ - doc/files/lib/X12_rb.html
62
+ - doc/files/README.html
63
+ - doc/files/TODO.html
64
+ - doc/fr_class_index.html
65
+ - doc/fr_file_index.html
66
+ - doc/fr_method_index.html
67
+ - doc/index.html
68
+ - doc/rdoc-style.css
69
+ - lib/X12
70
+ - lib/X12/Base.rb
71
+ - lib/X12/Composite.rb
72
+ - lib/X12/Empty.rb
73
+ - lib/X12/Field.rb
74
+ - lib/X12/Loop.rb
75
+ - lib/X12/Parser.rb
76
+ - lib/X12/Segment.rb
77
+ - lib/X12/Table.rb
78
+ - lib/X12/x12syntax.treetop
79
+ - lib/X12.rb
80
+ - test/tc_factory_997.rb
81
+ - test/tc_parse_997.rb
82
+ - test/ts_x12.rb
83
+ - example/factory.rb
84
+ - example/parse.rb
85
+ - misc/997.d12
86
+ - misc/rdoc_template.rb
87
+ test_files:
88
+ - test/ts_x12.rb
89
+ rdoc_options: []
90
+
91
+ extra_rdoc_files: []
92
+
93
+ executables: []
94
+
95
+ extensions: []
96
+
97
+ requirements:
98
+ - none
99
+ dependencies:
100
+ - !ruby/object:Gem::Dependency
101
+ name: treetop
102
+ version_requirement:
103
+ version_requirements: !ruby/object:Gem::Version::Requirement
104
+ requirements:
105
+ - - ">"
106
+ - !ruby/object:Gem::Version
107
+ version: 0.0.0
108
+ version: