hippo 0.3.0 → 0.4.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/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: