Sha256: d7cbee06349d6dc2369e9a23893db4165a8c0fe64d43072ed4b3d3784606a17a

Contents?: true

Size: 878 Bytes

Versions: 3

Compression:

Stored size: 878 Bytes

Contents

module Inferno
  module DSL
    module FHIRManipulation
      def walk_resource(resource, path = nil, &block)
        resource.class::METADATA.each do |field_name, meta|
          local_name = meta.fetch :local_name, field_name
          values = [resource.instance_variable_get("@#{local_name}")].flatten.compact
          next if values.empty?

          values.each_with_index do |value, i|
            child_path = if path.nil?
                           field_name
                         elsif meta['max'] > 1
                           "#{path}.#{field_name}[#{i}]"
                         else
                           "#{path}.#{field_name}"
                         end
            yield value, meta, child_path
            walk_resource value, child_path, &block unless FHIR::PRIMITIVES.include? meta['type']
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
inferno_core-0.0.3 lib/inferno/dsl/fhir_manipulation.rb
inferno_core-0.0.2 lib/inferno/dsl/fhir_manipulation.rb
inferno_core-0.0.1 lib/inferno/dsl/fhir_manipulation.rb