Class: PacioInfernoCore::Generator::GroupMetadata

Inherits:
Object
  • Object
show all
Defined in:
lib/pacio_inferno_core/generator/group_metadata.rb

Constant Summary collapse

ATTRIBUTES =
%i[
  name
  class_name
  version
  reformatted_version
  resource
  profile_url
  profile_name
  profile_version
  title
  short_description
  is_delayed
  interactions
  operations
  searches
  search_definitions
  include_params
  revincludes
  required_concepts
  must_supports
  mandatory_elements
  bindings
  references
  tests
  granular_scope_tests
  id
  file_name
  delayed_references
  resource_conformance_expectation
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(metadata) ⇒ GroupMetadata

Returns a new instance of GroupMetadata.



39
40
41
42
43
44
45
# File 'lib/pacio_inferno_core/generator/group_metadata.rb', line 39

def initialize()
  .each do |key, value|
    raise "Unknown attribute #{key}" unless ATTRIBUTES.include? key

    instance_variable_set(:"@#{key}", value)
  end
end

Instance Method Details

#add_delayed_references(delayed_profiles, ig_resources) ⇒ Object



99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/pacio_inferno_core/generator/group_metadata.rb', line 99

def add_delayed_references(delayed_profiles, ig_resources)
  self.delayed_references =
    references
      .select { |reference| (reference[:profiles] & delayed_profiles).present? }
      .map do |reference|
        profile_urls = (reference[:profiles] & delayed_profiles)
        delayed_resources = profile_urls.map { |url| ig_resources.resource_for_profile(url) }
        {
          path: reference[:path].gsub("#{resource}.", ''),
          resources: delayed_resources
        }
      end
end

#add_granular_scope_test(id:, file_name:) ⇒ Object



86
87
88
89
90
91
92
93
# File 'lib/pacio_inferno_core/generator/group_metadata.rb', line 86

def add_granular_scope_test(id:, file_name:)
  self.granular_scope_tests ||= []

  self.granular_scope_tests << {
    id:,
    file_name:
  }
end

#add_test(id:, file_name:) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/pacio_inferno_core/generator/group_metadata.rb', line 71

def add_test(id:, file_name:)
  self.tests ||= []

   = {
    id: id,
    file_name: file_name
  }

  if delayed? && id.include?('read')
    self.tests.unshift()
  else
    self.tests << 
  end
end

#delayed?Boolean

Returns:

  • (Boolean)


47
48
49
50
51
52
53
# File 'lib/pacio_inferno_core/generator/group_metadata.rb', line 47

def delayed?
  @is_delayed ||= if resource == 'Patient'
                    false
                  else
                    no_patient_searches?
                  end
end

#exclude_search_tests?Boolean

Returns:

  • (Boolean)


55
56
57
# File 'lib/pacio_inferno_core/generator/group_metadata.rb', line 55

def exclude_search_tests?
  delayed? && !searchable_delayed_resource?
end

#no_patient_searches?Boolean

Returns:

  • (Boolean)


59
60
61
# File 'lib/pacio_inferno_core/generator/group_metadata.rb', line 59

def no_patient_searches?
  searches.none? { |search| search[:names].include?('patient') && search[:expectation] == 'SHALL' }
end

#optional_profile?Boolean

Returns:

  • (Boolean)


63
64
65
# File 'lib/pacio_inferno_core/generator/group_metadata.rb', line 63

def optional_profile?
  SpecialCases::OPTIONAL_PROFILES.key?(profile_url) && SpecialCases::OPTIONAL_PROFILES[profile_url].include?(reformatted_version)
end

#searchable_delayed_resource?Boolean

Returns:

  • (Boolean)


67
68
69
# File 'lib/pacio_inferno_core/generator/group_metadata.rb', line 67

def searchable_delayed_resource?
  SpecialCases::SEARCHABLE_DELAYED_RESOURCES.key?(resource) && SpecialCases::SEARCHABLE_DELAYED_RESOURCES[resource].include?(reformatted_version)
end

#to_hashObject



95
96
97
# File 'lib/pacio_inferno_core/generator/group_metadata.rb', line 95

def to_hash
  ATTRIBUTES.each_with_object({}) { |key, hash| hash[key] = send(key) unless send(key).nil? }
end