ruby-hl7 1.3.3 → 1.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.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/lib/configuration.rb +30 -0
  3. data/lib/core_ext/date_time.rb +19 -15
  4. data/lib/core_ext/string.rb +2 -0
  5. data/lib/helpers/time_formatter_helper.rb +42 -0
  6. data/lib/message.rb +72 -75
  7. data/lib/message_parser.rb +17 -15
  8. data/lib/ruby-hl7.rb +26 -16
  9. data/lib/segment.rb +63 -47
  10. data/lib/segment_default.rb +6 -4
  11. data/lib/segment_fields.rb +27 -25
  12. data/lib/segment_generator.rb +12 -15
  13. data/lib/segment_list_storage.rb +15 -14
  14. data/lib/segments/aig.rb +2 -0
  15. data/lib/segments/ail.rb +2 -0
  16. data/lib/segments/aip.rb +2 -0
  17. data/lib/segments/ais.rb +2 -0
  18. data/lib/segments/dg1.rb +2 -10
  19. data/lib/segments/err.rb +2 -0
  20. data/lib/segments/evn.rb +2 -1
  21. data/lib/segments/ft1.rb +13 -13
  22. data/lib/segments/fts.rb +2 -0
  23. data/lib/segments/gt1.rb +4 -6
  24. data/lib/segments/in1.rb +2 -1
  25. data/lib/segments/mfe.rb +2 -0
  26. data/lib/segments/mfi.rb +2 -0
  27. data/lib/segments/mrg.rb +2 -0
  28. data/lib/segments/msa.rb +2 -2
  29. data/lib/segments/msh.rb +3 -2
  30. data/lib/segments/nk1.rb +48 -8
  31. data/lib/segments/nte.rb +6 -5
  32. data/lib/segments/obr.rb +4 -3
  33. data/lib/segments/obx.rb +2 -1
  34. data/lib/segments/orc.rb +8 -10
  35. data/lib/segments/oru.rb +2 -1
  36. data/lib/segments/pid.rb +19 -10
  37. data/lib/segments/prd.rb +2 -1
  38. data/lib/segments/prt.rb +23 -0
  39. data/lib/segments/pv1.rb +2 -1
  40. data/lib/segments/pv2.rb +64 -51
  41. data/lib/segments/qrd.rb +2 -1
  42. data/lib/segments/qrf.rb +2 -1
  43. data/lib/segments/rf1.rb +2 -1
  44. data/lib/segments/rgs.rb +2 -0
  45. data/lib/segments/rol.rb +22 -0
  46. data/lib/segments/sch.rb +2 -0
  47. data/lib/segments/sft.rb +2 -0
  48. data/lib/segments/spm.rb +2 -0
  49. data/lib/segments/tq1.rb +2 -0
  50. data/lib/segments/txa.rb +2 -0
  51. data/lib/test/hl7_messages.rb +118 -117
  52. data/lib/version.rb +5 -0
  53. metadata +14 -163
  54. data/.gitignore +0 -7
  55. data/.rubocop.yml +0 -127
  56. data/.travis.yml +0 -20
  57. data/Gemfile +0 -3
  58. data/Gemfile.lock +0 -65
  59. data/LICENSE +0 -19
  60. data/NOTES.md +0 -151
  61. data/README.rdoc +0 -47
  62. data/Rakefile +0 -76
  63. data/VERSION +0 -1
  64. data/VERSION.yml +0 -4
  65. data/examples/proxy_server.rb +0 -26
  66. data/ruby-hl7.gemspec +0 -39
  67. data/spec/ail_segment_spec.rb +0 -28
  68. data/spec/aip_segment_spec.rb +0 -31
  69. data/spec/basic_parsing_spec.rb +0 -319
  70. data/spec/batch_parsing_spec.rb +0 -52
  71. data/spec/child_segment_spec.rb +0 -66
  72. data/spec/core_ext/date_time_spec.rb +0 -43
  73. data/spec/default_segment_spec.rb +0 -31
  74. data/spec/dg1_spec.rb +0 -42
  75. data/spec/dynamic_segment_def_spec.rb +0 -37
  76. data/spec/err_segment_spec.rb +0 -26
  77. data/spec/evn_segment_spec.rb +0 -23
  78. data/spec/ft1_segment_spec.rb +0 -35
  79. data/spec/fts_segment_spec.rb +0 -19
  80. data/spec/gt1_segment_spec.rb +0 -32
  81. data/spec/in1_segment_spec.rb +0 -34
  82. data/spec/message_spec.rb +0 -53
  83. data/spec/messages_spec.rb +0 -24
  84. data/spec/mfe_segment_spec.rb +0 -28
  85. data/spec/mfi_segment_spec.rb +0 -28
  86. data/spec/msa_segment_spec.rb +0 -27
  87. data/spec/msh_segment_spec.rb +0 -28
  88. data/spec/nk1_segment_spec.rb +0 -26
  89. data/spec/obr_segment_spec.rb +0 -45
  90. data/spec/obx_segment_spec.rb +0 -68
  91. data/spec/orc_segment_spec.rb +0 -27
  92. data/spec/pid_segment_spec.rb +0 -78
  93. data/spec/prd_segment_spec.rb +0 -29
  94. data/spec/pv1_segment_spec.rb +0 -23
  95. data/spec/rf1_segment_spec.rb +0 -29
  96. data/spec/sch_segment_spec.rb +0 -32
  97. data/spec/segment_field_spec.rb +0 -110
  98. data/spec/segment_generator_spec.rb +0 -32
  99. data/spec/segment_list_storage_spec.rb +0 -47
  100. data/spec/segment_spec.rb +0 -38
  101. data/spec/sft_segment_spec.rb +0 -26
  102. data/spec/spec_helper.rb +0 -13
  103. data/spec/speed_parsing_spec.rb +0 -19
  104. data/spec/spm_segment_spec.rb +0 -26
  105. data/spec/txa_segment_spec.rb +0 -72
data/lib/segment.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Ruby Object representation of an hl7 2.x message segment
2
4
  # The segments can be setup to provide aliases to specific fields with
3
5
  # optional validation code that is run when the field is modified
@@ -19,12 +21,12 @@
19
21
  #
20
22
  class HL7::Message::Segment
21
23
  extend HL7::Message::SegmentListStorage
24
+ extend TimeFormatterHelper
25
+
22
26
  include HL7::Message::SegmentFields
23
27
 
24
28
  attr_accessor :segment_parent
25
- attr_reader :element_delim
26
- attr_reader :item_delim
27
- attr_reader :segment_weight
29
+ attr_reader :element_delim, :item_delim, :segment_weight
28
30
 
29
31
  METHOD_MISSING_FOR_INITIALIZER = <<-END
30
32
  def method_missing( sym, *args, &blk )
@@ -38,7 +40,7 @@ class HL7::Message::Segment
38
40
  # delims:: an optional array of delimiters, where
39
41
  # delims[0] = element delimiter
40
42
  # delims[1] = item delimiter
41
- def initialize(raw_segment="", delims=[], &blk)
43
+ def initialize(raw_segment = "", delims = [], &blk)
42
44
  @segments_by_name = {}
43
45
  @field_total = 0
44
46
  @is_child = false
@@ -47,31 +49,31 @@ class HL7::Message::Segment
47
49
 
48
50
  @elements = elements_from_segment(raw_segment)
49
51
 
50
- if block_given?
51
- callctx = eval( "self", blk.binding )
52
- def callctx.__seg__(val=nil)
53
- @__seg_val__ ||= val
54
- end
55
- callctx.__seg__(self)
56
- # TODO: find out if this pollutes the calling namespace permanently...
52
+ return unless block_given?
57
53
 
58
- eval( METHOD_MISSING_FOR_INITIALIZER, blk.binding )
59
- yield self
60
- eval( "class << self; remove_method :method_missing;end", blk.binding )
54
+ callctx = eval("self", blk.binding, __FILE__, __LINE__)
55
+ def callctx.__seg__(val = nil)
56
+ @__seg_val__ ||= val
61
57
  end
58
+ callctx.__seg__(self)
59
+ # TODO: find out if this pollutes the calling namespace permanently...
60
+
61
+ eval(METHOD_MISSING_FOR_INITIALIZER, blk.binding)
62
+ yield self
63
+ eval("class << self; remove_method :method_missing;end", blk.binding, __FILE__, __LINE__)
62
64
  end
63
65
 
64
66
  # Breaks the raw segment into elements
65
67
  # raw_segment:: is an optional String or Array which will be used as the
66
68
  # segment's field data
67
69
  def elements_from_segment(raw_segment)
68
- if (raw_segment.kind_of? Array)
70
+ if raw_segment.is_a? Array
69
71
  elements = raw_segment
70
72
  else
71
- elements = HL7::MessageParser.split_by_delimiter( raw_segment,
72
- @element_delim )
73
+ elements = HL7::MessageParser.split_by_delimiter(raw_segment,
74
+ @element_delim)
73
75
  if raw_segment == ""
74
- elements[0] = self.class.to_s.split( "::" ).last
76
+ elements[0] = self.class.to_s.split("::").last
75
77
  elements << ""
76
78
  end
77
79
  end
@@ -79,26 +81,26 @@ class HL7::Message::Segment
79
81
  end
80
82
 
81
83
  def to_info
82
- "%s: empty segment >> %s" % [ self.class.to_s, @elements.inspect ]
84
+ format("%s: empty segment >> %s", self.class.to_s, @elements.inspect)
83
85
  end
84
86
 
85
87
  # output the HL7 spec version of the segment
86
88
  def to_s
87
- @elements.join( @element_delim )
89
+ @elements.join(@element_delim)
88
90
  end
89
91
 
90
92
  # at the segment level there is no difference between to_s and to_hl7
91
- alias :to_hl7 :to_s
93
+ alias_method :to_hl7, :to_s
92
94
 
93
95
  # handle the e<number> field accessor
94
96
  # and any aliases that didn't get added to the system automatically
95
- def method_missing( sym, *args, &blk )
96
- base_str = sym.to_s.gsub( "=", "" )
97
+ def method_missing(sym, *args, &blk)
98
+ base_str = sym.to_s.delete("=")
97
99
  base_sym = base_str.to_sym
98
100
 
99
- if self.class.fields.include?( base_sym )
101
+ if self.class.fields.include?(base_sym)
100
102
  # base_sym is ok, let's move on
101
- elsif /e([0-9]+)/.match( base_str )
103
+ elsif /e([0-9]+)/ =~ base_str
102
104
  # base_sym should actually be $1, since we're going by
103
105
  # element id number
104
106
  base_sym = $1.to_i
@@ -106,26 +108,25 @@ class HL7::Message::Segment
106
108
  super
107
109
  end
108
110
 
109
- if sym.to_s.include?( "=" )
110
- write_field( base_sym, args )
111
+ if sym.to_s.include?("=")
112
+ write_field(base_sym, args)
113
+ elsif args.length.positive?
114
+ write_field(base_sym, args.flatten.select {|arg| arg })
111
115
  else
112
- if args.length > 0
113
- write_field( base_sym, args.flatten.select { |arg| arg } )
114
- else
115
- read_field( base_sym )
116
- end
116
+ read_field(base_sym)
117
117
  end
118
118
  end
119
119
 
120
120
  # sort-compare two Segments, 0 indicates equality
121
- def <=>( other )
122
- return nil unless other.kind_of?(HL7::Message::Segment)
121
+ def <=>(other)
122
+ return nil unless other.is_a?(HL7::Message::Segment)
123
123
 
124
124
  # per Comparable docs: http://www.ruby-doc.org/core/classes/Comparable.html
125
- diff = self.weight - other.weight
126
- return -1 if diff > 0
127
- return 1 if diff < 0
128
- return 0
125
+ diff = weight - other.weight
126
+ return -1 if diff.positive?
127
+ return 1 if diff.negative?
128
+
129
+ 0
129
130
  end
130
131
 
131
132
  # get the defined sort-weight of this segment class
@@ -147,6 +148,7 @@ class HL7::Message::Segment
147
148
  # yield each element in the segment
148
149
  def each # :yields: element
149
150
  return unless @elements
151
+
150
152
  @elements.each { |e| yield e }
151
153
  end
152
154
 
@@ -157,25 +159,26 @@ class HL7::Message::Segment
157
159
  end
158
160
 
159
161
  def has_children?
160
- self.respond_to?(:children)
162
+ respond_to?(:children)
161
163
  end
162
164
 
163
- private
164
- def self.singleton #:nodoc:
165
+ private
166
+
167
+ def self.singleton # :nodoc:
165
168
  class << self; self end
166
169
  end
167
170
 
168
171
  def setup_delimiters(delims)
169
- delims = [ delims ].flatten
172
+ delims = [delims].flatten
170
173
 
171
- @element_delim = ( delims.length>0 ) ? delims[0] : "|"
172
- @item_delim = ( delims.length>1 ) ? delims[1] : "^"
174
+ @element_delim = delims.length.positive? ? delims[0] : "|"
175
+ @item_delim = delims.length > 1 ? delims[1] : "^"
173
176
  end
174
177
 
175
178
  # DSL element to define a segment's sort weight
176
179
  # returns the segment's current weight by default
177
180
  # segments are sorted ascending
178
- def self.weight(new_weight=nil)
181
+ def self.weight(new_weight = nil)
179
182
  if new_weight
180
183
  singleton.module_eval do
181
184
  @my_weight = new_weight
@@ -184,12 +187,25 @@ class HL7::Message::Segment
184
187
 
185
188
  singleton.module_eval do
186
189
  return 999 unless @my_weight
190
+
187
191
  @my_weight
188
192
  end
189
193
  end
190
194
 
191
- def self.convert_to_ts(value) #:nodoc:
192
- value.respond_to?(:to_hl7) ? value.to_hl7 : value
195
+ def self.convert_to_ts(value) # :nodoc:
196
+ if value.is_a?(Time) || value.is_a?(DateTime)
197
+ hl7_formatted_timestamp(value)
198
+ elsif value.is_a?(Date)
199
+ hl7_formatted_date(value)
200
+ else
201
+ value
202
+ end
193
203
  end
194
204
 
205
+ def self.sanitize_admin_sex!(value)
206
+ raise HL7::InvalidDataError, "bad administrative sex value (not F|M|O|U|A|N|C)" unless /^[FMOUANC]$/.match(value) || value.nil? || value == ""
207
+
208
+ value ||= ""
209
+ value
210
+ end
195
211
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Provide a catch-all information preserving segment
2
4
  # * nb: aliases are not provided BUT you can use the numeric element accessor
3
5
  #
@@ -7,12 +9,12 @@
7
9
  # seg.e2 = "KIN HERE"
8
10
  #
9
11
  class HL7::Message::Segment::Default < HL7::Message::Segment
10
- def initialize(raw_segment="", delims=[])
11
- segs = [] if (raw_segment == "")
12
+ def initialize(raw_segment = "", delims = [])
13
+ segs = [] if raw_segment == ""
12
14
  segs ||= raw_segment
13
- super( segs, delims )
15
+ super(segs, delims)
14
16
  end
15
17
  end
16
18
 
17
19
  # load our segments
18
- Dir["#{File.dirname(__FILE__)}/segments/*.rb"].each { |ext| load ext }
20
+ Dir["#{File.dirname(__FILE__)}/segments/*.rb"].each {|ext| load ext }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # SegmentFields
2
4
  # class HL7::Message::Segment::NK1 < HL7::Message::Segment
3
5
  # weight 100 # segments are sorted ascendingly
@@ -20,8 +22,8 @@ module HL7::Message::SegmentFields
20
22
  # * blk is an optional validation/convertion proc which MUST
21
23
  # take a parameter and always return a value for the field (it will be
22
24
  # used on read/write calls)
23
- def add_field( name, options={}, &blk )
24
- options = { :idx =>-1, :blk =>blk}.merge!( options )
25
+ def add_field(name, options = {}, &blk)
26
+ options = { :idx => -1, :blk => blk }.merge!(options)
25
27
  name ||= :id
26
28
  namesym = name.to_sym
27
29
  @field_cnt ||= 1
@@ -32,10 +34,10 @@ module HL7::Message::SegmentFields
32
34
 
33
35
  singleton.module_eval do
34
36
  @fields ||= {}
35
- @fields[ namesym ] = options
37
+ @fields[namesym] = options
36
38
  end
37
39
 
38
- self.class_eval <<-END
40
+ class_eval <<-END, __FILE__, __LINE__ + 1
39
41
  def #{name}(val=nil)
40
42
  unless val
41
43
  read_field( :#{namesym} )
@@ -51,14 +53,14 @@ module HL7::Message::SegmentFields
51
53
  END
52
54
  end
53
55
 
54
- def fields #:nodoc:
56
+ def fields # :nodoc:
55
57
  singleton.module_eval do
56
58
  (@fields ||= [])
57
59
  end
58
60
  end
59
61
 
60
62
  def alias_field(new_field_name, old_field_name)
61
- self.class_eval <<-END
63
+ class_eval <<-END, __FILE__, __LINE__ + 1
62
64
  def #{new_field_name}(val=nil)
63
65
  raise HL7::InvalidDataError.new unless self.class.fields[:#{old_field_name}]
64
66
  unless val
@@ -76,50 +78,50 @@ module HL7::Message::SegmentFields
76
78
  end
77
79
  end
78
80
 
79
- def field_info( name ) #:nodoc:
81
+ def field_info(name) # :nodoc:
80
82
  field_blk = nil
81
83
  idx = name # assume we've gotten a integer
82
- unless name.kind_of?(Integer)
83
- fld_info = self.class.fields[ name ]
84
+ unless name.is_a?(Integer)
85
+ fld_info = self.class.fields[name]
84
86
  idx = fld_info[:idx].to_i
85
87
  field_blk = fld_info[:blk]
86
88
  end
87
89
 
88
- [ idx, field_blk ]
90
+ [idx, field_blk]
89
91
  end
90
92
 
91
- def []( index )
93
+ def [](index)
92
94
  @elements[index]
93
95
  end
94
96
 
95
- def []=( index, value )
97
+ def []=(index, value)
96
98
  @elements[index] = value.to_s
97
99
  end
98
100
 
99
- def read_field( name ) #:nodoc:
100
- idx, field_blk = field_info( name )
101
+ def read_field(name) # :nodoc:
102
+ idx, field_blk = field_info(name)
101
103
  return nil unless idx
102
- return nil if (idx >= @elements.length)
104
+ return nil if idx >= @elements.length
103
105
 
104
- ret = @elements[ idx ]
105
- ret = ret.first if (ret.kind_of?(Array) && ret.length == 1)
106
- ret = field_blk.call( ret ) if field_blk
106
+ ret = @elements[idx]
107
+ ret = ret.first if ret.is_a?(Array) && ret.length == 1
108
+ ret = field_blk.call(ret) if field_blk
107
109
  ret
108
110
  end
109
111
 
110
- def write_field( name, value ) #:nodoc:
111
- idx, field_blk = field_info( name )
112
+ def write_field(name, value) # :nodoc:
113
+ idx, field_blk = field_info(name)
112
114
  return nil unless idx
113
115
 
114
- if (idx >= @elements.length)
116
+ if idx >= @elements.length
115
117
  # make some space for the incoming field, missing items are assumed to
116
118
  # be empty, so this is valid per the spec -mg
117
- missing = ("," * (idx-@elements.length)).split(',',-1)
119
+ missing = ("," * (idx - @elements.length)).split(",", -1)
118
120
  @elements += missing
119
121
  end
120
122
 
121
- value = value.first if (value && value.kind_of?(Array) && value.length == 1)
122
- value = field_blk.call( value ) if field_blk
123
- @elements[ idx ] = value.to_s
123
+ value = value.first if value.is_a?(Array) && value.length == 1
124
+ value = field_blk.call(value) if field_blk
125
+ @elements[idx] = value.to_s
124
126
  end
125
127
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Class for grouping the messages delimiter
2
4
  class HL7::Message::Delimiter
3
5
  attr_accessor :item, :element, :segment
@@ -11,9 +13,7 @@ end
11
13
 
12
14
  # Methods for creating segments in Message
13
15
  class HL7::Message::SegmentGenerator
14
-
15
- attr_reader :element, :last_seg
16
- attr_reader :delimiter
16
+ attr_reader :element, :last_seg, :delimiter
17
17
 
18
18
  attr_accessor :seg_parts, :seg_name
19
19
 
@@ -22,24 +22,21 @@ class HL7::Message::SegmentGenerator
22
22
  @last_seg = last_seg
23
23
  @delimiter = delimiter
24
24
 
25
- @seg_parts = HL7::MessageParser.split_by_delimiter( element,
26
- delimiter.element )
25
+ @seg_parts = HL7::MessageParser.split_by_delimiter(element,
26
+ delimiter.element)
27
27
  end
28
28
 
29
29
  def valid_segments_parts?
30
- return true if @seg_parts && @seg_parts.length > 0
30
+ return true if @seg_parts&.length&.positive?
31
31
 
32
- if HL7.ParserConfig[:empty_segment_is_error]
33
- raise HL7::EmptySegmentNotAllowed
34
- else
35
- return false
36
- end
32
+ raise HL7::EmptySegmentNotAllowed if HL7.configuration.empty_segment_is_error
33
+
34
+ false
37
35
  end
38
36
 
39
37
  def build
40
38
  klass = get_segment_class
41
- new_seg = klass.new( @element, [@delimiter.element, @delimiter.item] )
42
- new_seg
39
+ klass.new(@element, [@delimiter.element, @delimiter.item])
43
40
  end
44
41
 
45
42
  def get_segment_class
@@ -47,9 +44,9 @@ class HL7::Message::SegmentGenerator
47
44
  segment_to_search = @seg_name if RUBY_VERSION < "1.9"
48
45
 
49
46
  if HL7::Message::Segment.constants.index(segment_to_search)
50
- eval("HL7::Message::Segment::%s" % @seg_name)
47
+ eval(format("HL7::Message::Segment::%s", @seg_name))
51
48
  else
52
49
  HL7::Message::Segment::Default
53
50
  end
54
51
  end
55
- end
52
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This module includes methods for storing segments inside segments.
2
4
  # has_children(child_types) defines three methods dynamically.
3
5
 
@@ -8,11 +10,12 @@ module HL7::Message::SegmentListStorage
8
10
  if defined?(@child_types)
9
11
  @child_types << child_type.to_sym
10
12
  else
11
- has_children [ child_type.to_sym ]
13
+ has_children [child_type.to_sym]
12
14
  end
13
15
  end
14
16
 
15
- private
17
+ private
18
+
16
19
  # allows a segment to store other segment objects
17
20
  # used to handle associated lists like one OBR to many OBX segments
18
21
  def has_children(child_types)
@@ -30,8 +33,8 @@ module HL7::Message::SegmentListStorage
30
33
  end
31
34
 
32
35
  def define_method_accepts
33
- self.class_eval do
34
- define_method('accepts?') do |t|
36
+ class_eval do
37
+ define_method(:accepts?) do |t|
35
38
  t = t.to_sym if t.respond_to?(:to_sym)
36
39
  !!child_types.index(t)
37
40
  end
@@ -39,7 +42,7 @@ module HL7::Message::SegmentListStorage
39
42
  end
40
43
 
41
44
  def define_method_children
42
- self.class_eval do
45
+ class_eval do
43
46
  define_method(:children) do
44
47
  unless defined?(@my_children)
45
48
  p = self
@@ -48,27 +51,25 @@ module HL7::Message::SegmentListStorage
48
51
  @parental = p
49
52
  alias :old_append :<<
50
53
 
51
- def <<( value )
54
+ def <<(value)
52
55
  # do nothing if value is nil
53
56
  return unless value
54
57
 
55
58
  # make sure it's an array
56
59
  value = [value].flatten
57
- value.map{|item| append(item)}
60
+ value.map {|item| append(item) }
58
61
  end
59
62
 
60
63
  def append(value)
61
- unless (value && value.kind_of?(HL7::Message::Segment))
62
- raise HL7::Exception.new( "attempting to append non-segment to a segment list" )
64
+ unless value.is_a?(HL7::Message::Segment)
65
+ raise HL7::Exception, "attempting to append non-segment to a segment list"
63
66
  end
64
67
 
65
68
  value.segment_parent = @parental
66
69
  k = @parental
67
- while (k && k.segment_parent && !k.segment_parent.kind_of?(HL7::Message))
68
- k = k.segment_parent
69
- end
70
- k.segment_parent << value if k && k.segment_parent
71
- old_append( value )
70
+ k = k.segment_parent while k&.segment_parent && !k.segment_parent.is_a?(HL7::Message)
71
+ k.segment_parent << value if k&.segment_parent
72
+ old_append(value)
72
73
  end
73
74
  end
74
75
  end
data/lib/segments/aig.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class HL7::Message::Segment::AIG < HL7::Message::Segment
2
4
  weight 1
3
5
  add_field :set_id
data/lib/segments/ail.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class HL7::Message::Segment::AIL < HL7::Message::Segment
2
4
  weight 0
3
5
  add_field :set_id
data/lib/segments/aip.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class HL7::Message::Segment::AIP < HL7::Message::Segment
2
4
  weight 0
3
5
  add_field :set_id
data/lib/segments/ais.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class HL7::Message::Segment::AIS < HL7::Message::Segment
2
4
  weight 1
3
5
  add_field :set_id
data/lib/segments/dg1.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module HL7
2
4
  class Message::Segment::DG1 < HL7::Message::Segment
3
5
  weight 92
@@ -24,15 +26,5 @@ module HL7
24
26
  add_field :attestation_date_time do |value|
25
27
  convert_to_ts(value)
26
28
  end
27
-
28
- private
29
-
30
- def self.convert_to_ts(value) #:nodoc:
31
- if value.is_a?(Time) || value.is_a?(Date)
32
- value.to_hl7
33
- else
34
- value
35
- end
36
- end
37
29
  end
38
30
  end
data/lib/segments/err.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class HL7::Message::Segment::ERR < HL7::Message::Segment
2
4
  weight 2
3
5
  add_field :error_code_and_location
data/lib/segments/evn.rb CHANGED
@@ -1,4 +1,5 @@
1
- # encoding: UTF-8
1
+ # frozen_string_literal: true
2
+
2
3
  class HL7::Message::Segment::EVN < HL7::Message::Segment
3
4
  weight 0 # should occur after the MSH segment
4
5
  add_field :type_code
data/lib/segments/ft1.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module HL7
2
4
  class Message::Segment::FT1 < HL7::Message::Segment
3
5
  weight 10
@@ -12,7 +14,7 @@ module HL7
12
14
  end
13
15
  add_field :transaction_type
14
16
  add_field :transaction_code
15
- add_field :transaction_description
17
+ add_field :transaction_description
16
18
  add_field :transaction_description_alt
17
19
  add_field :transaction_quantity
18
20
  add_field :transaction_amount_extended
@@ -35,29 +37,27 @@ module HL7
35
37
  add_field :unit_cost
36
38
  add_field :filler_order_number
37
39
  add_field :entered_by
38
-
40
+
39
41
  # https://en.wikipedia.org/wiki/Current_Procedural_Terminology (CPT)
40
42
  add_field :procedure_code
41
43
 
42
44
  add_field :procedure_code_modifier
43
- add_field :advanced_beneficiary_notice_code
44
- add_field :medically_necessary_duplicate_procedure_reason
45
+ add_field :advanced_beneficiary_notice_code
46
+ add_field :medically_necessary_duplicate_procedure_reason
45
47
  add_field :ndc_code
46
48
  add_field :payment_reference_id
47
49
  add_field :transaction_reference_key
48
50
  add_field :performing_facility
49
- add_field :ordering_facility
51
+ add_field :ordering_facility
50
52
  add_field :item_number
51
- add_field :model_number
52
- add_field :special_processing_code
53
+ add_field :model_number
54
+ add_field :special_processing_code
53
55
  add_field :clinic_code
54
- add_field :referral_number
56
+ add_field :referral_number
55
57
  add_field :authorization_number
56
- add_field :service_provider_taxonomy_code
58
+ add_field :service_provider_taxonomy_code
57
59
  add_field :revenue_code
58
- add_field :prescription_number
60
+ add_field :prescription_number
59
61
  add_field :ndc_qty_and_uom
60
-
61
-
62
62
  end
63
- end
63
+ end
data/lib/segments/fts.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class HL7::Message::Segment::FTS < HL7::Message::Segment
2
4
  weight 1001 # at the end
3
5
  add_field :file_batch_count
data/lib/segments/gt1.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module HL7
2
4
  class Message::Segment::GT1 < HL7::Message::Segment
3
5
  add_field :set_id
@@ -9,11 +11,7 @@ module HL7
9
11
  add_field :guarantor_business_phone
10
12
  add_field :guarantor_date_of_birth
11
13
  add_field :guarantor_sex do |sex|
12
- unless /^[FMOUANC]$/.match(sex) || sex == nil || sex == ""
13
- raise HL7::InvalidDataError.new( "bad administrative sex value (not F|M|O|U|A|N|C)" )
14
- end
15
- sex = "" unless sex
16
- sex
14
+ sanitize_admin_sex!(sex)
17
15
  end
18
16
  add_field :guarantor_type
19
17
  add_field :guarantor_relationship
@@ -72,4 +70,4 @@ module HL7
72
70
  add_field :guarantor_birth_place
73
71
  add_field :vip_indicator
74
72
  end
75
- end
73
+ end
data/lib/segments/in1.rb CHANGED
@@ -1,4 +1,5 @@
1
- # encoding: UTF-8
1
+ # frozen_string_literal: true
2
+
2
3
  # via https://github.com/bbhoss/ruby-hl7/blob/master/lib/segments/in1.rb
3
4
  class HL7::Message::Segment::IN1 < HL7::Message::Segment
4
5
  add_field :set_id
data/lib/segments/mfe.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class HL7::Message::Segment::MFE < HL7::Message::Segment
2
4
  weight 0
3
5
  add_field :record_level_event_code
data/lib/segments/mfi.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class HL7::Message::Segment::MFI < HL7::Message::Segment
2
4
  weight 0
3
5
  add_field :master_file_identifier
data/lib/segments/mrg.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class HL7::Message::Segment::MRG < HL7::Message::Segment
2
4
  weight 4
3
5
  add_field :prior_patient_identifier_list