Module: DaVinciCRDTestKit::ResourceExtractor

Included in:
V221::ServiceRequestNoCustomExtensionsTest, V221::SupportedUSCoreVersionsTest
Defined in:
lib/davinci_crd_test_kit/server/resource_extractor.rb

Instance Method Summary collapse

Instance Method Details

#bundle_entry_resources(bundle) ⇒ Object



50
51
52
53
54
55
56
57
58
# File 'lib/davinci_crd_test_kit/server/resource_extractor.rb', line 50

def bundle_entry_resources(bundle)
  return [] unless bundle.is_a?(FHIR::Bundle)

  bundle.entry.filter_map do |entry|
    next unless entry&.resource.present?

    entry.resource
  end
end

#context_resources(request_body) ⇒ Object



12
13
14
15
16
17
18
19
# File 'lib/davinci_crd_test_kit/server/resource_extractor.rb', line 12

def context_resources(request_body)
  context = request_body['context']
  return [] unless context.is_a?(Hash)

  bundle_entry_resources(parse_fhir_data(context['appointments'])) +
    bundle_entry_resources(parse_fhir_data(context['draftOrders'])) +
    resources_from_value(context['fulfillmentTasks'])
end

#parse_fhir_data(contents) ⇒ Object



60
61
62
63
64
65
66
# File 'lib/davinci_crd_test_kit/server/resource_extractor.rb', line 60

def parse_fhir_data(contents)
  return unless contents.present?

  FHIR.from_contents(contents.to_json)
rescue StandardError
  nil
end

#prefetch_resources(request_body) ⇒ Object



21
22
23
24
25
26
# File 'lib/davinci_crd_test_kit/server/resource_extractor.rb', line 21

def prefetch_resources(request_body)
  prefetch = request_body['prefetch']
  return [] unless prefetch.is_a?(Hash)

  prefetch.values.flat_map { |value| resources_from_value(value) }
end

#resources_from_hash(contents) ⇒ Object



39
40
41
42
43
44
45
46
47
48
# File 'lib/davinci_crd_test_kit/server/resource_extractor.rb', line 39

def resources_from_hash(contents)
  return [] unless contents['resourceType'].present?

  fhir_data = parse_fhir_data(contents)
  return [] unless fhir_data.present?

  return bundle_entry_resources(fhir_data) if fhir_data.is_a?(FHIR::Bundle)

  [fhir_data]
end

#resources_from_request(request) ⇒ Object



3
4
5
6
7
8
9
10
# File 'lib/davinci_crd_test_kit/server/resource_extractor.rb', line 3

def resources_from_request(request)
  request_body = JSON.parse(request.request_body)
  return [] unless request_body.is_a?(Hash)

  context_resources(request_body) + prefetch_resources(request_body)
rescue JSON::ParserError
  []
end

#resources_from_value(value) ⇒ Object



28
29
30
31
32
33
34
35
36
37
# File 'lib/davinci_crd_test_kit/server/resource_extractor.rb', line 28

def resources_from_value(value)
  case value
  when Array
    value.flat_map { |entry| resources_from_value(entry) }
  when Hash
    resources_from_hash(value)
  else
    []
  end
end