Class: Inferno::DSL::FHIREvaluation::Rules::AllResourcesReachable
- Inherits:
-
Inferno::DSL::FHIREvaluation::Rule
- Object
- Inferno::DSL::FHIREvaluation::Rule
- Inferno::DSL::FHIREvaluation::Rules::AllResourcesReachable
- Defined in:
- lib/inferno/dsl/fhir_evaluation/rules/all_resources_reachable.rb
Instance Attribute Summary collapse
-
#config ⇒ Object
Returns the value of attribute config.
-
#referenced_resources ⇒ Object
Returns the value of attribute referenced_resources.
-
#referencing_resources ⇒ Object
Returns the value of attribute referencing_resources.
-
#resource_ids ⇒ Object
Returns the value of attribute resource_ids.
-
#resource_type_ids ⇒ Object
Returns the value of attribute resource_type_ids.
Instance Method Summary collapse
Instance Attribute Details
#config ⇒ Object
Returns the value of attribute config.
10 11 12 |
# File 'lib/inferno/dsl/fhir_evaluation/rules/all_resources_reachable.rb', line 10 def config @config end |
#referenced_resources ⇒ Object
Returns the value of attribute referenced_resources.
10 11 12 |
# File 'lib/inferno/dsl/fhir_evaluation/rules/all_resources_reachable.rb', line 10 def referenced_resources @referenced_resources end |
#referencing_resources ⇒ Object
Returns the value of attribute referencing_resources.
10 11 12 |
# File 'lib/inferno/dsl/fhir_evaluation/rules/all_resources_reachable.rb', line 10 def referencing_resources @referencing_resources end |
#resource_ids ⇒ Object
Returns the value of attribute resource_ids.
10 11 12 |
# File 'lib/inferno/dsl/fhir_evaluation/rules/all_resources_reachable.rb', line 10 def resource_ids @resource_ids end |
#resource_type_ids ⇒ Object
Returns the value of attribute resource_type_ids.
10 11 12 |
# File 'lib/inferno/dsl/fhir_evaluation/rules/all_resources_reachable.rb', line 10 def resource_type_ids @resource_type_ids end |
Instance Method Details
#assess_reachability(resource_id, references) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/inferno/dsl/fhir_evaluation/rules/all_resources_reachable.rb', line 41 def assess_reachability(resource_id, references) makes_resolvable_reference = false references.each do |reference| type = reference[:type] referenced_id = reference[:id] if type == '' if resource_ids.include?(referenced_id) makes_resolvable_reference = true referenced_resources.add(referenced_id) end elsif resource_type_ids[type].include?(referenced_id) makes_resolvable_reference = true referenced_resources.add(referenced_id) end end referencing_resources.add(resource_id) if makes_resolvable_reference end |
#check(context) ⇒ Object
12 13 14 15 16 17 18 19 20 21 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_resources_reachable.rb', line 12 def check(context) @config = context.config @referenced_resources = Set.new @referencing_resources = Set.new extractor = Inferno::DSL::FHIREvaluation::ReferenceExtractor.new @resource_type_ids = extractor.extract_resource_type_ids(context.data) @resource_ids = Set.new(resource_type_ids.values.flatten.uniq) reference_map = extractor.extract_references(context.data) reference_map.each do |resource_id, references| assess_reachability(resource_id, references) end island_resources = resource_ids - referenced_resources - referencing_resources island_resources.to_a.sort! if island_resources.any? = "Found resources that have no resolved references and are not referenced: #{ island_resources.join(', ')}" result = EvaluationResult.new(, rule: self) else = 'All resources are reachable' result = EvaluationResult.new(, severity: 'success', rule: self) end context.add_result result end |