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/Rakefile DELETED
@@ -1,76 +0,0 @@
1
- # $Id$
2
- require 'rubygems'
3
- require 'rake'
4
- require 'rdoc/task'
5
- require 'rubygems/package_task'
6
- require 'rbconfig'
7
- require 'rspec'
8
- require 'rspec/core/rake_task'
9
- require 'simplecov'
10
-
11
- $: << './lib'
12
- require 'ruby-hl7'
13
- require 'message_parser'
14
- require 'message'
15
- require 'segment_list_storage'
16
- require 'segment_generator'
17
- require 'segment'
18
-
19
- full_name = "Ruby-HL7"
20
- RAKEVERSION = "12.3.3"
21
-
22
- # Many of these tasks were garnered from zenspider's Hoe
23
- # just forced to work my way
24
-
25
- desc 'Default: Run all examples'
26
- task :default => :spec
27
-
28
- spec = Gem::Specification.new do |s|
29
- s.homepage = "https://github.com/ruby-hl7/ruby-hl7"
30
- s.platform = Gem::Platform::RUBY
31
- s.summary = "Ruby HL7 Library"
32
- s.description = "A simple library to parse and generate HL7 2.x messages"
33
- s.files = FileList["{bin,lib,test_data}/**/*"].to_a
34
- s.require_path = "lib"
35
- s.test_files = FileList["{test}/**/test*.rb"].to_a
36
- s.has_rdoc = true
37
- s.required_ruby_version = '>= 1.8.6'
38
- s.extra_rdoc_files = %w[README.rdoc LICENSE]
39
- s.add_dependency("rake", ">= #{RAKEVERSION}")
40
- end
41
-
42
- desc "Run all examples"
43
- RSpec::Core::RakeTask.new(:spec) do |spec|
44
- spec.pattern = 'spec/**/*.rb'
45
- spec.ruby_opts = '-w'
46
- end
47
-
48
- desc "Run all examples with SimpleCov"
49
- RSpec::Core::RakeTask.new(:spec_with_simplecov) do |spec|
50
- ENV['COVERAGE'] = 'true'
51
- spec.pattern = 'spec/**/*.rb'
52
- end
53
-
54
- RDoc::Task.new do |rd|
55
- rd.main = "README.rdoc"
56
- rd.rdoc_files.include("README.rdoc", "LICENSE", "lib/**/*.rb")
57
- rd.title = "%s (%s) Documentation" % [ full_name, spec.version ]
58
- rd.rdoc_dir = 'doc'
59
- end
60
-
61
- Gem::PackageTask.new(spec) do |pkg|
62
- pkg.need_tar = true
63
- end
64
-
65
- desc 'Clean up all the extras'
66
- task :clean => [ :clobber_rdoc, :clobber_package ] do
67
- %w[*.gem ri coverage*].each do |pattern|
68
- files = Dir[pattern]
69
- rm_rf files unless files.empty?
70
- end
71
- end
72
-
73
- desc 'Install the package as a gem'
74
- task :install_gem => [:clean, :package] do
75
- sh "sudo gem install pkg/*.gem"
76
- end
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 1.3.3
data/VERSION.yml DELETED
@@ -1,4 +0,0 @@
1
- ---
2
- :major: 1
3
- :minor: 3
4
- :patch: 0
@@ -1,26 +0,0 @@
1
- # $Id$
2
- # Ruby-HL7 Proxy Server Example
3
- require 'rubygems'
4
- require 'ruby-hl7'
5
- require 'thread'
6
- require 'socket'
7
-
8
- PORT = 2402
9
- target_ip = "127.0.0.1"
10
- target_port = 5900
11
-
12
- srv = TCPServer.new(PORT)
13
- puts "proxy_server listening on port: %i" % PORT
14
- puts "proxying for: %s:%i" % [ target_ip, target_port ]
15
- while true
16
- sok = srv.accept
17
- Thread.new( sok ) do |my_socket|
18
- raw_inp = my_socket.readlines
19
- msg = HL7::Message.new( raw_input )
20
- puts "forwarding message:\n%s" % msg.to_s
21
- soc = TCPSocket.open( target_ip, target_port )
22
- soc.write msg.to_mllp
23
- soc.close
24
- end
25
- end
26
-
data/ruby-hl7.gemspec DELETED
@@ -1,39 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = %q{ruby-hl7}
8
- s.version = "1.3.3"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Mark Guzman"]
12
- s.date = %q{2014-09-09}
13
- s.description = %q{A simple library to parse and generate HL7 2.x messages}
14
- s.email = %q{ruby-hl7@googlegroups.com}
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.rdoc"
18
- ]
19
-
20
- s.files = `git ls-files`.split "\n"
21
- s.test_files = `git ls-files -- {spec}/*`.split "\n"
22
- s.homepage = %q{http://github.com/ruby-hl7/ruby-hl7}
23
- s.rdoc_options = ["--charset=UTF-8"]
24
- s.require_paths = ["lib"]
25
- s.required_ruby_version = Gem::Requirement.new(">= 1.8.6")
26
- s.rubyforge_project = %q{ruby-hl7}
27
- s.rubygems_version = %q{1.4.2}
28
- s.summary = %q{Ruby HL7 Library}
29
- s.license = "MIT"
30
-
31
- s.add_development_dependency 'bundler', '~> 1.17'
32
- s.add_development_dependency 'pry'
33
- s.add_development_dependency 'rake', '>= 12.3.3'
34
- s.add_development_dependency 'rdoc', '~> 6.3'
35
- s.add_development_dependency 'rspec', '>= 3.9.0'
36
- s.add_development_dependency 'simplecov', '= 0.16.1'
37
- s.add_development_dependency 'simplecov-html', '~> 0.10.0'
38
- s.add_development_dependency 'rake-contrib'
39
- end
@@ -1,28 +0,0 @@
1
- # encoding: UTF-8
2
- require 'spec_helper'
3
-
4
- describe HL7::Message::Segment::AIL do
5
- context 'general' do
6
- before :all do
7
- @base_ail = 'AIL|1|A|OFFICE^^^OFFICE|^OFFICE^A4'
8
- end
9
-
10
- it 'creates an AIL segment' do
11
- expect do
12
- ail = HL7::Message::Segment::AIL.new( @base_ail )
13
- expect(ail).not_to be_nil
14
- expect(ail.to_s).to eq @base_ail
15
- end.not_to raise_error
16
- end
17
-
18
- it 'allows access to an AIL segment' do
19
- expect do
20
- ail = HL7::Message::Segment::AIL.new( @base_ail )
21
- expect(ail.set_id).to eq '1'
22
- expect(ail.segment_action_code).to eq 'A'
23
- expect(ail.location_resource_id).to eq 'OFFICE^^^OFFICE'
24
- expect(ail.location_type).to eq '^OFFICE^A4'
25
- end.not_to raise_error
26
- end
27
- end
28
- end
@@ -1,31 +0,0 @@
1
- # encoding: UTF-8
2
- require 'spec_helper'
3
-
4
- describe HL7::Message::Segment::AIP do
5
- context 'general' do
6
- before :all do
7
- @base_aip = 'AIP|1|U|JSB^ISON^Kathy^S|D^Doctor||20020108150000|||10|m^Minutes'
8
- end
9
-
10
- it 'creates an AIP segment' do
11
- expect do
12
- aip = HL7::Message::Segment::AIP.new( @base_aip )
13
- expect(aip).not_to be_nil
14
- expect(aip.to_s).to eq @base_aip
15
- end.not_to raise_error
16
- end
17
-
18
- it 'allows access to an AIP segment' do
19
- expect do
20
- aip = HL7::Message::Segment::AIP.new( @base_aip )
21
- expect(aip.set_id).to eq '1'
22
- expect(aip.segment_action_code).to eq 'U'
23
- expect(aip.personnel_resource_id).to eq 'JSB^ISON^Kathy^S'
24
- expect(aip.resource_role).to eq 'D^Doctor'
25
- expect(aip.start_date_time).to eq '20020108150000'
26
- expect(aip.duration).to eq '10'
27
- expect(aip.duration_units).to eq 'm^Minutes'
28
- end.not_to raise_error
29
- end
30
- end
31
- end
@@ -1,319 +0,0 @@
1
- # encoding: UTF-8
2
- require 'spec_helper'
3
-
4
- describe HL7::Message do
5
- context 'basic parsing' do
6
- before :all do
7
- @simple_msh_txt = open( './test_data/test.hl7' ).readlines.first
8
- @empty_txt = open( './test_data/empty.hl7' ).readlines.first
9
- @empty_segments_txt = open( './test_data/empty_segments.hl7' ).readlines.first
10
- @base_msh = "MSH|^~\\&|LAB1||DESTINATION||19910127105114||ORU^R03|LAB1003929"
11
- @base_msh_alt_delims = "MSH$@~\\&|LAB1||DESTINATION||19910127105114||ORU^R03|LAB1003929"
12
- end
13
-
14
- it 'parses simple text' do
15
- msg = HL7::Message.new
16
- msg.parse @simple_msh_txt
17
- expect(msg.to_hl7).to eq @simple_msh_txt
18
- end
19
-
20
- it 'parses delimiters properly' do
21
- msg = HL7::Message.new( @base_msh )
22
- expect(msg.element_delim).to eq "|"
23
- expect(msg.item_delim).to eq "^"
24
-
25
- msg = HL7::Message.new( @base_msh_alt_delims )
26
- expect(msg.element_delim).to eq "$"
27
- expect(msg.item_delim).to eq "@"
28
- end
29
-
30
- it 'parses via the constructor' do
31
- msg = HL7::Message.new( @simple_msh_txt )
32
- expect(msg.to_hl7).to eq @simple_msh_txt
33
- end
34
-
35
- it 'parses via the class method' do
36
- msg = HL7::Message.parse( @simple_msh_txt )
37
- expect(msg.to_hl7).to eq @simple_msh_txt
38
- end
39
-
40
- it 'only parses String and Enumerable data' do
41
- expect { HL7::Message.parse :MSHthis_shouldnt_parse_at_all }.to raise_error(HL7::ParseError)
42
- end
43
-
44
- it 'parses empty strings' do
45
- expect { HL7::Message.new @empty_txt }.not_to raise_error
46
- end
47
-
48
- it 'converts to strings' do
49
- msg = HL7::Message.new
50
- msg.parse @simple_msh_txt
51
- orig = @simple_msh_txt.gsub( /\r/, "\n" )
52
- expect(msg.to_s).to eq orig
53
- end
54
-
55
- it 'converts to a string and to HL7' do
56
- msg = HL7::Message.new( @simple_msh_txt )
57
- expect(msg.to_hl7).not_to eq(msg.to_s)
58
- end
59
-
60
- it 'allows access to segments by index' do
61
- msg = HL7::Message.new
62
- msg.parse @simple_msh_txt
63
- expect(msg[0].to_s).to eq @base_msh
64
- end
65
-
66
- it 'allows access to segments by name' do
67
- msg = HL7::Message.new
68
- msg.parse @simple_msh_txt
69
- expect(msg["MSH"].to_s).to eq @base_msh
70
- end
71
-
72
- it 'allows access to segments by symbol' do
73
- msg = HL7::Message.new
74
- msg.parse @simple_msh_txt
75
- expect(msg[:MSH].to_s).to eq @base_msh
76
- end
77
-
78
- it 'inserts segments by index' do
79
- msg = HL7::Message.new
80
- msg.parse @simple_msh_txt
81
- inp = HL7::Message::Segment::Default.new
82
- msg[1] = inp
83
- expect(msg[1]).to eq inp
84
-
85
- expect { msg[2] = Class.new }.to raise_error(HL7::Exception)
86
- end
87
-
88
- it 'returns nil when accessing a missing segment' do
89
- msg = HL7::Message.new
90
- msg.parse @simple_msh_txt
91
- expect { expect(msg[:does_not_exist]).to be_nil }.not_to raise_error
92
- end
93
-
94
- it 'inserts segments by name' do
95
- msg = HL7::Message.new
96
- msg.parse @simple_msh_txt
97
- inp = HL7::Message::Segment::NTE.new
98
- msg["NTE"] = inp
99
- expect(msg["NTE"]).to eq inp
100
- expect { msg["NTE"] = Class.new }.to raise_error(HL7::Exception)
101
- end
102
-
103
- it 'inserts segments by symbol' do
104
- msg = HL7::Message.new
105
- msg.parse @simple_msh_txt
106
- inp = HL7::Message::Segment::NTE.new
107
- msg[:NTE] = inp
108
- expect(msg[:NTE]).to eq inp
109
- expect { msg[:NTE] = Class.new }.to raise_error(HL7::Exception)
110
- end
111
-
112
- it 'allows access to segment elements' do
113
- msg = HL7::Message.new
114
- msg.parse @simple_msh_txt
115
- expect(msg[:MSH].sending_app).to eq "LAB1"
116
- end
117
-
118
- it 'allows modification of segment elements' do
119
- msg = HL7::Message.new
120
- msg.parse @simple_msh_txt
121
- msg[:MSH].sending_app = "TEST"
122
- expect(msg[:MSH].sending_app).to eq "TEST"
123
- end
124
-
125
- it 'raises NoMethodError when accessing a missing element' do
126
- msg = HL7::Message.new
127
- msg.parse @simple_msh_txt
128
- expect {msg[:MSH].does_not_really_exist_here}.to raise_error(NoMethodError)
129
- end
130
-
131
- it 'raises NoMethodError when modifying a missing element' do
132
- msg = HL7::Message.new
133
- msg.parse @simple_msh_txt
134
- expect {msg[:MSH].does_not_really_exist_here="TEST"}.to raise_error(NoMethodError)
135
- end
136
-
137
- it 'permits elements to be accessed via numeric names' do
138
- msg = HL7::Message.new( @simple_msh_txt )
139
- expect(msg[:MSH].e2).to eq "LAB1"
140
- expect(msg[:MSH].e3).to be_empty
141
- end
142
-
143
- it 'permits elements to be modified via numeric names' do
144
- msg = HL7::Message.parse( @simple_msh_txt )
145
- msg[:MSH].e2 = "TESTING1234"
146
- expect(msg[:MSH].e2).to eq "TESTING1234"
147
- end
148
-
149
- it 'allows appending of segments' do
150
- msg = HL7::Message.new
151
- expect do
152
- msg << HL7::Message::Segment::MSH.new
153
- msg << HL7::Message::Segment::NTE.new
154
- end.not_to raise_error
155
-
156
- expect { msg << Class.new }.to raise_error(HL7::Exception)
157
- end
158
-
159
- it 'allows appending of an array of segments' do
160
- msg = HL7::Message.new
161
- expect do
162
- msg << [HL7::Message::Segment::MSH.new, HL7::Message::Segment::NTE.new]
163
- end.not_to raise_error
164
-
165
- obx = HL7::Message::Segment::OBX.new
166
- expect do
167
- obx.children << [HL7::Message::Segment::NTE.new, HL7::Message::Segment::NTE.new]
168
- end.not_to raise_error
169
- end
170
-
171
- it 'sorts segments' do
172
- msg = HL7::Message.new
173
- pv1 = HL7::Message::Segment::PV1.new
174
- msg << pv1
175
- msh = HL7::Message::Segment::MSH.new
176
- msg << msh
177
- nte = HL7::Message::Segment::NTE.new
178
- msg << nte
179
- nte2 = HL7::Message::Segment::NTE.new
180
- msg << nte2
181
- msh.sending_app = "TEST"
182
-
183
- initial = msg.to_s
184
- sorted = msg.sort
185
- final = sorted.to_s
186
- expect(initial).not_to eq(final)
187
- end
188
-
189
- it 'automatically assigns a set_id to a new segment' do
190
- msg = HL7::Message.new
191
- msh = HL7::Message::Segment::MSH.new
192
- msg << msh
193
- ntea = HL7::Message::Segment::NTE.new
194
- ntea.comment = "first"
195
- msg << ntea
196
- nteb = HL7::Message::Segment::NTE.new
197
- nteb.comment = "second"
198
- msg << nteb
199
- ntec = HL7::Message::Segment::NTE.new
200
- ntec.comment = "third"
201
- msg << ntec
202
- expect(ntea.set_id).to eq "1"
203
- expect(nteb.set_id).to eq "2"
204
- expect(ntec.set_id).to eq "3"
205
- end
206
-
207
- it 'parses Enumerable data' do
208
- test_file = open( './test_data/test.hl7' )
209
- expect(test_file).not_to be_nil
210
-
211
- msg = HL7::Message.new( test_file )
212
- expect(msg.to_hl7).to eq @simple_msh_txt
213
- end
214
-
215
- it 'has a to_info method' do
216
- msg = HL7::Message.new( @simple_msh_txt )
217
- expect(msg[1].to_info).not_to be_nil
218
- end
219
-
220
- it 'parses a raw array' do
221
- inp = "NTE|1|ME TOO"
222
- nte = HL7::Message::Segment::NTE.new( inp.split( '|' ) )
223
- expect(nte.to_s).to eq inp
224
- end
225
-
226
- it 'produces MLLP output' do
227
- msg = HL7::Message.new( @simple_msh_txt )
228
- expect = "\x0b%s\x1c\r" % msg.to_hl7
229
- expect(msg.to_mllp).to eq expect
230
- end
231
-
232
- it 'parses MLLP input' do
233
- raw = "\x0b%s\x1c\r" % @simple_msh_txt
234
- msg = HL7::Message.parse( raw )
235
- expect(msg).not_to be_nil
236
- expect(msg.to_hl7).to eq @simple_msh_txt
237
- expect(msg.to_mllp).to eq raw
238
- end
239
-
240
- it 'can parse its own MLLP output' do
241
- msg = HL7::Message.parse( @simple_msh_txt )
242
- expect(msg).not_to be_nil
243
- expect do
244
- post_mllp = HL7::Message.parse( msg.to_mllp )
245
- expect(post_mllp).not_to be_nil
246
- expect(msg.to_hl7).to eq post_mllp.to_hl7
247
- end.not_to raise_error
248
- end
249
-
250
- it 'can access child elements' do
251
- obr = HL7::Message::Segment::OBR.new
252
- expect do
253
- expect(obr.children).not_to be_nil
254
- expect(obr.children.length).to be_zero
255
- end.not_to raise_error
256
- end
257
-
258
- it 'can add child elements' do
259
- obr = HL7::Message::Segment::OBR.new
260
- expect do
261
- expect(obr.children.length).to be_zero
262
- (1..5).each do |x|
263
- obr.children << HL7::Message::Segment::OBX.new
264
- expect(obr.children.length).to eq x
265
- end
266
- end.not_to raise_error
267
- end
268
-
269
- it 'rejects invalid child segments' do
270
- obr = HL7::Message::Segment::OBR.new
271
- expect { obr.children << Class.new }.to raise_error(HL7::Exception)
272
- end
273
-
274
- it 'supports grouped, sequenced segments' do
275
- #multible obr's with multiple obx's
276
- msg = HL7::Message.parse( @simple_msh_txt )
277
- orig_output = msg.to_hl7
278
- (1..10).each do |obr_id|
279
- obr = HL7::Message::Segment::OBR.new
280
- msg << obr
281
- (1..10).each do |obx_id|
282
- obx = HL7::Message::Segment::OBX.new
283
- obr.children << obx
284
- end
285
- end
286
-
287
- expect(msg[:OBR]).not_to be_nil
288
- expect(msg[:OBR].length).to eq 11
289
- expect(msg[:OBX]).not_to be_nil
290
- expect(msg[:OBX].length).to eq 102
291
- expect(msg[:OBR][4].children[1].set_id).to eq "2"
292
- expect(msg[:OBR][5].children[1].set_id).to eq "2"
293
-
294
- final_output = msg.to_hl7
295
- expect(orig_output).not_to eq(final_output)
296
- end
297
-
298
- it "returns each segment's index" do
299
- msg = HL7::Message.parse( @simple_msh_txt )
300
- expect(msg.index("PID")).to eq 1
301
- expect(msg.index(:PID)).to eq 1
302
- expect(msg.index("PV1")).to eq 2
303
- expect(msg.index(:PV1)).to eq 2
304
- expect(msg.index("TACOBELL")).to be_nil
305
- expect(msg.index(nil)).to be_nil
306
- expect(msg.index(1)).to be_nil
307
- end
308
-
309
- it 'validates the PID#admin_sex element' do
310
- pid = HL7::Message::Segment::PID.new
311
- expect { pid.admin_sex = "TEST" }.to raise_error(HL7::InvalidDataError)
312
- expect { pid.admin_sex = "F" }.not_to raise_error
313
- end
314
-
315
- it 'can parse an empty segment' do
316
- expect { HL7::Message.new @empty_segments_txt }.not_to raise_error
317
- end
318
- end
319
- end
@@ -1,52 +0,0 @@
1
- # encoding: UTF-8
2
- require 'spec_helper'
3
-
4
- describe HL7::Message do
5
- context 'batch parsing' do
6
- it 'should have a class method HL7::Message.parse_batch' do
7
- expect(HL7::Message).to respond_to(:parse_batch)
8
- end
9
-
10
- it 'should raise an exception when parsing an empty batch' do
11
- # :empty_batch message contains a valid batch envelope with no
12
- # contents
13
- expect do
14
- HL7::Message.parse_batch HL7MESSAGES[:empty_batch]
15
- end.to raise_exception(HL7::ParseError, 'empty_batch_message')
16
- end
17
-
18
- it 'should raise an exception when parsing a single message as a batch' do
19
- expect do
20
- HL7::Message.parse_batch HL7MESSAGES[:realm_minimal_message]
21
- end.to raise_exception(HL7::ParseError, 'badly_formed_batch_message')
22
- end
23
-
24
- it 'should yield multiple messages from a valid batch' do
25
- count = 0
26
- HL7::Message.parse_batch(HL7MESSAGES[:realm_batch]) do |m|
27
- count += 1
28
- end
29
- expect(count).to eq 2
30
- end
31
- end
32
- end
33
-
34
- describe 'String extension' do
35
- before :all do
36
- @batch_message = HL7MESSAGES[:realm_batch]
37
- @plain_message = HL7MESSAGES[:realm_minimal_message]
38
- end
39
-
40
- it 'should respond_to :hl7_batch?' do
41
- expect(@batch_message.hl7_batch?).to be true
42
- expect(@plain_message).to respond_to(:hl7_batch?)
43
- end
44
-
45
- it 'should return true when passed a batch message' do
46
- expect(@batch_message).to be_an_hl7_batch
47
- end
48
-
49
- it 'should return false when passed a plain message' do
50
- expect(@plain_message).not_to be_an_hl7_batch
51
- end
52
- end
@@ -1,66 +0,0 @@
1
- # encoding: UTF-8
2
- require 'spec_helper'
3
-
4
- describe HL7::Message do
5
- context 'child segments' do
6
- before :all do
7
- @base = open( './test_data/obxobr.hl7' ).readlines
8
- end
9
-
10
- it 'allows access to child segments' do
11
- msg = HL7::Message.new @base
12
- expect(msg).not_to be_nil
13
- expect(msg[:OBR]).not_to be_nil
14
- expect(msg[:OBR].length).to eq 3
15
- expect(msg[:OBR][0].children).not_to be_nil
16
- expect(msg[:OBR][0].children.length).to eq 6
17
- expect(msg[:OBR][1].children).not_to be_nil
18
- expect(msg[:OBR][1].children.length).to eq 3
19
- expect(msg[:OBR][2].children).not_to be_nil
20
- expect(msg[:OBR][2].children.length).to eq 1
21
- expect(msg[:OBX][0].children).not_to be_nil
22
- expect(msg[:OBX][0].children.length).to eq 1
23
-
24
- msg[:OBR][0].children.each do |x|
25
- expect(x).not_to be_nil
26
- end
27
- msg[:OBR][1].children.each do |x|
28
- expect(x).not_to be_nil
29
- end
30
- msg[:OBR][2].children.each do |x|
31
- expect(x).not_to be_nil
32
- end
33
- end
34
-
35
- it 'allows adding child segments' do
36
- msg = HL7::Message.new @base
37
- expect(msg).not_to be_nil
38
- expect(msg[:OBR]).not_to be_nil
39
- ob = HL7::Message::Segment::OBR.new
40
- expect(ob).not_to be_nil
41
-
42
- msg << ob
43
- expect(ob.children).not_to be_nil
44
- expect(ob.segment_parent).not_to be_nil
45
- expect(ob.segment_parent).to eq msg
46
- orig_cnt = msg.length
47
-
48
- (1..4).each do |x|
49
- m = HL7::Message::Segment::OBX.new
50
- m.observation_value = "taco"
51
- expect(m).not_to be_nil
52
- expect(/taco/.match(m.to_s)).not_to be_nil
53
- ob.children << m
54
- expect(ob.children.length).to eq x
55
- expect(m.segment_parent).not_to be_nil
56
- expect(m.segment_parent).to eq ob
57
- end
58
-
59
- expect(@base).not_to eq msg.to_hl7
60
- expect(msg.length).not_to eq orig_cnt
61
- text_ver = msg.to_hl7
62
- expect(/taco/.match(text_ver)).not_to be_nil
63
- end
64
- end
65
- end
66
-
@@ -1,43 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Date do
4
-
5
- subject{ Date.parse('2013-12-02').to_hl7 }
6
-
7
- it "should respond to the HL7 timestamp" do
8
- expect(subject).to eq "20131202"
9
- end
10
- end
11
-
12
- describe "to_hl7 for time related classes" do
13
-
14
- let(:formated_time){ time_now.strftime('%Y%m%d%H%M%S') }
15
- let(:fraction_3){ "." + sprintf('%06d', time_now.to_time.usec)[0, 3] }
16
- let(:fraction_9){ "." + sprintf('%06d', time_now.to_time.usec) + ("0" * 3) }
17
-
18
- shared_examples "a time to_hl7" do
19
- context "without fraction" do
20
- it { expect(time_now.to_time.to_hl7).to eq formated_time }
21
- end
22
-
23
- context "with_fraction" do
24
- it { expect(time_now.to_time.to_hl7(3)).to eq formated_time + fraction_3 }
25
-
26
- it { expect(time_now.to_time.to_hl7(9)).to eq formated_time + fraction_9 }
27
- end
28
- end
29
-
30
- describe Time do
31
- let(:time_now){ Time.now }
32
-
33
- it_should_behave_like "a time to_hl7"
34
- end
35
-
36
- describe DateTime do
37
- let(:time_now){ DateTime.now }
38
-
39
- it_should_behave_like "a time to_hl7"
40
- end
41
-
42
- end
43
-