Class: Inferno::DSL::FHIREvaluation::Rules::AllSearchParametersHaveExamples
- Inherits:
-
Inferno::DSL::FHIREvaluation::Rule
- Object
- Inferno::DSL::FHIREvaluation::Rule
- Inferno::DSL::FHIREvaluation::Rules::AllSearchParametersHaveExamples
- Includes:
- Inferno::DSL::FhirpathEvaluation
- Defined in:
- lib/inferno/dsl/fhir_evaluation/rules/all_search_parameters_have_examples.rb
Instance Method Summary collapse
Methods included from Inferno::DSL::FhirpathEvaluation
Instance Method Details
#check(context) ⇒ Object
10 11 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 |
# File 'lib/inferno/dsl/fhir_evaluation/rules/all_search_parameters_have_examples.rb', line 10 def check(context) unless ENV['FHIRPATH_URL'] = 'FHIRPATH_URL is not found. Skipping rule AllSearchParametersHaveExamples.' result = EvaluationResult.new(, severity: 'warning', rule: self) context.add_result result return end unused_resource_urls = [] search_params = context.ig.resources_by_type['SearchParameter'] search_params.each do |search_param| unused_resource_urls.push search_param.url unless param_is_used?(search_param, context) end if unused_resource_urls.any? = "Found SearchParameters with no searchable data: \n\t#{unused_resource_urls.join(' ,')}" result = EvaluationResult.new(, rule: self) elsif !search_params.empty? = 'All SearchParameters have examples' result = EvaluationResult.new(, severity: 'success', rule: self) else = 'IG contains no SearchParameter' result = EvaluationResult.new(, severity: 'information', rule: self) end context.add_result result end |
#param_is_used?(param, context) ⇒ Boolean
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/inferno/dsl/fhir_evaluation/rules/all_search_parameters_have_examples.rb', line 39 def param_is_used?(param, context) # Assume that all params have an expression (fhirpath) # This is not guaranteed since the field is 0..1 # but without it there's no other way to select a value # Return warning if params don't include expression unless param.expression = "Search parameter #{param.url} doesn't have an expression." result = EvaluationResult.new(, severity: 'warning', rule: self) context.add_result result return false end used = false context.data.each do |resource| next unless param.base.include? resource.resourceType begin result = evaluate_fhirpath(resource: resource, path: param.expression) rescue StandardError => e = "SearchParameter #{param.url} failed to evaluate due to an error. " \ "Expression: #{param.expression}. #{e}" result = EvaluationResult.new() context.add_result result used = true break end if result.present? used = true break end end used end |