fhir_models 4.0.1 → 4.0.2

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
  SHA256:
3
- metadata.gz: b72e1905c3a6221d1a82cbc30d2549d26b9a5ff56196734ddf19b0f6977bb761
4
- data.tar.gz: 63863939853fa9990d3971159c4e7ed4e0db0ecec65c1c8f24fd36fbb875b720
3
+ metadata.gz: a2b2f1ce045f2f9bd1c15b6768091ca4c754997f6af10485428d23a85bf7a433
4
+ data.tar.gz: 17f3457b9d076f56ee03de4494736ac2df7081b876ec7dc2a5e753259a186751
5
5
  SHA512:
6
- metadata.gz: 3022063d4d648689d84f27cebeb955120378d6035b9069aa5d2c6eb542c3bcaa225da95942a36c24d8ec8d951112dda79b3685ca16349006f2a53960a86fd6cd
7
- data.tar.gz: 52888e9be05d16c3ac54fb562797fc8eb8a44cc7c62931c54117e45e9813d2ab1e7036bf0937bb9073ef7d19880c303ee26a3bab6f9428c6de1895bcd7ffd35b
6
+ metadata.gz: df265c49e13ba86273cdad361299bddd927d4256115bd8d0f654663d79b59f80de9fc3263df75f3ff9f6bd64f973648b7d1d19085415d26225f0f890103a4ab7
7
+ data.tar.gz: 054f76a7de1a789353ff47a3c8feab7cf34a8c8bc9a5693468eee2e3a7c94318e4bc8397dd0b4dd5250670abcb2d34e839760459270078840d1970efb555e299
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2019-04-22 22:20:52 -0400 using RuboCop version 0.67.0.
3
+ # on 2019-07-01 12:11:28 -0400 using RuboCop version 0.67.2.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
@@ -43,9 +43,9 @@ Metrics/AbcSize:
43
43
  # Configuration parameters: CountComments, ExcludedMethods.
44
44
  # ExcludedMethods: refine
45
45
  Metrics/BlockLength:
46
- Max: 74
46
+ Max: 78
47
47
 
48
- # Offense count: 8
48
+ # Offense count: 10
49
49
  # Configuration parameters: CountBlocks.
50
50
  Metrics/BlockNesting:
51
51
  Max: 5
@@ -53,7 +53,7 @@ Metrics/BlockNesting:
53
53
  # Offense count: 7
54
54
  # Configuration parameters: CountComments.
55
55
  Metrics/ClassLength:
56
- Max: 354
56
+ Max: 358
57
57
 
58
58
  # Offense count: 23
59
59
  Metrics/CyclomaticComplexity:
@@ -62,7 +62,7 @@ Metrics/CyclomaticComplexity:
62
62
  # Offense count: 44
63
63
  # Configuration parameters: CountComments, ExcludedMethods.
64
64
  Metrics/MethodLength:
65
- Max: 131
65
+ Max: 135
66
66
 
67
67
  # Offense count: 2
68
68
  # Configuration parameters: CountComments.
@@ -73,15 +73,11 @@ Metrics/ModuleLength:
73
73
  Metrics/PerceivedComplexity:
74
74
  Max: 68
75
75
 
76
- # Offense count: 5
76
+ # Offense count: 1
77
77
  # Configuration parameters: PreferredName.
78
78
  Naming/RescuedExceptionsVariableName:
79
79
  Exclude:
80
80
  - 'lib/fhir_models/bootstrap/hashable.rb'
81
- - 'lib/fhir_models/bootstrap/json.rb'
82
- - 'lib/fhir_models/bootstrap/xml.rb'
83
- - 'lib/fhir_models/fhir_ext/structure_definition.rb'
84
- - 'lib/fhir_models/fhir_ext/structure_definition_finding.rb'
85
81
 
86
82
  # Offense count: 4
87
83
  # Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames.
@@ -140,7 +136,7 @@ Style/Documentation:
140
136
  - 'lib/fhir_models/fluentpath/expression.rb'
141
137
  - 'lib/fhir_models/fluentpath/parse.rb'
142
138
 
143
- # Offense count: 29
139
+ # Offense count: 28
144
140
  # Cop supports --auto-correct.
145
141
  Style/IfUnlessModifier:
146
142
  Exclude:
@@ -202,7 +198,7 @@ Style/RescueStandardError:
202
198
  - 'lib/fhir_models/fluentpath/expression.rb'
203
199
  - 'lib/fhir_models/fluentpath/parse.rb'
204
200
 
205
- # Offense count: 6
201
+ # Offense count: 4
206
202
  # Cop supports --auto-correct.
207
203
  # Configuration parameters: ConvertCodeThatCanStartToReturnNil, Whitelist.
208
204
  # Whitelist: present?, blank?, presence, try, try!
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fhir_models (4.0.1)
4
+ fhir_models (4.0.2)
5
5
  bcp47 (>= 0.3)
6
6
  date_time_precision (>= 0.8)
7
7
  mime-types (>= 3.0)
@@ -68,13 +68,7 @@ module FHIR
68
68
  if !klass.nil? && !value.nil?
69
69
  # handle array of objects
70
70
  if value.is_a?(Array)
71
- value = value.map do |child|
72
- obj = child
73
- unless [FHIR::RESOURCES, FHIR::TYPES].flatten.include? child.class.name.gsub('FHIR::', '')
74
- obj = make_child(child, klass)
75
- end
76
- obj
77
- end
71
+ value = value.map { |child| make_child(child, klass) }
78
72
  else # handle single object
79
73
  value = make_child(value, klass)
80
74
  # if there is only one of these, but cardinality allows more, we need to wrap it in an array.
@@ -99,6 +93,8 @@ module FHIR
99
93
  end
100
94
 
101
95
  def make_child(child, klass)
96
+ return child if child.is_a?(FHIR::Model)
97
+
102
98
  if child['resourceType'] && !klass::METADATA['resourceType']
103
99
  klass = begin
104
100
  FHIR.const_get(child['resourceType'])
@@ -112,7 +108,6 @@ module FHIR
112
108
  begin
113
109
  obj = klass.new(child)
114
110
  rescue => exception
115
- # TODO: this appears to be a dead code branch
116
111
  # TODO: should this re-raise the exception if encountered instead of silently swallowing it?
117
112
  FHIR.logger.error("Unable to inflate embedded class #{klass}\n#{exception.backtrace}")
118
113
  end
@@ -1,3 +1,5 @@
1
+ require 'json'
2
+
1
3
  module FHIR
2
4
  module Json
3
5
  #
@@ -15,8 +17,8 @@ module FHIR
15
17
  resource_type = hash['resourceType']
16
18
  klass = Module.const_get("FHIR::#{resource_type}")
17
19
  resource = klass.new(hash)
18
- rescue => e
19
- FHIR.logger.error("Failed to deserialize JSON:\n#{e.backtrace}")
20
+ rescue => ex
21
+ FHIR.logger.error("Failed to deserialize JSON:\n#{ex.backtrace}")
20
22
  FHIR.logger.debug("JSON:\n#{json}")
21
23
  resource = nil
22
24
  end
@@ -78,8 +78,8 @@ module FHIR
78
78
  resource_type = doc.root.name
79
79
  klass = Module.const_get("FHIR::#{resource_type}")
80
80
  resource = klass.new(hash)
81
- rescue => e
82
- FHIR.logger.error("Failed to deserialize XML:\n#{e.backtrace}")
81
+ rescue => ex
82
+ FHIR.logger.error("Failed to deserialize XML:\n#{ex.backtrace}")
83
83
  FHIR.logger.debug("XML:\n#{xml}")
84
84
  resource = nil
85
85
  end
@@ -59,8 +59,8 @@ module FHIR
59
59
  if json.is_a? String
60
60
  begin
61
61
  json = JSON.parse(json)
62
- rescue => e
63
- @errors << "Failed to parse JSON: #{e.message} %n #{h} %n #{e.backtrace.join("\n")}"
62
+ rescue => ex
63
+ @errors << "Failed to parse JSON: #{ex.message} %n #{h} %n #{ex.backtrace.join("\n")}"
64
64
  return false
65
65
  end
66
66
  end
@@ -198,38 +198,49 @@ module FHIR
198
198
  matching_pattern = true if vcoding.system == pcoding.system && vcoding.code == pcoding.code
199
199
  end
200
200
  end
201
- elsif data_type_found == 'CodeableConcept' && codeable_concept_binding
202
- binding_issues =
203
- if element.binding.strength == 'extensible'
204
- @warnings
205
- elsif element.binding.strength == 'required'
206
- @errors
207
- else # e.g., example-strength or unspecified
208
- [] # Drop issues errors on the floor, in throwaway array
209
- end
201
+ elsif %w[CodeableConcept Coding Quantity].include? data_type_found
202
+ required_strength = element&.binding&.strength == 'required'
203
+ binding_issues = required_strength ? @errors : @warnings
210
204
 
211
- valueset_uri = element.binding && element.binding.valueSet
212
- if valueset_uri.include?('|')
205
+ valueset_uri = element&.binding&.valueSet
206
+ if valueset_uri&.include?('|')
213
207
  x = valueset_uri.index('|')
214
208
  valueset_uri = valueset_uri[0..x - 1]
215
209
  end
216
- vcc = FHIR::CodeableConcept.new(value)
217
- if valueset_uri && self.class.vs_validators[valueset_uri]
210
+ check_code = lambda do |coding|
211
+ # Can't validate if both code and system are not given
212
+ if coding['code'].nil? || coding['system'].nil?
213
+ @warnings << "#{describe_element(element)} code: #{coding.to_json} missing code" if coding['code'].nil?
214
+ @warnings << "#{describe_element(element)} code: #{coding.to_json} missing system" if coding['system'].nil?
215
+ return
216
+ end
217
+
218
+ # ValueSet Validation
218
219
  check_fn = self.class.vs_validators[valueset_uri]
219
- has_valid_code = vcc.coding && vcc.coding.any? { |c| check_fn.call(c) }
220
+ has_valid_code = false
221
+ if check_fn
222
+ has_valid_code = check_fn.call(coding)
223
+ binding_issues << "#{describe_element(element)} has no codings from #{valueset_uri}. Codings evaluated: #{coding.to_json}" unless has_valid_code
224
+ end
225
+
226
+ # CodeSystem Validation
220
227
  unless has_valid_code
221
- binding_issues << "#{describe_element(element)} has no codings from #{valueset_uri}. Codings evaluated: #{vcc.to_json}"
228
+ check_fn = self.class.vs_validators[coding['system']]
229
+ if check_fn && !check_fn.call(coding)
230
+ binding_issues << "#{describe_element(element)} has no codings from it's specified system: #{coding['system']}. "\
231
+ "Codings evaluated: #{coding.to_json}"
232
+ end
222
233
  end
223
234
  end
224
235
 
225
- unless has_valid_code
226
- vcc.coding.each do |c|
227
- check_fn = self.class.vs_validators[c.system]
228
- if check_fn && !check_fn.call(c)
229
- binding_issues << "#{describe_element(element)} has no codings from it's specified system: #{c.system}. "\
230
- "Codings evaluated: #{vcc.to_json}"
231
- end
236
+ if data_type_found == 'CodeableConcept'
237
+ value['coding']&.each do |coding|
238
+ check_code.call(coding)
232
239
  end
240
+ else
241
+ # avoid checking Codings twice if they are already checked as part of a CodeableConcept
242
+ # The CodeableConcept should contain the binding for the children Codings
243
+ check_code.call(value) unless element.path == 'CodeableConcept.coding'
233
244
  end
234
245
 
235
246
  elsif data_type_found == 'String' && !element.maxLength.nil? && (value.size > element.maxLength)
@@ -30,8 +30,8 @@ module FHIR
30
30
  hash.each do |key, value|
31
31
  obj.send("#{key}=".to_sym, value) if value
32
32
  end
33
- rescue => e
34
- FHIR.logger.error "Failed to parse JSON: #{e.message}"
33
+ rescue => ex
34
+ FHIR.logger.error "Failed to parse JSON: #{ex.message}"
35
35
  return nil
36
36
  end
37
37
  end
@@ -1,5 +1,5 @@
1
1
  module FHIR
2
2
  module Models
3
- VERSION = '4.0.1'.freeze
3
+ VERSION = '4.0.2'.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: 4.0.1
4
+ version: 4.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Walonoski
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: exe
14
14
  cert_chain: []
15
- date: 2019-08-26 00:00:00.000000000 Z
15
+ date: 2019-09-27 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: nokogiri