fhir_models 1.6.4 → 1.6.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f89ba6a33ad77f32f671ea353426b6e0f2e5e9c8
4
- data.tar.gz: 348c0ac6566160061a8ecea33defd3485ea7ef6a
3
+ metadata.gz: d8d5ba026745d19e4eab57461d9df5dbf731b540
4
+ data.tar.gz: b5acd0da79199bb9ea202c56674b065f7ce94432
5
5
  SHA512:
6
- metadata.gz: 5404719231935514e1d38a67b6858353313fe5da2994ff6c19b3be590a249b84fe850d45bf3a87bfd288280d2c3ee3ae9d0320a1309d13c9303e884f77f6d38f
7
- data.tar.gz: 8aa770cc117faff9e3c3f2c2b3ce8506f89edd2f24026cf3050d1e0db45a12969262e6286b7bf918df5d182856be214a685c15a8480763dcbfad6df469909d15
6
+ metadata.gz: e40b0e89ced0a5de56edcc4e637f99e3fa94abb3ccd6574398f34f3341075dfb807b6535ecbb0a317387dc22e3dde418a06a4c70264e347c02a12cb4570ff630
7
+ data.tar.gz: 589812ea7e6f30e2136c4270a895cef564e7775e12d2d0bc51109f9c16c9a0da4f48a4eb3ece0958f9f5533289653891bd210dee85fab687e487d4ded6bd1162
data/.rubocop.yml CHANGED
@@ -3,6 +3,8 @@ AllCops:
3
3
  Exclude:
4
4
  - 'test/**/*'
5
5
  - 'lib/fhir_models/fhir/**/*'
6
+ - 'lib/fhir_models/fluentpath/evaluate.rb'
7
+ - 'tmp/**/*'
6
8
 
7
9
  #################### Lint ################################
8
10
 
data/Rakefile CHANGED
@@ -19,6 +19,8 @@ task :rubocop do
19
19
  RuboCop::RakeTask.new
20
20
  end
21
21
 
22
- task default: [:test, :rubocop] do
22
+ task test: [:rubocop] do
23
23
  system('open coverage/index.html')
24
24
  end
25
+
26
+ task default: [:test]
data/bin/console CHANGED
@@ -7,8 +7,8 @@ require 'fhir_models'
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
9
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
10
+ require 'pry'
11
+ Pry.start
12
12
 
13
- require 'irb'
14
- IRB.start
13
+ # require 'irb'
14
+ # IRB.start
data/lib/fhir_models.rb CHANGED
@@ -15,6 +15,7 @@ Dir.chdir('lib') do
15
15
 
16
16
  require_relative 'fhir_models/fhir'
17
17
 
18
+ require_relative 'fhir_models/fhir/metadata'
18
19
  # require generated models
19
20
  Dir['fhir_models/fhir/**/*.rb'].each do |file|
20
21
  require_relative file
@@ -50,27 +50,12 @@ module FHIR
50
50
  value.map! do |child|
51
51
  obj = child
52
52
  unless [FHIR::RESOURCES, FHIR::TYPES].flatten.include? child.class.name.gsub('FHIR::', '')
53
- if child['resourceType']
54
- klass = Module.const_get("FHIR::#{child['resourceType']}") rescue nil
55
- end
56
- begin
57
- obj = klass.new(child)
58
- rescue => e
59
- FHIR.logger.error("Unable to inflate embedded class #{klass}\n#{e.backtrace}")
60
- end
53
+ obj = make_child(child, klass)
61
54
  end
62
55
  obj
63
56
  end
64
57
  else # handle single object
65
- if value['resourceType']
66
- klass = Module.const_get("FHIR::#{value['resourceType']}") rescue nil
67
- end
68
- begin
69
- obj = klass.new(value)
70
- value = obj
71
- rescue => e
72
- FHIR.logger.error("Unable to inflate embedded class #{klass}\n#{e.backtrace}")
73
- end
58
+ value = make_child(value, klass)
74
59
  # if there is only one of these, but cardinality allows more, we need to wrap it in an array.
75
60
  value = [ value ] if(value && (meta['max'] > 1))
76
61
  end
@@ -96,6 +81,18 @@ module FHIR
96
81
  self
97
82
  end
98
83
 
84
+ def make_child(child, klass)
85
+ if child['resourceType']
86
+ klass = Module.const_get("FHIR::#{child['resourceType']}") rescue nil
87
+ end
88
+ begin
89
+ obj = klass.new(child)
90
+ rescue => e
91
+ FHIR.logger.error("Unable to inflate embedded class #{klass}\n#{e.backtrace}")
92
+ end
93
+ obj
94
+ end
95
+
99
96
  def convert_primitive(value, meta)
100
97
  return value if !value.is_a?(String)
101
98
 
@@ -117,6 +114,6 @@ module FHIR
117
114
  rval
118
115
  end
119
116
 
120
- private :convert_primitive
117
+ private :make_child, :convert_primitive
121
118
  end
122
119
  end
@@ -52,7 +52,7 @@ module FHIR
52
52
  end
53
53
 
54
54
  def to_reference
55
- FHIR::Reference.new(reference: "#{self.class.name.demodulize}/#{self.id}")
55
+ FHIR::Reference.new(reference: "#{self.class.name.split('::').last}/#{self.id}")
56
56
  end
57
57
 
58
58
  def equals?(other, exclude=[])
@@ -185,32 +185,7 @@ module FHIR
185
185
  if klassname=='Reference'
186
186
  validation = v.validate(contained_here)
187
187
  errors[field] << validation if !validation.empty?
188
- if v.reference && meta['type_profiles']
189
- matches_one_profile = false
190
- meta['type_profiles'].each do |p|
191
- basetype = p.split('/').last
192
- matches_one_profile = true if v.reference.include?(basetype)
193
- # check profiled resources
194
- profile_basetype = FHIR::Definitions.get_basetype(p)
195
- matches_one_profile = true if profile_basetype && v.reference.include?(profile_basetype)
196
- end
197
- matches_one_profile = true if meta['type_profiles'].include?('http://hl7.org/fhir/StructureDefinition/Resource')
198
- if !matches_one_profile && v.reference.start_with?('#')
199
- # we need to look at the local contained resources
200
- begin
201
- r = contained_here.select{|x|x.id==v.reference[1..-1]}.first
202
- rescue
203
- FHIR.logger.warn "Unable to resolve reference #{v.reference}"
204
- end
205
- if !r.nil?
206
- meta['type_profiles'].each do |p|
207
- p = p.split('/').last
208
- matches_one_profile = true if r.resourceType==p
209
- end
210
- end
211
- end
212
- errors[field] << "#{meta['path']}: incorrect Reference type, expected #{meta['type_profiles'].map{|x|x.split('/').last}.join('|')}" if !matches_one_profile
213
- end
188
+ validate_reference_type(v, meta, contained_here, errors[field])
214
189
  else
215
190
  errors[field] << "#{meta['path']}: expected Reference, found #{klassname}"
216
191
  end
@@ -260,6 +235,33 @@ module FHIR
260
235
  errors.delete(field) if errors[field].empty?
261
236
  end
262
237
 
238
+ def validate_reference_type(ref, meta, contained_here, errors)
239
+ if ref.reference && meta['type_profiles']
240
+ matches_one_profile = false
241
+ meta['type_profiles'].each do |p|
242
+ basetype = p.split('/').last
243
+ matches_one_profile = true if ref.reference.include?(basetype)
244
+ # check profiled resources
245
+ profile_basetype = FHIR::Definitions.get_basetype(p)
246
+ matches_one_profile = true if profile_basetype && ref.reference.include?(profile_basetype)
247
+ end
248
+ matches_one_profile = true if meta['type_profiles'].include?('http://hl7.org/fhir/StructureDefinition/Resource')
249
+ if !matches_one_profile && ref.reference.start_with?('#')
250
+ # we need to look at the local contained resources
251
+ r = contained_here.find{|x|x.id==ref.reference[1..-1]}
252
+ if !r.nil?
253
+ meta['type_profiles'].each do |p|
254
+ p = p.split('/').last
255
+ matches_one_profile = true if r.resourceType==p
256
+ end
257
+ else
258
+ FHIR.logger.warn "Unable to resolve reference #{ref.reference}"
259
+ end
260
+ end
261
+ errors << "#{meta['path']}: incorrect Reference type, expected #{meta['type_profiles'].map{|x|x.split('/').last}.join('|')}" if !matches_one_profile
262
+ end
263
+ end
264
+
263
265
  def is_primitive?(datatype, value)
264
266
  # Remaining data types: handle special cases before checking type StructureDefinitions
265
267
  case datatype.downcase
@@ -299,16 +301,16 @@ module FHIR
299
301
  json_or_xml = value.downcase.include?('xml') || value.downcase.include?('json')
300
302
  known_weird = ['application/cql+text'].include?(value)
301
303
  valid = json_or_xml || known_weird || (!matches.nil? && !matches.empty?)
302
- elsif uri=='http://tools.ietf.org/html/bcp47'
303
- hasRegion = (!(value =~ /-/).nil?)
304
- valid = !BCP47::Language.identify(value.downcase).nil? && (!hasRegion || !BCP47::Region.identify(value.upcase).nil?)
304
+ elsif uri=='http://hl7.org/fhir/ValueSet/languages' || uri=='http://tools.ietf.org/html/bcp47'
305
+ has_region = (!(value =~ /-/).nil?)
306
+ valid = !BCP47::Language.identify(value.downcase).nil? && (!has_region || !BCP47::Region.identify(value.upcase).nil?)
305
307
  else
306
308
  FHIR.logger.warn "Unable to check_binding on unknown ValueSet: #{uri}"
307
309
  end
308
310
  valid
309
311
  end
310
312
 
311
- private :is_primitive?, :check_binding, :validate_field
313
+ private :validate_reference_type, :is_primitive?, :check_binding, :validate_field
312
314
 
313
315
  end
314
316
  end
@@ -412,10 +412,10 @@ module FHIR
412
412
  end
413
413
 
414
414
  resource_type = json['resourceType']
415
- baseType = snapshot.element[0].path
415
+ base_type = snapshot.element[0].path
416
416
  snapshot.element.each do |element|
417
417
  path = element.path
418
- path = path[(baseType.size+1)..-1] if path.start_with? baseType
418
+ path = path[(base_type.size+1)..-1] if path.start_with? base_type
419
419
 
420
420
  nodes = get_json_nodes(json, path)
421
421
 
@@ -546,18 +546,18 @@ module FHIR
546
546
  if FHIR::RESOURCES.include?(data_type_code)
547
547
  definition = FHIR::Definitions.get_resource_definition(data_type_code)
548
548
  if !definition.nil?
549
- retVal = false
549
+ ret_val = false
550
550
  begin
551
551
  klass = Module.const_get("FHIR::#{data_type_code}")
552
- retVal = definition.validates_resource?(klass.new(deep_copy(value)))
553
- if !retVal
552
+ ret_val = definition.validates_resource?(klass.new(deep_copy(value)))
553
+ if !ret_val
554
554
  @errors += definition.errors
555
555
  @warnings += definition.warnings
556
556
  end
557
557
  rescue
558
558
  @errors << "Unable to verify #{data_type_code} as a FHIR Resource."
559
559
  end
560
- return retVal
560
+ return ret_val
561
561
  end
562
562
  end
563
563
 
@@ -615,18 +615,18 @@ module FHIR
615
615
  resource_type = value['resourceType']
616
616
  definition = FHIR::Definitions.get_resource_definition(resource_type)
617
617
  if !definition.nil?
618
- retVal = false
618
+ ret_val = false
619
619
  begin
620
620
  klass = Module.const_get("FHIR::#{resource_type}")
621
- retVal = definition.validates_resource?(klass.new(deep_copy(value)))
622
- if !retVal
621
+ ret_val = definition.validates_resource?(klass.new(deep_copy(value)))
622
+ if !ret_val
623
623
  @errors += definition.errors
624
624
  @warnings += definition.warnings
625
625
  end
626
626
  rescue
627
627
  @errors << "Unable to verify #{resource_type} as a FHIR Resource."
628
628
  end
629
- retVal
629
+ ret_val
630
630
  else
631
631
  @errors << "Unable to find base Resource definition: #{resource_type}"
632
632
  false
@@ -638,18 +638,18 @@ module FHIR
638
638
  definition = FHIR::Definitions.get_type_definition(data_type_code)
639
639
  definition = FHIR::Definitions.get_resource_definition(data_type_code) if definition.nil?
640
640
  if !definition.nil?
641
- retVal = false
641
+ ret_val = false
642
642
  begin
643
643
  klass = Module.const_get("FHIR::#{data_type_code}")
644
- retVal = definition.validates_resource?(klass.new(deep_copy(value)))
645
- if !retVal
644
+ ret_val = definition.validates_resource?(klass.new(deep_copy(value)))
645
+ if !ret_val
646
646
  @errors += definition.errors
647
647
  @warnings += definition.warnings
648
648
  end
649
649
  rescue
650
650
  @errors << "Unable to verify #{data_type_code} as a FHIR type."
651
651
  end
652
- retVal
652
+ ret_val
653
653
  else
654
654
  @errors << "Unable to find base type definition: #{data_type_code}"
655
655
  false
@@ -659,26 +659,26 @@ module FHIR
659
659
 
660
660
  def check_binding(element, value)
661
661
 
662
- vsUri = element.binding.valueSetUri || element.binding.valueSetReference.reference
663
- valueset = FHIR::Definitions.get_codes(vsUri)
662
+ vs_uri = element.binding.valueSetUri || element.binding.valueSetReference.reference
663
+ valueset = FHIR::Definitions.get_codes(vs_uri)
664
664
 
665
665
  matching_type = 0
666
666
 
667
- if vsUri=='http://hl7.org/fhir/ValueSet/content-type' || vsUri=='http://www.rfc-editor.org/bcp/bcp13.txt'
667
+ if vs_uri=='http://hl7.org/fhir/ValueSet/content-type' || vs_uri=='http://www.rfc-editor.org/bcp/bcp13.txt'
668
668
  matches = MIME::Types[value]
669
669
  if (matches.nil? || matches.size==0) && !is_some_type_of_xml_or_json(value)
670
670
  @errors << "#{element.path} has invalid mime-type: '#{value}'"
671
671
  matching_type-=1 if element.binding.strength=='required'
672
672
  end
673
- elsif vsUri=='http://tools.ietf.org/html/bcp47'
674
- hasRegion = (!(value =~ /-/).nil?)
675
- valid = !BCP47::Language.identify(value.downcase).nil? && (!hasRegion || !BCP47::Region.identify(value.upcase).nil?)
673
+ elsif vs_uri=='http://hl7.org/fhir/ValueSet/languages' || vs_uri=='http://tools.ietf.org/html/bcp47'
674
+ has_region = (!(value =~ /-/).nil?)
675
+ valid = !BCP47::Language.identify(value.downcase).nil? && (!has_region || !BCP47::Region.identify(value.upcase).nil?)
676
676
  if !valid
677
677
  @errors << "#{element.path} has unrecognized language: '#{value}'"
678
678
  matching_type-=1 if element.binding.strength=='required'
679
679
  end
680
680
  elsif valueset.nil?
681
- @warnings << "#{element.path} has unknown ValueSet: '#{vsUri}'"
681
+ @warnings << "#{element.path} has unknown ValueSet: '#{vs_uri}'"
682
682
  matching_type-=1 if element.binding.strength=='required'
683
683
  elsif !valueset.values.flatten.include?(value)
684
684
  message = "#{element.path} has invalid code '#{value}' from #{valueset}"
@@ -42,25 +42,25 @@ module FHIR
42
42
  from_json(to_json)
43
43
  end
44
44
 
45
- def warning(path, attribute, message, valueA, valueB)
45
+ def warning(path, attribute, message, value_a, value_b)
46
46
  obj = clone
47
47
  obj.status = 'WARNING'
48
48
  obj.path = path
49
49
  obj.attribute = attribute
50
50
  obj.message = message
51
- obj.valueA = valueA
52
- obj.valueB = valueB
51
+ obj.valueA = value_a
52
+ obj.valueB = value_b
53
53
  obj
54
54
  end
55
55
 
56
- def error(path, attribute, message, valueA, valueB)
56
+ def error(path, attribute, message, value_a, value_b)
57
57
  obj = clone
58
58
  obj.status = 'ERROR'
59
59
  obj.path = path
60
60
  obj.attribute = attribute
61
61
  obj.message = message
62
- obj.valueA = valueA
63
- obj.valueB = valueB
62
+ obj.valueA = value_a
63
+ obj.valueB = value_b
64
64
  obj
65
65
  end
66
66
 
@@ -64,6 +64,10 @@ module FluentPath
64
64
  return true
65
65
  end
66
66
 
67
+ def self.clean_index(tree, index)
68
+ tree[index] = nil if !index.nil?
69
+ end
70
+
67
71
  # evaluate a parsed expression given some context data
68
72
  def self.compute(tree, data)
69
73
  tree = tree.tree if tree.is_a?(FluentPath::Expression)
@@ -104,7 +108,7 @@ module FluentPath
104
108
  end
105
109
  if previous_node.is_a?(Hash) || previous_node.is_a?(Array)
106
110
  tree[index] = get(node, previous_node)
107
- tree[previous_index] = nil if !previous_index.nil?
111
+ clean_index(tree, previous_index)
108
112
  elsif !previous_node.is_a?(FluentPath::Expression)
109
113
  tree[index] = get(node, data)
110
114
  end
@@ -131,16 +135,15 @@ module FluentPath
131
135
  convert_to_boolean(sub)
132
136
  end
133
137
  tree[index] = previous_node
134
- tree[previous_index] = nil if !previous_index.nil?
138
+ clean_index(tree, previous_index)
135
139
  elsif previous_node.is_a?(Hash)
136
140
  sub = compute(block, previous_node)
137
141
  if convert_to_boolean(sub)
138
142
  tree[index] = previous_node
139
- tree[previous_index] = nil if !previous_index.nil?
143
+ clean_index(tree, previous_index)
140
144
  else
141
145
  tree[index] = {}
142
- tree[previous_index] = nil if !previous_index.nil?
143
-
146
+ clean_index(tree, previous_index)
144
147
  end
145
148
  else
146
149
  raise "Where function not applicable to #{previous_node.class}: #{previous_node}"
@@ -162,10 +165,10 @@ module FluentPath
162
165
  compute(block.clone, item)
163
166
  end
164
167
  tree[index] = previous_node
165
- tree[previous_index] = nil if !previous_index.nil?
168
+ clean_index(tree, previous_index)
166
169
  elsif previous_node.is_a?(Hash)
167
170
  tree[index] = compute(block, previous_node)
168
- tree[previous_index] = nil if !previous_index.nil?
171
+ clean_index(tree, previous_index)
169
172
  else
170
173
  raise "Select function not applicable to #{previous_node.class}: #{previous_node}"
171
174
  end
@@ -191,7 +194,7 @@ module FluentPath
191
194
  end
192
195
  ext = exts.select{|x|x['url']==url}.first
193
196
  tree[index] = ext
194
- tree[previous_index] = nil if !previous_index.nil?
197
+ clean_index(tree, previous_index)
195
198
  else
196
199
  raise "Extension function not applicable to #{exts.class}: #{exts}"
197
200
  end
@@ -204,7 +207,7 @@ module FluentPath
204
207
  # otherwise, use the context as data
205
208
  if previous_node.is_a?(Hash)
206
209
  tree[index] = previous_node.values
207
- tree[previous_index] = nil if !previous_index.nil?
210
+ clean_index(tree, previous_index)
208
211
  substitutions+=1
209
212
  elsif data.is_a?(Hash)
210
213
  tree[index] = data.values
@@ -217,7 +220,7 @@ module FluentPath
217
220
  # the previous node should be an Array of length > 1
218
221
  if previous_node.is_a?(Array)
219
222
  tree[index] = previous_node.first
220
- tree[previous_index] = nil if !previous_index.nil?
223
+ clean_index(tree, previous_index)
221
224
  else
222
225
  raise "First function is not applicable to #{previous_node.class}: #{previous_node}"
223
226
  end
@@ -225,7 +228,7 @@ module FluentPath
225
228
  # the previous node should be an Array of length > 1
226
229
  if previous_node.is_a?(Array)
227
230
  tree[index] = previous_node.last
228
- tree[previous_index] = nil if !previous_index.nil?
231
+ clean_index(tree, previous_index)
229
232
  else
230
233
  raise "Last function is not applicable to #{previous_node.class}: #{previous_node}"
231
234
  end
@@ -233,7 +236,7 @@ module FluentPath
233
236
  # the previous node should be an Array of length > 1
234
237
  if previous_node.is_a?(Array)
235
238
  tree[index] = previous_node.last(previous_node.length-1)
236
- tree[previous_index] = nil if !previous_index.nil?
239
+ clean_index(tree, previous_index)
237
240
  else
238
241
  raise "Tail function is not applicable to #{previous_node.class}: #{previous_node}"
239
242
  end
@@ -268,28 +271,28 @@ module FluentPath
268
271
  result = true
269
272
  previous_node.each{|item| result = (result && convert_to_boolean(item))}
270
273
  tree[index] = result
271
- tree[previous_index] = nil if !previous_index.nil?
274
+ clean_index(tree, previous_index)
272
275
  else
273
276
  tree[index] = convert_to_boolean(previous_node)
274
- tree[previous_index] = nil if !previous_index.nil?
277
+ clean_index(tree, previous_index)
275
278
  end
276
279
  when :not
277
280
  tree[index] = !convert_to_boolean(previous_node)
278
- tree[previous_index] = nil if !previous_index.nil?
281
+ clean_index(tree, previous_index)
279
282
  when :count
280
283
  tree[index] = 0
281
284
  tree[index] = 1 if !previous_node.nil?
282
285
  tree[index] = previous_node.length if previous_node.is_a?(Array)
283
- tree[previous_index] = nil if !previous_index.nil?
286
+ clean_index(tree, previous_index)
284
287
  when :empty
285
288
  tree[index] = (previous_node==:null || previous_node.empty? rescue previous_node.nil?)
286
- tree[previous_index] = nil if !previous_index.nil?
289
+ clean_index(tree, previous_index)
287
290
  when :exists
288
291
  tree[index] = !previous_node.nil? && previous_node!=:null
289
- tree[previous_index] = nil if !previous_index.nil?
292
+ clean_index(tree, previous_index)
290
293
  when :distinct
291
294
  tree[index] = (previous_node.uniq rescue previous_node)
292
- tree[previous_index] = nil if !previous_index.nil?
295
+ clean_index(tree, previous_index)
293
296
  when :startsWith
294
297
  # the previous node should be a data (as String)
295
298
  # the next node should be a block or subexpression (as FluentPath::Expression)
@@ -303,7 +306,7 @@ module FluentPath
303
306
  FHIR.logger.debug 'Evaling StartsWith Block....'
304
307
  prefix = compute(block, data)
305
308
  tree[index] = previous_node.start_with?(prefix) rescue false
306
- tree[previous_index] = nil if !previous_index.nil?
309
+ clean_index(tree, previous_index)
307
310
  else
308
311
  raise "StartsWith function not applicable to #{previous_node.class}: #{previous_node}"
309
312
  end
@@ -331,7 +334,7 @@ module FluentPath
331
334
  length = previous_node.length - start
332
335
  end
333
336
  tree[index] = previous_node[start..(start+length)]
334
- tree[previous_index] = nil if !previous_index.nil?
337
+ clean_index(tree, previous_index)
335
338
  else
336
339
  raise "Substring function not applicable to #{previous_node.class}: #{previous_node}"
337
340
  end
@@ -349,7 +352,7 @@ module FluentPath
349
352
  FHIR.logger.debug 'Evaling Contains Block....'
350
353
  substring = compute(block, data)
351
354
  tree[index] = previous_node.include?(substring) rescue false
352
- tree[previous_index] = nil if !previous_index.nil?
355
+ clean_index(tree, previous_index)
353
356
  else
354
357
  raise "Contains function not applicable to #{previous_node.class}: #{previous_node}"
355
358
  end
@@ -370,7 +373,7 @@ module FluentPath
370
373
  end
371
374
  if previous_node.is_a?(String) || previous_node==true || previous_node==false || previous_node.is_a?(Numeric)
372
375
  tree[index] = array.include?(previous_node) rescue false
373
- tree[previous_index] = nil if !previous_index.nil?
376
+ clean_index(tree, previous_index)
374
377
  else
375
378
  raise "In function not applicable to #{previous_node.class}: #{previous_node}"
376
379
  end
@@ -385,7 +388,7 @@ module FluentPath
385
388
  tree[index] = 0
386
389
  tree[index] = 1 if convert_to_boolean(previous_node)
387
390
  end
388
- tree[previous_index] = nil if !previous_index.nil?
391
+ clean_index(tree, previous_index)
389
392
  break
390
393
  else
391
394
  raise "Function not implemented: #{node}"
@@ -100,8 +100,8 @@ namespace :fhir do
100
100
  d = FHIR::Definitions
101
101
  defs = d.get_complex_types + d.get_resource_definitions
102
102
  invariants = {}
103
- defs.each do |structureDef|
104
- structureDef['snapshot']['element'].each do |element|
103
+ defs.each do |structure_definition|
104
+ structure_definition['snapshot']['element'].each do |element|
105
105
  if element['constraint']
106
106
  element['constraint'].each do |constraint|
107
107
  if constraint['expression']
@@ -1,5 +1,5 @@
1
1
  module FHIR
2
2
  module Models
3
- VERSION = '1.6.4'.freeze
3
+ VERSION = '1.6.6'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fhir_models
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.4
4
+ version: 1.6.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Walonoski
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2016-10-10 00:00:00.000000000 Z
13
+ date: 2016-10-11 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri
@@ -1293,8 +1293,8 @@ files:
1293
1293
  - lib/fhir_models/fhir/types/Timing.rb
1294
1294
  - lib/fhir_models/fhir/types/TriggerDefinition.rb
1295
1295
  - lib/fhir_models/fhir/types/UsageContext.rb
1296
- - lib/fhir_models/fhir_ext/StructureDefinition.rb
1297
- - lib/fhir_models/fhir_ext/StructureDefinitionFinding.rb
1296
+ - lib/fhir_models/fhir_ext/structure_definition.rb
1297
+ - lib/fhir_models/fhir_ext/structure_definition_finding.rb
1298
1298
  - lib/fhir_models/fluentpath/evaluate.rb
1299
1299
  - lib/fhir_models/fluentpath/expression.rb
1300
1300
  - lib/fhir_models/fluentpath/parse.rb