Class: DaVinciDTRTestKit::Generator
- Inherits:
-
Object
- Object
- DaVinciDTRTestKit::Generator
- Defined in:
- lib/davinci_dtr_test_kit/generator.rb,
lib/davinci_dtr_test_kit/generator/ig_metadata.rb,
lib/davinci_dtr_test_kit/generator/profile_metadata_extractor.rb
Overview
Generates profile metadata files (used by the test kit's must support tests) from a DTR IG package into cross_suite/generated/<ig_version>.
Defined Under Namespace
Classes: IGMetadata, ProfileMetadataExtractor
Constant Summary collapse
- TARGET_IG_VERSIONS =
['2.2.0'].freeze
- TARGET_PROFILES_AND_ELEMENT_SCOPE =
Must support checks are scoped to only differential for standard and adaptive
{ 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/DTR-QPackageBundle' => 'snapshot', 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-output-parameters' => 'snapshot', 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-base-questionnaire' => 'snapshot', 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt' => 'differential', 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaire-adapt-search' => 'snapshot', 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-std-questionnaire' => 'differential' }.freeze
Instance Attribute Summary collapse
-
#ig_file_name ⇒ Object
Returns the value of attribute ig_file_name.
-
#ig_metadata ⇒ Object
Returns the value of attribute ig_metadata.
-
#ig_resources ⇒ Object
Returns the value of attribute ig_resources.
Class Method Summary collapse
Instance Method Summary collapse
-
#add_parameters_slice_discriminators(profile_metadata) ⇒ Object
This is a workaround for Inferno Core treating slice discriminators defined with
patternStringas unsupported. - #base_output_dir ⇒ Object
- #extract_metadata ⇒ Object
- #generate ⇒ Object
- #ig_version_from_file_name ⇒ Object
-
#initialize(ig_file_name) ⇒ Generator
constructor
A new instance of Generator.
- #load_ig_package ⇒ Object
- #questionnaire_package_output_parameters?(profile) ⇒ Boolean
-
#target_profiles ⇒ Object
DTR profiles analyzed include the Questionnaires.
- #write_profile_metadata ⇒ Object
Constructor Details
#initialize(ig_file_name) ⇒ Generator
Returns a new instance of Generator.
39 40 41 |
# File 'lib/davinci_dtr_test_kit/generator.rb', line 39 def initialize(ig_file_name) self.ig_file_name = ig_file_name end |
Instance Attribute Details
#ig_file_name ⇒ Object
Returns the value of attribute ig_file_name.
37 38 39 |
# File 'lib/davinci_dtr_test_kit/generator.rb', line 37 def ig_file_name @ig_file_name end |
#ig_metadata ⇒ Object
Returns the value of attribute ig_metadata.
37 38 39 |
# File 'lib/davinci_dtr_test_kit/generator.rb', line 37 def @ig_metadata end |
#ig_resources ⇒ Object
Returns the value of attribute ig_resources.
37 38 39 |
# File 'lib/davinci_dtr_test_kit/generator.rb', line 37 def ig_resources @ig_resources end |
Class Method Details
.generate ⇒ Object
26 27 28 29 30 31 32 33 34 35 |
# File 'lib/davinci_dtr_test_kit/generator.rb', line 26 def self.generate ig_packages = Dir.glob(File.join(Dir.pwd, 'lib', 'davinci_dtr_test_kit', 'igs', '*.tgz')) ig_packages.each do |ig_package| generator = new(ig_package) next unless TARGET_IG_VERSIONS.include?(generator.ig_version_from_file_name) generator.generate end end |
Instance Method Details
#add_parameters_slice_discriminators(profile_metadata) ⇒ Object
This is a workaround for Inferno Core treating slice discriminators defined with patternString as unsupported.
The QuestionnairePackage Output Parameters profile slices Parameters.parameter by name (packagebundle
and outcome), so replace only unsupported discriminators with equivalent value metadata. If Core gets updated
to support patternString, this method becomes a no-op and can be removed.
106 107 108 109 110 111 112 113 114 115 |
# File 'lib/davinci_dtr_test_kit/generator.rb', line 106 def add_parameters_slice_discriminators() .must_supports[:slices].each do |slice| next unless slice.dig(:discriminator, :type) == 'unsupported' slice[:discriminator] = { type: 'value', values: [{ path: 'name', value: slice[:slice_name] }] } end end |
#base_output_dir ⇒ Object
86 87 88 |
# File 'lib/davinci_dtr_test_kit/generator.rb', line 86 def base_output_dir File.join(__dir__, 'cross_suite', 'generated', .ig_version) end |
#extract_metadata ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/davinci_dtr_test_kit/generator.rb', line 68 def self. = IGMetadata.new .ig_version = "v#{ig_resources.ig_resource.version}" .profiles = target_profiles.map do |profile| element_scope = TARGET_PROFILES_AND_ELEMENT_SCOPE[profile.url] = ProfileMetadataExtractor.new(profile.url, ig_resources, element_scope). # handle gap when looking at differential .must_supports[:recursive_elements] << 'item' if element_scope == 'differential' add_parameters_slice_discriminators() if questionnaire_package_output_parameters?(profile) end FileUtils.mkdir_p(base_output_dir) File.write(File.join(base_output_dir, 'metadata.yml'), YAML.dump(.to_hash)) end |
#generate ⇒ Object
47 48 49 50 51 52 |
# File 'lib/davinci_dtr_test_kit/generator.rb', line 47 def generate puts "Generating profile metadata for IG #{File.basename(ig_file_name)}" load_ig_package end |
#ig_version_from_file_name ⇒ Object
43 44 45 |
# File 'lib/davinci_dtr_test_kit/generator.rb', line 43 def ig_version_from_file_name File.basename(ig_file_name, '.tgz').split('_').last end |
#load_ig_package ⇒ Object
54 55 56 57 58 59 |
# File 'lib/davinci_dtr_test_kit/generator.rb', line 54 def load_ig_package self.ig_resources = Inferno::Entities::IG.from_file( ig_file_name, standalone_resources_directory: ig_file_name.chomp('.tgz') ) end |
#questionnaire_package_output_parameters?(profile) ⇒ Boolean
98 99 100 |
# File 'lib/davinci_dtr_test_kit/generator.rb', line 98 def questionnaire_package_output_parameters?(profile) profile.url == 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-output-parameters' end |
#target_profiles ⇒ Object
DTR profiles analyzed include the Questionnaires
62 63 64 65 66 |
# File 'lib/davinci_dtr_test_kit/generator.rb', line 62 def target_profiles ig_resources.resources_by_type['StructureDefinition'].select do |structure_definition| TARGET_PROFILES_AND_ELEMENT_SCOPE.key?(structure_definition.url) end end |
#write_profile_metadata ⇒ Object
90 91 92 93 94 95 96 |
# File 'lib/davinci_dtr_test_kit/generator.rb', line 90 def .profiles.each do || = File.join(base_output_dir, .snake_case_for_profile()) FileUtils.mkdir_p() File.write(File.join(, 'metadata.yml'), YAML.dump(.to_hash)) end end |