Module: ConceptQL::ViewMaker

Defined in:
lib/conceptql/view_maker.rb

Class Method Summary collapse

Class Method Details

.assemble_date(*symbols) ⇒ Object



48
49
50
51
52
53
54
# File 'lib/conceptql/view_maker.rb', line 48

def self.assemble_date(*symbols)
  strings = symbols.map do |symbol|
    Sequel.function(:coalesce, symbol, '01').cast(:text)
  end
  strings = strings.zip(['-'] * (symbols.length - 1)).flatten.compact
  Sequel.function(:date, Sequel.join(strings))
end

.make_view(db, schema, view, columns) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/conceptql/view_maker.rb', line 11

def self.make_view(db, schema, view, columns)
  view_name = (view.to_s + '_with_dates')
  view_name = schema + '__' + view_name if schema
  view_name = view_name.to_sym

  table_name = view.to_s
  table_name = schema + '__' + table_name if schema
  table_name = table_name.to_sym

  additional_columns = [Sequel.expr(columns.shift).cast(:date).as(:start_date), Sequel.expr(columns.shift).cast(:date).as(:end_date)]
  unless columns.empty?
    additional_columns += columns.last.map do |column_name, column_value|
      Sequel.expr(column_value).as(column_name)
    end
  end
  query = db.from(table_name).select_all.select_append(*additional_columns)
  puts query.sql
  db.drop_view(view_name, if_exists: true)
  db.create_view(view_name, query)
end

.make_views(db, schema = nil) ⇒ Object



5
6
7
8
9
# File 'lib/conceptql/view_maker.rb', line 5

def self.make_views(db, schema = nil)
  views.each do |view, columns|
    make_view(db, schema, view, columns)
  end
end

.viewsObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/conceptql/view_maker.rb', line 32

def self.views
  person_date_of_birth = assemble_date(:year_of_birth, :month_of_birth, :day_of_birth)
  {
    condition_occurrence: [:condition_start_date, :condition_end_date],
    death: [:death_date, :death_date, { death_id: :person_id }],
    drug_exposure: [:drug_exposure_start_date, :drug_exposure_end_date],
    drug_cost: [nil, nil],
    payer_plan_period: [:payer_plan_period_start_date, :payer_plan_period_end_date],
    person: [person_date_of_birth, person_date_of_birth],
    procedure_occurrence: [:procedure_date, :procedure_date],
    procedure_cost: [nil, nil],
    observation: [:observation_date, :observation_date],
    visit_occurrence: [:visit_start_date, :visit_end_date]
  }
end