hippo 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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