fhir_models 4.0.1 → 4.0.2

Sign up to get free protection for your applications and to get access to all the features.
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