class Inferno::DSL::FHIRValidation::Validator
Public Class Methods
new(&block)
click to toggle source
# File lib/inferno/dsl/fhir_validation.rb, line 17 def initialize(&block) instance_eval(&block) end
Public Instance Methods
default_validator_url()
click to toggle source
# File lib/inferno/dsl/fhir_validation.rb, line 21 def default_validator_url ENV.fetch('VALIDATOR_URL') end
exclude_message(&block)
click to toggle source
# File lib/inferno/dsl/fhir_validation.rb, line 31 def exclude_message(&block) @exclude_message = block if block_given? @exclude_message end
filter_messages(message_hashes)
click to toggle source
# File lib/inferno/dsl/fhir_validation.rb, line 50 def filter_messages(message_hashes) message_hashes.reject! { |message| exclude_message.call(Entities::Message.new(message)) } if exclude_message end
issue_message(issue)
click to toggle source
# File lib/inferno/dsl/fhir_validation.rb, line 72 def issue_message(issue) location = if issue.respond_to?(:expression) issue.expression&.join(', ') else issue.location&.join(', ') end "#{location}: #{issue&.details&.text}" end
issue_severity(issue)
click to toggle source
# File lib/inferno/dsl/fhir_validation.rb, line 61 def issue_severity(issue) case issue.severity when 'warning' 'warning' when 'information' 'info' else 'error' end end
message_hash_from_issue(issue)
click to toggle source
# File lib/inferno/dsl/fhir_validation.rb, line 54 def message_hash_from_issue(issue) { type: issue_severity(issue), message: issue_message(issue) } end
resource_is_valid?(resource, profile_url, runnable)
click to toggle source
# File lib/inferno/dsl/fhir_validation.rb, line 36 def resource_is_valid?(resource, profile_url, runnable) profile_url ||= FHIR::Definitions.resource_definition(resource.resourceType).url outcome = FHIR::OperationOutcome.new(JSON.parse(validate(resource, profile_url))) message_hashes = outcome.issue&.map { |issue| message_hash_from_issue(issue) } || [] filter_messages(message_hashes) message_hashes .each { |message_hash| runnable.add_message(message_hash[:type], message_hash[:message]) } .none? { |message_hash| message_hash[:type] == 'error' } end
url(validator_url = nil)
click to toggle source
# File lib/inferno/dsl/fhir_validation.rb, line 25 def url(validator_url = nil) @url = validator_url if validator_url @url end
validate(resource, profile_url)
click to toggle source
# File lib/inferno/dsl/fhir_validation.rb, line 82 def validate(resource, profile_url) RestClient.post( "#{url}/validate", resource.to_json, params: { profile: profile_url } ).body end