Module: DaVinciCRDTestKit::ResourceExtractor
- Defined in:
- lib/davinci_crd_test_kit/server/resource_extractor.rb
Instance Method Summary collapse
- #bundle_entry_resources(bundle) ⇒ Object
- #context_resources(request_body) ⇒ Object
- #parse_fhir_data(contents) ⇒ Object
- #prefetch_resources(request_body) ⇒ Object
- #resources_from_hash(contents) ⇒ Object
- #resources_from_request(request) ⇒ Object
- #resources_from_value(value) ⇒ Object
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 |