Sha256: 8897fd3a0aa18d16ff5a739c963a6be7275ac95af5d86fd47672c4538db5ec49
Contents?: true
Size: 1.91 KB
Versions: 7
Compression:
Stored size: 1.91 KB
Contents
module IpaTestKit module FHIRResourceNavigation DAR_EXTENSION_URL = 'http://hl7.org/fhir/StructureDefinition/data-absent-reason'.freeze def resolve_path(elements, path) elements = Array.wrap(elements) return elements if path.blank? paths = path.split('.') segment = paths.first segment.delete_suffix! '[x]' remaining_path = paths.drop(1).join('.') elements.flat_map do |element| child = get_next_value(element, segment) resolve_path(child, remaining_path) end.compact end def find_a_value_at(element, path, include_dar: false) return nil if element.nil? elements = Array.wrap(element) if path.empty? unless include_dar elements = elements.reject do |el| el.respond_to?(:extension) && el.extension.any? { |ext| ext.url == DAR_EXTENSION_URL} end end return elements.find { |el| yield(el) } if block_given? return elements.first end path_segments = path.split('.') segment = path_segments.shift.delete_suffix('[x]').to_sym no_elements_present = elements.none? do |element| child = get_next_value(element, segment) child.present? || child == false end return nil if no_elements_present remaining_path = path_segments.join('.') elements.each do |element| child = get_next_value(element, segment) element_found = if block_given? find_a_value_at(child, remaining_path, include_dar: include_dar) { |value_found| yield(value_found) } else find_a_value_at(child, remaining_path, include_dar: include_dar) end return element_found if element_found.present? || element_found == false end nil end def get_next_value(element, property) element.send(property) rescue NoMethodError nil end end end
Version data entries
7 entries across 7 versions & 1 rubygems