hippo 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. data/CHANGELOG +7 -0
  2. data/README.md +58 -7
  3. data/lib/hippo/exceptions.rb +2 -1
  4. data/lib/hippo/field.rb +87 -1
  5. data/lib/hippo/parser/segment.rb +2 -2
  6. data/lib/hippo/segments/AK1.rb +1 -2
  7. data/lib/hippo/segments/AK3.rb +1 -2
  8. data/lib/hippo/segments/AK4.rb +4 -8
  9. data/lib/hippo/segments/AK9.rb +3 -6
  10. data/lib/hippo/segments/AMT.rb +1 -1
  11. data/lib/hippo/segments/BPR.rb +1 -1
  12. data/lib/hippo/segments/CAS.rb +12 -12
  13. data/lib/hippo/segments/CLM.rb +1 -1
  14. data/lib/hippo/segments/CLP.rb +5 -5
  15. data/lib/hippo/segments/CN1.rb +3 -3
  16. data/lib/hippo/segments/CR1.rb +2 -2
  17. data/lib/hippo/segments/CR2.rb +4 -5
  18. data/lib/hippo/segments/CR3.rb +1 -1
  19. data/lib/hippo/segments/CR4.rb +16 -16
  20. data/lib/hippo/segments/CR5.rb +7 -7
  21. data/lib/hippo/segments/CR7.rb +2 -4
  22. data/lib/hippo/segments/CTP.rb +15 -16
  23. data/lib/hippo/segments/CTX.rb +6 -12
  24. data/lib/hippo/segments/CUR.rb +1 -1
  25. data/lib/hippo/segments/DMG.rb +1 -1
  26. data/lib/hippo/segments/DN1.rb +2 -2
  27. data/lib/hippo/segments/DN2.rb +1 -1
  28. data/lib/hippo/segments/DSB.rb +2 -2
  29. data/lib/hippo/segments/FRM.rb +1 -1
  30. data/lib/hippo/segments/GE.rb +2 -2
  31. data/lib/hippo/segments/GS.rb +6 -6
  32. data/lib/hippo/segments/HCP.rb +5 -5
  33. data/lib/hippo/segments/HI.rb +24 -24
  34. data/lib/hippo/segments/HSD.rb +3 -4
  35. data/lib/hippo/segments/IEA.rb +2 -2
  36. data/lib/hippo/segments/IK3.rb +1 -2
  37. data/lib/hippo/segments/IK4.rb +4 -8
  38. data/lib/hippo/segments/ISA.rb +10 -10
  39. data/lib/hippo/segments/K3.rb +10 -10
  40. data/lib/hippo/segments/LX.rb +1 -2
  41. data/lib/hippo/segments/MEA.rb +13 -13
  42. data/lib/hippo/segments/MIA.rb +19 -19
  43. data/lib/hippo/segments/MOA.rb +4 -4
  44. data/lib/hippo/segments/PAT.rb +1 -1
  45. data/lib/hippo/segments/PLB.rb +6 -6
  46. data/lib/hippo/segments/PS1.rb +1 -1
  47. data/lib/hippo/segments/PWK.rb +1 -2
  48. data/lib/hippo/segments/QTY.rb +11 -11
  49. data/lib/hippo/segments/SE.rb +1 -2
  50. data/lib/hippo/segments/STC.rb +2 -2
  51. data/lib/hippo/segments/SV1.rb +8 -12
  52. data/lib/hippo/segments/SV2.rb +4 -4
  53. data/lib/hippo/segments/SV3.rb +6 -10
  54. data/lib/hippo/segments/SV5.rb +3 -3
  55. data/lib/hippo/segments/SV6.rb +6 -10
  56. data/lib/hippo/segments/SVC.rb +4 -4
  57. data/lib/hippo/segments/SVD.rb +3 -4
  58. data/lib/hippo/segments/TA1.rb +5 -5
  59. data/lib/hippo/segments/TS2.rb +19 -19
  60. data/lib/hippo/segments/TS3.rb +21 -21
  61. data/lib/hippo/segments/UR.rb +1 -1
  62. data/lib/hippo/segments/base.rb +12 -14
  63. data/lib/hippo/version.rb +1 -1
  64. data/lib/hippo.rb +4 -0
  65. data/test/test_helper.rb +4 -0
  66. data/test/test_parser.rb +3 -3
  67. data/test/test_segments_base.rb +42 -0
  68. metadata +6 -6
@@ -73,7 +73,7 @@ module Hippo::Segments
73
73
 
74
74
  field :name => 'MonetaryAmount',
75
75
  :sequence => 2,
76
- :datatype => :numeric,
76
+ :datatype => :decimal,
77
77
  :minimum => 1,
78
78
  :maximum => 18,
79
79
  :required => true,
@@ -81,7 +81,7 @@ module Hippo::Segments
81
81
 
82
82
  field :name => 'MonetaryAmount',
83
83
  :sequence => 3,
84
- :datatype => :numeric,
84
+ :datatype => :decimal,
85
85
  :minimum => 1,
86
86
  :maximum => 18,
87
87
  :required => false,
@@ -97,7 +97,7 @@ module Hippo::Segments
97
97
 
98
98
  field :name => 'Quantity',
99
99
  :sequence => 5,
100
- :datatype => :numeric,
100
+ :datatype => :decimal,
101
101
  :minimum => 1,
102
102
  :maximum => 15,
103
103
  :required => false,
@@ -173,7 +173,7 @@ module Hippo::Segments
173
173
 
174
174
  field :name => 'Quantity',
175
175
  :sequence => 7,
176
- :datatype => :numeric,
176
+ :datatype => :decimal,
177
177
  :minimum => 1,
178
178
  :maximum => 15,
179
179
  :required => false,
@@ -13,7 +13,7 @@ module Hippo::Segments
13
13
 
14
14
  field :name => 'MonetaryAmount',
15
15
  :sequence => 2,
16
- :datatype => :numeric,
16
+ :datatype => :decimal,
17
17
  :minimum => 1,
18
18
  :maximum => 18,
19
19
  :required => true,
@@ -97,7 +97,7 @@ module Hippo::Segments
97
97
 
98
98
  field :name => 'Quantity',
99
99
  :sequence => 5,
100
- :datatype => :numeric,
100
+ :datatype => :decimal,
101
101
  :minimum => 1,
102
102
  :maximum => 15,
103
103
  :required => false,
@@ -105,8 +105,7 @@ module Hippo::Segments
105
105
 
106
106
  field :name => 'AssignedNumber',
107
107
  :sequence => 6,
108
- :datatype => :numeric,
109
- :decimal => 0,
108
+ :datatype => :integer,
110
109
  :minimum => 1,
111
110
  :maximum => 6,
112
111
  :required => false,
@@ -5,7 +5,7 @@ module Hippo::Segments
5
5
 
6
6
  field :name => 'InterchangeControlNumber',
7
7
  :sequence => 1,
8
- :datatype => :string,
8
+ :datatype => :integer,
9
9
  :minimum => 9,
10
10
  :maximum => 9,
11
11
  :required => true,
@@ -13,7 +13,7 @@ module Hippo::Segments
13
13
 
14
14
  field :name => 'InterchangeDate',
15
15
  :sequence => 2,
16
- :datatype => :string,
16
+ :datatype => :date,
17
17
  :minimum => 6,
18
18
  :maximum => 6,
19
19
  :required => true,
@@ -21,7 +21,7 @@ module Hippo::Segments
21
21
 
22
22
  field :name => 'InterchangeTime',
23
23
  :sequence => 3,
24
- :datatype => :string,
24
+ :datatype => :time,
25
25
  :minimum => 4,
26
26
  :maximum => 4,
27
27
  :required => true,
@@ -29,7 +29,7 @@ module Hippo::Segments
29
29
 
30
30
  field :name => 'InterchangeAcknowledgmentCode',
31
31
  :sequence => 4,
32
- :datatype => :string,
32
+ :datatype => :list,
33
33
  :minimum => 1,
34
34
  :maximum => 1,
35
35
  :required => true,
@@ -37,7 +37,7 @@ module Hippo::Segments
37
37
 
38
38
  field :name => 'InterchangeNoteCode',
39
39
  :sequence => 5,
40
- :datatype => :string,
40
+ :datatype => :list,
41
41
  :minimum => 3,
42
42
  :maximum => 3,
43
43
  :required => true,
@@ -5,7 +5,7 @@ module Hippo::Segments
5
5
 
6
6
  field :name => 'MonetaryAmount',
7
7
  :sequence => 1,
8
- :datatype => :numeric,
8
+ :datatype => :decimal,
9
9
  :minimum => 1,
10
10
  :maximum => 18,
11
11
  :required => false,
@@ -13,7 +13,7 @@ module Hippo::Segments
13
13
 
14
14
  field :name => 'MonetaryAmount',
15
15
  :sequence => 2,
16
- :datatype => :numeric,
16
+ :datatype => :decimal,
17
17
  :minimum => 1,
18
18
  :maximum => 18,
19
19
  :required => false,
@@ -21,7 +21,7 @@ module Hippo::Segments
21
21
 
22
22
  field :name => 'MonetaryAmount',
23
23
  :sequence => 3,
24
- :datatype => :numeric,
24
+ :datatype => :decimal,
25
25
  :minimum => 1,
26
26
  :maximum => 18,
27
27
  :required => false,
@@ -29,7 +29,7 @@ module Hippo::Segments
29
29
 
30
30
  field :name => 'MonetaryAmount',
31
31
  :sequence => 4,
32
- :datatype => :numeric,
32
+ :datatype => :decimal,
33
33
  :minimum => 1,
34
34
  :maximum => 18,
35
35
  :required => false,
@@ -37,7 +37,7 @@ module Hippo::Segments
37
37
 
38
38
  field :name => 'MonetaryAmount',
39
39
  :sequence => 5,
40
- :datatype => :numeric,
40
+ :datatype => :decimal,
41
41
  :minimum => 1,
42
42
  :maximum => 18,
43
43
  :required => false,
@@ -45,7 +45,7 @@ module Hippo::Segments
45
45
 
46
46
  field :name => 'MonetaryAmount',
47
47
  :sequence => 6,
48
- :datatype => :numeric,
48
+ :datatype => :decimal,
49
49
  :minimum => 1,
50
50
  :maximum => 18,
51
51
  :required => false,
@@ -53,7 +53,7 @@ module Hippo::Segments
53
53
 
54
54
  field :name => 'Quantity',
55
55
  :sequence => 7,
56
- :datatype => :numeric,
56
+ :datatype => :decimal,
57
57
  :minimum => 1,
58
58
  :maximum => 15,
59
59
  :required => false,
@@ -61,7 +61,7 @@ module Hippo::Segments
61
61
 
62
62
  field :name => 'MonetaryAmount',
63
63
  :sequence => 8,
64
- :datatype => :numeric,
64
+ :datatype => :decimal,
65
65
  :minimum => 1,
66
66
  :maximum => 18,
67
67
  :required => false,
@@ -69,7 +69,7 @@ module Hippo::Segments
69
69
 
70
70
  field :name => 'MonetaryAmount',
71
71
  :sequence => 9,
72
- :datatype => :numeric,
72
+ :datatype => :decimal,
73
73
  :minimum => 1,
74
74
  :maximum => 18,
75
75
  :required => false,
@@ -77,7 +77,7 @@ module Hippo::Segments
77
77
 
78
78
  field :name => 'Quantity',
79
79
  :sequence => 10,
80
- :datatype => :numeric,
80
+ :datatype => :decimal,
81
81
  :minimum => 1,
82
82
  :maximum => 15,
83
83
  :required => false,
@@ -85,7 +85,7 @@ module Hippo::Segments
85
85
 
86
86
  field :name => 'Quantity',
87
87
  :sequence => 11,
88
- :datatype => :numeric,
88
+ :datatype => :decimal,
89
89
  :minimum => 1,
90
90
  :maximum => 15,
91
91
  :required => false,
@@ -93,7 +93,7 @@ module Hippo::Segments
93
93
 
94
94
  field :name => 'Quantity',
95
95
  :sequence => 12,
96
- :datatype => :numeric,
96
+ :datatype => :decimal,
97
97
  :minimum => 1,
98
98
  :maximum => 15,
99
99
  :required => false,
@@ -101,7 +101,7 @@ module Hippo::Segments
101
101
 
102
102
  field :name => 'Quantity',
103
103
  :sequence => 13,
104
- :datatype => :numeric,
104
+ :datatype => :decimal,
105
105
  :minimum => 1,
106
106
  :maximum => 15,
107
107
  :required => false,
@@ -109,7 +109,7 @@ module Hippo::Segments
109
109
 
110
110
  field :name => 'Quantity',
111
111
  :sequence => 14,
112
- :datatype => :numeric,
112
+ :datatype => :decimal,
113
113
  :minimum => 1,
114
114
  :maximum => 15,
115
115
  :required => false,
@@ -117,7 +117,7 @@ module Hippo::Segments
117
117
 
118
118
  field :name => 'MonetaryAmount',
119
119
  :sequence => 15,
120
- :datatype => :numeric,
120
+ :datatype => :decimal,
121
121
  :minimum => 1,
122
122
  :maximum => 18,
123
123
  :required => false,
@@ -125,7 +125,7 @@ module Hippo::Segments
125
125
 
126
126
  field :name => 'Quantity',
127
127
  :sequence => 16,
128
- :datatype => :numeric,
128
+ :datatype => :decimal,
129
129
  :minimum => 1,
130
130
  :maximum => 15,
131
131
  :required => false,
@@ -133,7 +133,7 @@ module Hippo::Segments
133
133
 
134
134
  field :name => 'MonetaryAmount',
135
135
  :sequence => 17,
136
- :datatype => :numeric,
136
+ :datatype => :decimal,
137
137
  :minimum => 1,
138
138
  :maximum => 18,
139
139
  :required => false,
@@ -141,7 +141,7 @@ module Hippo::Segments
141
141
 
142
142
  field :name => 'MonetaryAmount',
143
143
  :sequence => 18,
144
- :datatype => :numeric,
144
+ :datatype => :decimal,
145
145
  :minimum => 1,
146
146
  :maximum => 18,
147
147
  :required => false,
@@ -149,7 +149,7 @@ module Hippo::Segments
149
149
 
150
150
  field :name => 'MonetaryAmount',
151
151
  :sequence => 19,
152
- :datatype => :numeric,
152
+ :datatype => :decimal,
153
153
  :minimum => 1,
154
154
  :maximum => 18,
155
155
  :required => false,
@@ -29,7 +29,7 @@ module Hippo::Segments
29
29
 
30
30
  field :name => 'Quantity',
31
31
  :sequence => 4,
32
- :datatype => :numeric,
32
+ :datatype => :decimal,
33
33
  :minimum => 1,
34
34
  :maximum => 15,
35
35
  :required => true,
@@ -37,7 +37,7 @@ module Hippo::Segments
37
37
 
38
38
  field :name => 'MonetaryAmount',
39
39
  :sequence => 5,
40
- :datatype => :numeric,
40
+ :datatype => :decimal,
41
41
  :minimum => 1,
42
42
  :maximum => 18,
43
43
  :required => true,
@@ -45,7 +45,7 @@ module Hippo::Segments
45
45
 
46
46
  field :name => 'MonetaryAmount',
47
47
  :sequence => 6,
48
- :datatype => :numeric,
48
+ :datatype => :decimal,
49
49
  :minimum => 1,
50
50
  :maximum => 18,
51
51
  :required => false,
@@ -53,7 +53,7 @@ module Hippo::Segments
53
53
 
54
54
  field :name => 'MonetaryAmount',
55
55
  :sequence => 7,
56
- :datatype => :numeric,
56
+ :datatype => :decimal,
57
57
  :minimum => 1,
58
58
  :maximum => 18,
59
59
  :required => false,
@@ -61,7 +61,7 @@ module Hippo::Segments
61
61
 
62
62
  field :name => 'MonetaryAmount',
63
63
  :sequence => 8,
64
- :datatype => :numeric,
64
+ :datatype => :decimal,
65
65
  :minimum => 1,
66
66
  :maximum => 18,
67
67
  :required => false,
@@ -69,7 +69,7 @@ module Hippo::Segments
69
69
 
70
70
  field :name => 'MonetaryAmount',
71
71
  :sequence => 9,
72
- :datatype => :numeric,
72
+ :datatype => :decimal,
73
73
  :minimum => 1,
74
74
  :maximum => 18,
75
75
  :required => false,
@@ -77,7 +77,7 @@ module Hippo::Segments
77
77
 
78
78
  field :name => 'MonetaryAmount',
79
79
  :sequence => 10,
80
- :datatype => :numeric,
80
+ :datatype => :decimal,
81
81
  :minimum => 1,
82
82
  :maximum => 18,
83
83
  :required => false,
@@ -85,7 +85,7 @@ module Hippo::Segments
85
85
 
86
86
  field :name => 'MonetaryAmount',
87
87
  :sequence => 11,
88
- :datatype => :numeric,
88
+ :datatype => :decimal,
89
89
  :minimum => 1,
90
90
  :maximum => 18,
91
91
  :required => false,
@@ -93,7 +93,7 @@ module Hippo::Segments
93
93
 
94
94
  field :name => 'MonetaryAmount',
95
95
  :sequence => 12,
96
- :datatype => :numeric,
96
+ :datatype => :decimal,
97
97
  :minimum => 1,
98
98
  :maximum => 18,
99
99
  :required => false,
@@ -101,7 +101,7 @@ module Hippo::Segments
101
101
 
102
102
  field :name => 'MonetaryAmount',
103
103
  :sequence => 13,
104
- :datatype => :numeric,
104
+ :datatype => :decimal,
105
105
  :minimum => 1,
106
106
  :maximum => 18,
107
107
  :required => false,
@@ -109,7 +109,7 @@ module Hippo::Segments
109
109
 
110
110
  field :name => 'MonetaryAmount',
111
111
  :sequence => 14,
112
- :datatype => :numeric,
112
+ :datatype => :decimal,
113
113
  :minimum => 1,
114
114
  :maximum => 18,
115
115
  :required => false,
@@ -117,7 +117,7 @@ module Hippo::Segments
117
117
 
118
118
  field :name => 'MonetaryAmount',
119
119
  :sequence => 15,
120
- :datatype => :numeric,
120
+ :datatype => :decimal,
121
121
  :minimum => 1,
122
122
  :maximum => 18,
123
123
  :required => false,
@@ -125,7 +125,7 @@ module Hippo::Segments
125
125
 
126
126
  field :name => 'MonetaryAmount',
127
127
  :sequence => 16,
128
- :datatype => :numeric,
128
+ :datatype => :decimal,
129
129
  :minimum => 1,
130
130
  :maximum => 18,
131
131
  :required => false,
@@ -133,7 +133,7 @@ module Hippo::Segments
133
133
 
134
134
  field :name => 'MonetaryAmount',
135
135
  :sequence => 17,
136
- :datatype => :numeric,
136
+ :datatype => :decimal,
137
137
  :minimum => 1,
138
138
  :maximum => 18,
139
139
  :required => false,
@@ -141,7 +141,7 @@ module Hippo::Segments
141
141
 
142
142
  field :name => 'MonetaryAmount',
143
143
  :sequence => 18,
144
- :datatype => :numeric,
144
+ :datatype => :decimal,
145
145
  :minimum => 1,
146
146
  :maximum => 18,
147
147
  :required => false,
@@ -149,7 +149,7 @@ module Hippo::Segments
149
149
 
150
150
  field :name => 'MonetaryAmount',
151
151
  :sequence => 19,
152
- :datatype => :numeric,
152
+ :datatype => :decimal,
153
153
  :minimum => 1,
154
154
  :maximum => 18,
155
155
  :required => false,
@@ -157,7 +157,7 @@ module Hippo::Segments
157
157
 
158
158
  field :name => 'MonetaryAmount',
159
159
  :sequence => 20,
160
- :datatype => :numeric,
160
+ :datatype => :decimal,
161
161
  :minimum => 1,
162
162
  :maximum => 18,
163
163
  :required => false,
@@ -165,7 +165,7 @@ module Hippo::Segments
165
165
 
166
166
  field :name => 'MonetaryAmount',
167
167
  :sequence => 21,
168
- :datatype => :numeric,
168
+ :datatype => :decimal,
169
169
  :minimum => 1,
170
170
  :maximum => 18,
171
171
  :required => false,
@@ -173,7 +173,7 @@ module Hippo::Segments
173
173
 
174
174
  field :name => 'MonetaryAmount',
175
175
  :sequence => 22,
176
- :datatype => :numeric,
176
+ :datatype => :decimal,
177
177
  :minimum => 1,
178
178
  :maximum => 18,
179
179
  :required => false,
@@ -181,7 +181,7 @@ module Hippo::Segments
181
181
 
182
182
  field :name => 'Quantity',
183
183
  :sequence => 23,
184
- :datatype => :numeric,
184
+ :datatype => :decimal,
185
185
  :minimum => 1,
186
186
  :maximum => 15,
187
187
  :required => false,
@@ -189,7 +189,7 @@ module Hippo::Segments
189
189
 
190
190
  field :name => 'MonetaryAmount',
191
191
  :sequence => 24,
192
- :datatype => :numeric,
192
+ :datatype => :decimal,
193
193
  :minimum => 1,
194
194
  :maximum => 18,
195
195
  :required => false,
@@ -13,7 +13,7 @@ module Hippo::Segments
13
13
 
14
14
  field :name => 'Quantity',
15
15
  :sequence => 2,
16
- :datatype => :numeric,
16
+ :datatype => :decimal,
17
17
  :minimum => 1,
18
18
  :maximum => 15,
19
19
  :required => false,
@@ -17,15 +17,15 @@ module Hippo::Segments
17
17
  end
18
18
 
19
19
  def field(field)
20
- f = Hippo::Field.new
21
- f.sequence = fields.length + 1
22
- f.name = field[:name]
23
- f.datatype = field[:datatype]
24
- f.minimum = field[:minimum]
25
- f.maximum = field[:maximum]
26
- f.options = field[:options]
20
+ f = Hippo::Field.new
21
+ f.sequence = fields.length + 1
22
+ f.name = field[:name]
23
+ f.datatype = field[:datatype]
24
+ f.minimum = field[:minimum]
25
+ f.maximum = field[:maximum]
26
+ f.options = field[:options]
27
27
  f.restrictions = field[:restrictions]
28
- f.separator = field[:separator] || @default_separator || :field_separator
28
+ f.separator = field[:separator] || @default_separator || :field_separator
29
29
 
30
30
  if @composite_block
31
31
  f.composite = true
@@ -102,20 +102,18 @@ module Hippo::Segments
102
102
  field.each do |comp_field|
103
103
  field_value = if values[comp_field.composite_sequence]
104
104
  # some values exist for this composite field
105
- values[comp_field.composite_sequence][comp_field.sequence].to_s
105
+ comp_field.string_value(values[comp_field.composite_sequence][comp_field.sequence])
106
106
  else
107
107
  # no values exist for the entire composite field
108
108
  ''
109
109
  end
110
- field_value = field_value.ljust(comp_field.maximum) if self.class.fixed_width
111
110
 
112
111
  output += field_value + @composite_separator
113
112
  end
114
113
 
115
114
  output += @field_separator
116
115
  else # standard field
117
- field_value = values[field.sequence].to_s
118
- field_value = field_value.ljust(field.maximum) if self.class.fixed_width
116
+ field_value = field.string_value(values[field.sequence])
119
117
 
120
118
  output += field_value + @field_separator
121
119
  end
@@ -146,9 +144,9 @@ module Hippo::Segments
146
144
  if method_name.to_s =~ /=\z/
147
145
  if field.composite
148
146
  self.values[field.composite_sequence] ||= {}
149
- self.values[field.composite_sequence][field.sequence] = args[0]
147
+ self.values[field.composite_sequence][field.sequence] = field.formatted_value(args[0])
150
148
  else
151
- self.values[field.sequence] = args[0]
149
+ self.values[field.sequence] = field.formatted_value(args[0])
152
150
  end
153
151
  else
154
152
  if field.composite
data/lib/hippo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Hippo
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/hippo.rb CHANGED
@@ -1,5 +1,9 @@
1
1
  require File.expand_path('hippo/utilities', File.dirname(__FILE__))
2
2
 
3
+ require 'bigdecimal'
4
+ require 'time'
5
+ require 'date'
6
+
3
7
  require_relative 'hippo/exceptions'
4
8
  require_relative 'hippo/separator'
5
9
  require_relative 'hippo/field'
data/test/test_helper.rb CHANGED
@@ -16,6 +16,10 @@ module Hippo::Segments
16
16
  field :name => 'Field4'
17
17
  field :name => 'CommonName'
18
18
  field :name => 'CommonName'
19
+ field :name => 'DateField', :datatype => :date
20
+ field :name => 'TimeField', :datatype => :time
21
+ field :name => 'IntegerField', :datatype => :integer
22
+ field :name => 'DecimalField', :datatype => :decimal
19
23
  end
20
24
 
21
25
  class TCS < Hippo::Segments::Base
data/test/test_parser.rb CHANGED
@@ -62,8 +62,8 @@ class TestParser < MiniTest::Unit::TestCase
62
62
  def test_adds_enveloping_to_transaction_set
63
63
  transaction_set = @parser.parse_file('samples/005010X231A1_01.edi').first
64
64
 
65
- assert_equal '445289179', transaction_set.ISA.ISA13
66
- assert_equal '1', transaction_set.GS.GS06
65
+ assert_equal 445289179, transaction_set.ISA.ISA13
66
+ assert_equal 1, transaction_set.GS.GS06
67
67
  end
68
68
 
69
69
  def test_parses_repeating_loops
@@ -78,7 +78,7 @@ class TestParser < MiniTest::Unit::TestCase
78
78
 
79
79
  ts.TCS.Field1 = 'Blah'
80
80
  ts.TSS_02.Field2 = 'Boo'
81
- ts.SE
81
+ ts.SE.SE01 = ts.segment_count
82
82
 
83
83
  # ST*Test~TSS*Blah*Bar1*Baz1~TSS*Blah*Bar2*Baz2~TSS*Blah*Bar3*Baz3~TSS*Blah*Bar4*Baz4~TSS*Blah*Bar5*Baz5~TCS*Blah**Preset Field 7~TSS*Last Standalone Segment*Boo~SE**Test
84
84
  assert_equal ts.values.to_s, @parser.parse_string(ts.to_s).first.values.to_s
@@ -110,4 +110,46 @@ class TestSegmentsBase < MiniTest::Unit::TestCase
110
110
  seg.InvalidField = 'Error should be raised.'
111
111
  end
112
112
  end
113
+
114
+ def test_raises_invalid_value_for_date_fields
115
+ seg = Hippo::Segments::TSS.new
116
+
117
+ assert_raises(Hippo::Exceptions::InvalidValue) { seg.DateField = "asdf" }
118
+ assert_raises(Hippo::Exceptions::InvalidValue) { seg.DateField = "0810" }
119
+
120
+ seg.DateField = Date.today
121
+ seg.DateField = "20120120"
122
+ seg.DateField = Time.now
123
+ seg.DateField = nil
124
+ end
125
+
126
+ def test_raises_invalid_value_for_time_fields
127
+ seg = Hippo::Segments::TSS.new
128
+
129
+ assert_raises(Hippo::Exceptions::InvalidValue) { seg.TimeField = "asdf" }
130
+ assert_raises(Hippo::Exceptions::InvalidValue) { seg.TimeField = "25111201" }
131
+ assert_raises(Hippo::Exceptions::InvalidValue) { seg.TimeField = Date.today }
132
+
133
+ seg.TimeField = "0120"
134
+ seg.TimeField = Time.now
135
+ seg.TimeField = nil
136
+ end
137
+
138
+ def test_performs_type_conversion
139
+ seg = Hippo::Segments::TSS.new
140
+
141
+ seg.DateField = '20120121'
142
+ assert_equal Date.new(2012,01,21), seg.DateField
143
+
144
+ seg.TimeField = '231101'
145
+ assert_equal Time.new(Date.today.year, Date.today.month, Date.today.day, 23,11,01), seg.TimeField
146
+
147
+ seg.IntegerField = '2'
148
+ assert_equal 2, seg.IntegerField
149
+
150
+ seg.DecimalField = '123.45'
151
+ assert_equal BigDecimal.new('123.45'), seg.DecimalField
152
+
153
+ assert_equal 'TSS*******20120121*231101*2*123.45~', seg.to_s
154
+ end
113
155
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hippo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-01-18 00:00:00.000000000 Z
13
+ date: 2012-01-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: minitest
17
- requirement: &70166488433960 !ruby/object:Gem::Requirement
17
+ requirement: &70280435942560 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *70166488433960
25
+ version_requirements: *70280435942560
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rake
28
- requirement: &70166488433460 !ruby/object:Gem::Requirement
28
+ requirement: &70280435942060 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,7 +33,7 @@ dependencies:
33
33
  version: 0.9.2
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *70166488433460
36
+ version_requirements: *70280435942060
37
37
  description: HIPAA Transaction Set Generator/Parser
38
38
  email:
39
39
  - robertj@promedicalinc.com