hippo 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,4 +1,11 @@
1
- 0.2.3 - TBD
1
+ 0.4.0 - 2012/09/13
2
+ * Do not hard-code separators in Hippo::Segments::Base#to_s.
3
+ * Properly escape regexps involving separators.
4
+ * Discard any empty segments when parsing transaction sets.
5
+ * Remove whitespace from fields containing only whitespace.
6
+ 0.3.0
7
+ * Add support for 270/271 transaction sets.
8
+ 0.2.3
2
9
  * Fix issue preventing parsing when segments are not in the correct order. Now
3
10
  we loop through all segments within a given section to make sure we grab them
4
11
  all.
data/lib/hippo/field.rb CHANGED
@@ -105,7 +105,9 @@ module Hippo
105
105
  def generate_date(value)
106
106
  value ||= Date.today
107
107
 
108
- if maximum == 6
108
+ if value.class.to_s == 'Range'
109
+ "#{value.first.strftime('%Y%m%d')}-#{value.last.strftime('%Y%m%d')}"
110
+ elsif maximum == 6
109
111
  value.strftime('%y%m%d')
110
112
  else
111
113
  value.strftime('%Y%m%d')
@@ -119,12 +121,15 @@ module Hippo
119
121
  end
120
122
 
121
123
  case value.class.to_s
122
- when "Date" then value
123
- when "Time" then value.to_date
124
+ when "Range" then value
125
+ when "Date" then value
126
+ when "Time" then value.to_date
124
127
  when "String"
125
128
  format = case value
126
129
  when /\A\d{6}\z/ then '%y%m%d'
127
- when /\A\d{8}\z/ then '%Y%m%d'
130
+ when /\A\d{8}\z/ then '%Y%`%d'
131
+ when /\A(\d{8})-(\d{8})\z/ then
132
+ return Date.parse($1, '%Y%m%d')..Date.parse($2, '%Y%m%d')
128
133
  else
129
134
  invalid!
130
135
  end
@@ -22,7 +22,9 @@ module Hippo
22
22
  segment = Hippo::Segments.const_get(segment_string.split(@field_separator).first).new(:parent => self)
23
23
 
24
24
  segment.parse(segment_string)
25
- end
25
+
26
+ segment.to_s == '' ? nil : segment
27
+ end.compact
26
28
  end
27
29
 
28
30
  def read(input = nil)
@@ -39,4 +41,4 @@ module Hippo
39
41
  end
40
42
  end
41
43
  end
42
- end
44
+ end
@@ -21,7 +21,7 @@ module Hippo::Segments
21
21
 
22
22
  field :name => 'DateTimePeriod',
23
23
  :sequence => 3,
24
- :datatype => :string,
24
+ :datatype => :date,
25
25
  :minimum => 1,
26
26
  :maximum => 35,
27
27
  :required => true,
@@ -145,13 +145,15 @@ module Hippo::Segments
145
145
  end
146
146
  end
147
147
 
148
- # remove extra field separators that aren't needed
149
- unless self.class.identifier == 'ISA'
150
- output = output.gsub(/:{2,}\*/,'*').gsub(/:\*/,'*')
148
+ unless self.class.fixed_width
149
+ output = output.gsub(repeating_composite_separator_regexp, @field_separator)
150
+ output = output.gsub(empty_field_regexp,'\1\2')
151
151
  end
152
152
 
153
153
  output += @segment_separator
154
- output = output.gsub(/\*+~/,'~')
154
+ output = output.gsub(repeating_field_separator_at_end_of_segment_regexp, @segment_separator)
155
+
156
+ output =~ /\A#{self.class.identifier}~/ ? '' : output
155
157
  end
156
158
 
157
159
  def identifier
@@ -53,6 +53,7 @@ module Hippo
53
53
  autoload_relative :LE, 'segments/LE'
54
54
  autoload_relative :LIN, 'segments/LIN'
55
55
  autoload_relative :LQ, 'segments/LQ'
56
+ autoload_relative :LS, 'segments/LS'
56
57
  autoload_relative :LX, 'segments/LX'
57
58
  autoload_relative :MEA, 'segments/MEA'
58
59
  autoload_relative :MIA, 'segments/MIA'
@@ -40,5 +40,31 @@ module Hippo
40
40
  :repetition_separator => @repetition_separator
41
41
  }
42
42
  end
43
+
44
+ def repeating_field_separator_at_end_of_segment_regexp
45
+ %r{
46
+ #{Regexp.escape(@field_separator)}+
47
+ #{Regexp.escape(@segment_separator)}
48
+ }x
49
+ end
50
+
51
+ def repeating_composite_separator_regexp
52
+ %r{
53
+ #{Regexp.escape(@composite_separator)}+
54
+ #{Regexp.escape(@field_separator)}
55
+ }x
56
+ end
57
+
58
+ def empty_field_regexp
59
+ %r{(?<separators>
60
+ [
61
+ #{Regexp.escape(@composite_separator)}
62
+ #{Regexp.escape(@field_separator)}
63
+ #{Regexp.escape(@segment_separator)}
64
+ ])
65
+ \s+
66
+ (\g<separators>)
67
+ }x
68
+ end
43
69
  end
44
- end
70
+ end
@@ -27,6 +27,17 @@ module Hippo::TransactionSets
27
27
  'NM1.NM108' => ["24", "46", "FI", "NI", "PI", "XV", "XX"]
28
28
  }
29
29
 
30
+ #Information Receiver Level
31
+ loop Hippo::TransactionSets::HIPAA_270::L2000B,
32
+ :name => 'Information Receiver Level',
33
+ :minimum => 1,
34
+ :maximum => 99999,
35
+ :position => 100,
36
+ :identified_by => {
37
+ 'HL.HL03' => '21',
38
+ 'HL.HL04' => '1'
39
+ }
40
+
30
41
  end
31
42
  end
32
43
  end
@@ -27,6 +27,16 @@ module Hippo::TransactionSets
27
27
  'NM1.NM108' => ["24", "34", "FI", "PI", "PP", "SV", "XV", "XX"]
28
28
  }
29
29
 
30
+ #Subscriber Level
31
+ loop Hippo::TransactionSets::HIPAA_270::L2000C,
32
+ :name => 'Subscriber Level',
33
+ :minimum => 1,
34
+ :maximum => 99999,
35
+ :position => 100,
36
+ :identified_by => {
37
+ 'HL.HL03' => '22',
38
+ 'HL.HL04' => ["0", "1"]
39
+ }
30
40
  end
31
41
  end
32
42
  end
@@ -36,6 +36,17 @@ module Hippo::TransactionSets
36
36
  'NM1.NM102' => ["1", "2"]
37
37
  }
38
38
 
39
+ #Dependent Level
40
+ loop Hippo::TransactionSets::HIPAA_270::L2000D,
41
+ :name => 'Dependent Level',
42
+ :minimum => 0,
43
+ :maximum => 99999,
44
+ :position => 100,
45
+ :identified_by => {
46
+ 'HL.HL03' => '23',
47
+ 'HL.HL04' => '0'
48
+ }
49
+
39
50
  end
40
51
  end
41
52
  end
@@ -35,39 +35,6 @@ module Hippo::TransactionSets
35
35
  'HL.HL04' => '1'
36
36
  }
37
37
 
38
- #Information Receiver Level
39
- loop Hippo::TransactionSets::HIPAA_270::L2000B,
40
- :name => 'Information Receiver Level',
41
- :minimum => 1,
42
- :maximum => 99999,
43
- :position => 100,
44
- :identified_by => {
45
- 'HL.HL03' => '21',
46
- 'HL.HL04' => '1'
47
- }
48
-
49
- #Subscriber Level
50
- loop Hippo::TransactionSets::HIPAA_270::L2000C,
51
- :name => 'Subscriber Level',
52
- :minimum => 1,
53
- :maximum => 99999,
54
- :position => 100,
55
- :identified_by => {
56
- 'HL.HL03' => '22',
57
- 'HL.HL04' => ["0", "1"]
58
- }
59
-
60
- #Dependent Level
61
- loop Hippo::TransactionSets::HIPAA_270::L2000D,
62
- :name => 'Dependent Level',
63
- :minimum => 0,
64
- :maximum => 99999,
65
- :position => 100,
66
- :identified_by => {
67
- 'HL.HL03' => '23',
68
- 'HL.HL04' => '0'
69
- }
70
-
71
38
  #Transaction Set Trailer
72
39
  segment Hippo::Segments::SE,
73
40
  :name => 'Transaction Set Trailer',
@@ -1,17 +1,15 @@
1
1
  module Hippo::TransactionSets
2
2
  module HIPAA_270
3
-
4
- autoload :Base, 'hippo/transaction_sets/HIPAA_270/base'
5
- autoload :L2000A, 'hippo/transaction_sets/HIPAA_270/L2000A'
6
- autoload :L2000B, 'hippo/transaction_sets/HIPAA_270/L2000B'
7
- autoload :L2000C, 'hippo/transaction_sets/HIPAA_270/L2000C'
8
- autoload :L2000D, 'hippo/transaction_sets/HIPAA_270/L2000D'
9
- autoload :L2100A, 'hippo/transaction_sets/HIPAA_270/L2100A'
10
- autoload :L2100B, 'hippo/transaction_sets/HIPAA_270/L2100B'
11
- autoload :L2100C, 'hippo/transaction_sets/HIPAA_270/L2100C'
12
- autoload :L2100D, 'hippo/transaction_sets/HIPAA_270/L2100D'
13
- autoload :L2110C, 'hippo/transaction_sets/HIPAA_270/L2110C'
14
- autoload :L2110D, 'hippo/transaction_sets/HIPAA_270/L2110D'
15
-
3
+ autoload_relative :Base, 'HIPAA_270/base'
4
+ autoload_relative :L2000A, 'HIPAA_270/L2000A'
5
+ autoload_relative :L2000B, 'HIPAA_270/L2000B'
6
+ autoload_relative :L2000C, 'HIPAA_270/L2000C'
7
+ autoload_relative :L2000D, 'HIPAA_270/L2000D'
8
+ autoload_relative :L2100A, 'HIPAA_270/L2100A'
9
+ autoload_relative :L2100B, 'HIPAA_270/L2100B'
10
+ autoload_relative :L2100C, 'HIPAA_270/L2100C'
11
+ autoload_relative :L2100D, 'HIPAA_270/L2100D'
12
+ autoload_relative :L2110C, 'HIPAA_270/L2110C'
13
+ autoload_relative :L2110D, 'HIPAA_270/L2110D'
16
14
  end
17
15
  end
@@ -39,6 +39,17 @@ module Hippo::TransactionSets
39
39
  'NM1.NM108' => ["24", "46", "FI", "NI", "PI", "XV", "XX"]
40
40
  }
41
41
 
42
+ #Information Receiver Level
43
+ loop Hippo::TransactionSets::HIPAA_271::L2000B,
44
+ :name => 'Information Receiver Level',
45
+ :minimum => 0,
46
+ :maximum => 99999,
47
+ :position => 100,
48
+ :identified_by => {
49
+ 'HL.HL03' => '21',
50
+ 'HL.HL04' => ["0", "1"]
51
+ }
52
+
42
53
  end
43
54
  end
44
55
  end
@@ -27,6 +27,17 @@ module Hippo::TransactionSets
27
27
  'NM1.NM108' => ["24", "34", "FI", "PI", "PP", "SV", "XV", "XX"]
28
28
  }
29
29
 
30
+ #Subscriber Level
31
+ loop Hippo::TransactionSets::HIPAA_271::L2000C,
32
+ :name => 'Subscriber Level',
33
+ :minimum => 0,
34
+ :maximum => 99999,
35
+ :position => 100,
36
+ :identified_by => {
37
+ 'HL.HL03' => '22',
38
+ 'HL.HL04' => ["0", "1"]
39
+ }
40
+
30
41
  end
31
42
  end
32
43
  end
@@ -36,6 +36,17 @@ module Hippo::TransactionSets
36
36
  'NM1.NM102' => ["1", "2"]
37
37
  }
38
38
 
39
+ #Dependent Level
40
+ loop Hippo::TransactionSets::HIPAA_271::L2000D,
41
+ :name => 'Dependent Level',
42
+ :minimum => 0,
43
+ :maximum => 99999,
44
+ :position => 100,
45
+ :identified_by => {
46
+ 'HL.HL03' => '23',
47
+ 'HL.HL04' => '0'
48
+ }
49
+
39
50
  end
40
51
  end
41
52
  end
@@ -35,39 +35,6 @@ module Hippo::TransactionSets
35
35
  'HL.HL04' => ["0", "1"]
36
36
  }
37
37
 
38
- #Information Receiver Level
39
- loop Hippo::TransactionSets::HIPAA_271::L2000B,
40
- :name => 'Information Receiver Level',
41
- :minimum => 0,
42
- :maximum => 99999,
43
- :position => 100,
44
- :identified_by => {
45
- 'HL.HL03' => '21',
46
- 'HL.HL04' => ["0", "1"]
47
- }
48
-
49
- #Subscriber Level
50
- loop Hippo::TransactionSets::HIPAA_271::L2000C,
51
- :name => 'Subscriber Level',
52
- :minimum => 0,
53
- :maximum => 99999,
54
- :position => 100,
55
- :identified_by => {
56
- 'HL.HL03' => '22',
57
- 'HL.HL04' => ["0", "1"]
58
- }
59
-
60
- #Dependent Level
61
- loop Hippo::TransactionSets::HIPAA_271::L2000D,
62
- :name => 'Dependent Level',
63
- :minimum => 0,
64
- :maximum => 99999,
65
- :position => 100,
66
- :identified_by => {
67
- 'HL.HL03' => '23',
68
- 'HL.HL04' => '0'
69
- }
70
-
71
38
  #Transaction Set Trailer
72
39
  segment Hippo::Segments::SE,
73
40
  :name => 'Transaction Set Trailer',
@@ -1,21 +1,19 @@
1
1
  module Hippo::TransactionSets
2
2
  module HIPAA_271
3
-
4
- autoload :Base, 'hippo/transaction_sets/HIPAA_271/base'
5
- autoload :L2000A, 'hippo/transaction_sets/HIPAA_271/L2000A'
6
- autoload :L2000B, 'hippo/transaction_sets/HIPAA_271/L2000B'
7
- autoload :L2000C, 'hippo/transaction_sets/HIPAA_271/L2000C'
8
- autoload :L2000D, 'hippo/transaction_sets/HIPAA_271/L2000D'
9
- autoload :L2100A, 'hippo/transaction_sets/HIPAA_271/L2100A'
10
- autoload :L2100B, 'hippo/transaction_sets/HIPAA_271/L2100B'
11
- autoload :L2100C, 'hippo/transaction_sets/HIPAA_271/L2100C'
12
- autoload :L2100D, 'hippo/transaction_sets/HIPAA_271/L2100D'
13
- autoload :L2110C, 'hippo/transaction_sets/HIPAA_271/L2110C'
14
- autoload :L2110D, 'hippo/transaction_sets/HIPAA_271/L2110D'
15
- autoload :L2115C, 'hippo/transaction_sets/HIPAA_271/L2115C'
16
- autoload :L2115D, 'hippo/transaction_sets/HIPAA_271/L2115D'
17
- autoload :L2120C, 'hippo/transaction_sets/HIPAA_271/L2120C'
18
- autoload :L2120D, 'hippo/transaction_sets/HIPAA_271/L2120D'
19
-
3
+ autoload_relative :Base, 'HIPAA_271/base'
4
+ autoload_relative :L2000A, 'HIPAA_271/L2000A'
5
+ autoload_relative :L2000B, 'HIPAA_271/L2000B'
6
+ autoload_relative :L2000C, 'HIPAA_271/L2000C'
7
+ autoload_relative :L2000D, 'HIPAA_271/L2000D'
8
+ autoload_relative :L2100A, 'HIPAA_271/L2100A'
9
+ autoload_relative :L2100B, 'HIPAA_271/L2100B'
10
+ autoload_relative :L2100C, 'HIPAA_271/L2100C'
11
+ autoload_relative :L2100D, 'HIPAA_271/L2100D'
12
+ autoload_relative :L2110C, 'HIPAA_271/L2110C'
13
+ autoload_relative :L2110D, 'HIPAA_271/L2110D'
14
+ autoload_relative :L2115C, 'HIPAA_271/L2115C'
15
+ autoload_relative :L2115D, 'HIPAA_271/L2115D'
16
+ autoload_relative :L2120C, 'HIPAA_271/L2120C'
17
+ autoload_relative :L2120D, 'HIPAA_271/L2120D'
20
18
  end
21
19
  end
data/lib/hippo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Hippo
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
@@ -7,7 +7,7 @@ class TestSegmentsBase < MiniTest::Unit::TestCase
7
7
  def test_empty_segment
8
8
  seg = Hippo::Segments::TSS.new
9
9
 
10
- assert_equal 'TSS~', seg.to_s
10
+ assert_equal '', seg.to_s
11
11
  end
12
12
 
13
13
  def test_basic_populated_segment
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.3.0
4
+ version: 0.4.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-07-02 00:00:00.000000000 Z
13
+ date: 2012-09-13 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: minitest
17
- requirement: &70276877883480 !ruby/object:Gem::Requirement
17
+ requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ! '>='
@@ -22,10 +22,15 @@ dependencies:
22
22
  version: '0'
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *70276877883480
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0'
26
31
  - !ruby/object:Gem::Dependency
27
32
  name: rake
28
- requirement: &70276877882460 !ruby/object:Gem::Requirement
33
+ requirement: !ruby/object:Gem::Requirement
29
34
  none: false
30
35
  requirements:
31
36
  - - ~>
@@ -33,7 +38,12 @@ dependencies:
33
38
  version: 0.9.2
34
39
  type: :development
35
40
  prerelease: false
36
- version_requirements: *70276877882460
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ version: 0.9.2
37
47
  description: HIPAA Transaction Set Generator/Parser
38
48
  email:
39
49
  - robertj@promedicalinc.com
@@ -329,15 +339,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
329
339
  - - ! '>='
330
340
  - !ruby/object:Gem::Version
331
341
  version: '0'
342
+ segments:
343
+ - 0
344
+ hash: 3757696545577319633
332
345
  required_rubygems_version: !ruby/object:Gem::Requirement
333
346
  none: false
334
347
  requirements:
335
348
  - - ! '>='
336
349
  - !ruby/object:Gem::Version
337
350
  version: '0'
351
+ segments:
352
+ - 0
353
+ hash: 3757696545577319633
338
354
  requirements: []
339
355
  rubyforge_project: hippo
340
- rubygems_version: 1.8.17
356
+ rubygems_version: 1.8.24
341
357
  signing_key:
342
358
  specification_version: 3
343
359
  summary: HIPAA Transaction Set Generator/Parser
@@ -349,4 +365,3 @@ test_files:
349
365
  - test/test_parser.rb
350
366
  - test/test_segments_base.rb
351
367
  - test/test_transaction_sets_base.rb
352
- has_rdoc: