Class: Inferno::DSL::FHIREvaluation::Rules::AllExtensionsUsed
- Inherits:
-
Inferno::DSL::FHIREvaluation::Rule
- Object
- Inferno::DSL::FHIREvaluation::Rule
- Inferno::DSL::FHIREvaluation::Rules::AllExtensionsUsed
- Defined in:
- lib/inferno/dsl/fhir_evaluation/rules/all_extensions_used.rb
Instance Method Summary collapse
-
#check(context) ⇒ Object
-
#collect_profile_extensions(profiles) ⇒ Object
-
#get_fail_message(extensions) ⇒ Object
-
#remove_found_resource_extensions(extensions, examples) ⇒ Object
rubocop:disable Metrics/CyclomaticComplexity.
-
#update_unused_extensions(profiles, value, unused_extensions, extensions) ⇒ Object
rubocop:enable Metrics/CyclomaticComplexity.
Instance Method Details
#check(context) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/inferno/dsl/fhir_evaluation/rules/all_extensions_used.rb', line 8 def check(context) all_extensions = collect_profile_extensions(context.ig.profiles) unused_extensions = remove_found_resource_extensions(all_extensions, context.data) if unused_extensions.any? { |_profile, extensions| !extensions.empty? } = (unused_extensions) result = EvaluationResult.new(, rule: self) else = 'All extensions specified in profiles are represented in instances.' result = EvaluationResult.new(, severity: 'success', rule: self) end context.add_result result end |
#collect_profile_extensions(profiles) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/inferno/dsl/fhir_evaluation/rules/all_extensions_used.rb', line 22 def collect_profile_extensions(profiles) extensions = Hash.new { |extension, profile| extension[profile] = Set.new } profiles.each do |profile| profile.each_element do |value, | next unless ['type'] == 'ElementDefinition' path_end = value.id.split('.')[-1] next unless path_end.include?('extension') value.type.each do |element_definition| element_definition.profile.each do |extension_url| extensions[profile.url].add(extension_url) end end end end extensions end |
#get_fail_message(extensions) ⇒ Object
65 66 67 68 69 70 71 |
# File 'lib/inferno/dsl/fhir_evaluation/rules/all_extensions_used.rb', line 65 def (extensions) = 'Found extensions specified in profiles, but not used in instances:' extensions.each do |profile, extension| += "\n Profile: #{profile}, \n\tExtensions: #{extension.join(', ')}" unless extension.empty? end end |
#remove_found_resource_extensions(extensions, examples) ⇒ Object
rubocop:disable Metrics/CyclomaticComplexity
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/inferno/dsl/fhir_evaluation/rules/all_extensions_used.rb', line 42 def remove_found_resource_extensions(extensions, examples) unused_extensions = extensions.dup examples.each do |resource| resource.each_element do |value, , path| path_elements = path.split('.') next unless path_elements.length > 1 next unless path_elements[-2].include?('extension') && path_elements[-1] == 'url' profiles = resource&.&.profile || [] update_unused_extensions(profiles, value, unused_extensions, extensions) end end unused_extensions end |
#update_unused_extensions(profiles, value, unused_extensions, extensions) ⇒ Object
rubocop:enable Metrics/CyclomaticComplexity
59 60 61 62 63 |
# File 'lib/inferno/dsl/fhir_evaluation/rules/all_extensions_used.rb', line 59 def update_unused_extensions(profiles, value, unused_extensions, extensions) profiles.each do |profile| unused_extensions[profile].delete(value) if extensions.key?(profile) end end |