class ConceptQL::Operators::Read
Public Instance Methods
domains(db)
click to toggle source
# File lib/conceptql/operators/read.rb, line 26 def domains(db) codes_by_domain(db).keys end
query(db)
click to toggle source
# File lib/conceptql/operators/read.rb, line 16 def query(db) ops = codes_by_domain(db).map do |domain, codes| klasses[domain].new(self.nodifier, *codes) end streams = ops.map { |op| op.evaluate(db) } streams.inject { |q, query| q.union(query, all: true) }.from_self end
Private Instance Methods
codes_by_domain(db)
click to toggle source
# File lib/conceptql/operators/read.rb, line 32 def codes_by_domain(db) @codes_by_domain ||= get_codes_by_domain(db) end
get_codes_by_domain(db)
click to toggle source
# File lib/conceptql/operators/read.rb, line 36 def get_codes_by_domain(db) return { observation: arguments } if db.is_a?(::Sequel::Mock) codes_and_mapping_types = db[:source_to_concept_map] .where(source_code: arguments, source_vocabulary_id: 17) .select_map([:source_code, :mapping_type]) doms_and_codes = codes_and_mapping_types.group_by(&:last).each_with_object({}) do |(mapping_type, codes_and_maps), doms| dom = mapping_type_to_domain(mapping_type) doms[dom] ||= [] doms[dom] += codes_and_maps.map(&:first) end leftovers = arguments - doms_and_codes.flat_map { |k, v| v } doms_and_codes[:observation] ||= [] doms_and_codes[:observation] += leftovers doms_and_codes end
klasses()
click to toggle source
# File lib/conceptql/operators/read.rb, line 67 def klasses @klasses ||= { condition_occurrence: ReadCondition, procedure_occurrence: ReadProcedure, drug_exposure: ReadDrug, observation: ReadObservation } end
mapping_type_to_domain(mapping_type)
click to toggle source
# File lib/conceptql/operators/read.rb, line 54 def mapping_type_to_domain(mapping_type) case mapping_type.downcase.to_sym when :condition :condition_occurrence when :procedure :procedure_occurrence when :drug :drug_exposure else :observation end end