Class: Inferno::Terminology::Codesystem

Inherits:
Object
  • Object
show all
Defined in:
lib/inferno/terminology/codesystem.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cs_model) ⇒ Codesystem

Returns a new instance of Codesystem.



10
11
12
# File 'lib/inferno/terminology/codesystem.rb', line 10

def initialize(cs_model)
  @codesystem_model = cs_model
end

Instance Attribute Details

#codesystem_modelObject

Returns the value of attribute codesystem_model.



8
9
10
# File 'lib/inferno/terminology/codesystem.rb', line 8

def codesystem_model
  @codesystem_model
end

Instance Method Details

#all_codes_in_concept(concepts) ⇒ Object



14
15
16
# File 'lib/inferno/terminology/codesystem.rb', line 14

def all_codes_in_concept(concepts)
  Set.new.tap { |cs_set| load_codes(concepts.flatten, cs_set) }
end

#filter_codes(filter = nil) ⇒ Object



37
38
39
40
41
42
43
44
45
46
# File 'lib/inferno/terminology/codesystem.rb', line 37

def filter_codes(filter = nil)
  if filter.nil?
    all_codes_in_concept(codesystem_model.concept)
  elsif is_a_concept_filter? filter
    parent_concept = find_concept(filter.value)
    all_codes_in_concept([parent_concept])
  else
    raise FilterOperationException, filter.to_s
  end
end

#find_concept(code, concepts = codesystem_model.concept) ⇒ Object



25
26
27
28
29
30
31
# File 'lib/inferno/terminology/codesystem.rb', line 25

def find_concept(code, concepts = codesystem_model.concept)
  return if concepts.nil?

  concepts.find do |concept|
    concept.code == code || find_concept(code, concept.concept)
  end
end

#is_a_concept_filter?(filter) ⇒ Boolean

rubocop:disable Naming/PredicateName

Returns:

  • (Boolean)


33
34
35
# File 'lib/inferno/terminology/codesystem.rb', line 33

def is_a_concept_filter?(filter) # rubocop:disable Naming/PredicateName
  (filter.op == 'is-a') && (codesystem_model.hierarchyMeaning == 'is-a') && (filter.property == 'concept')
end

#load_codes(concepts, cs_set) ⇒ Object



18
19
20
21
22
23
# File 'lib/inferno/terminology/codesystem.rb', line 18

def load_codes(concepts, cs_set)
  concepts.each do |concept|
    cs_set.add(system: codesystem_model.url, code: concept.code)
    load_codes(concept.concept, cs_set) unless concept.concept.blank?
  end
end