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