Module: EnrichmentDb

Defined in:
lib/enrichment_db.rb,
lib/enrichment_db/db.rb,
lib/enrichment_db/error.rb,
lib/enrichment_db/version.rb

Defined Under Namespace

Modules: Ato, Census, Geo, Helper, Language Classes: Datum, DatumModel

Constant Summary collapse

Error =
Class.new(StandardError)
RequestError =
Class.new(Error)
InvalidObject =
Class.new(Error)
InvalidGeoPointFormat =
Class.new(Error)
VERSION =
'0.1.14'

Class Method Summary collapse

Class Method Details

.db_connectionObject


6
7
8
9
10
11
12
13
# File 'lib/enrichment_db/db.rb', line 6

def self.db_connection
  @__db_connection ||= PGconn.connect(
    host: 'geo-mappings.cfmmyp7uix0j.ap-southeast-2.rds.amazonaws.com', 
    dbname: 'geo', 
    user: 'lexer', 
    password: 'campl3x3r'
  )
end

.request(db, query, values = nil) ⇒ Object


39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/enrichment_db/db.rb', line 39

def self.request(db, query, values = nil)
  type = request_type(query)

  case type
  when :select, 'select', '\d'
    return EnrichmentDb::db_connection.exec(query, values) if values
    
    EnrichmentDb::db_connection.exec(query)
  when :insert, :drop, :delete, 'insert', 'drop', 'delete'
    fail EnrichmentDb::RequestError, "Postgres method '#{type}' is unsupported"
  else
    fail EnrichmentDb::RequestError, "Postgres query '#{query}' is unsupported"
  end
end

.request_type(query) ⇒ Object


54
55
56
57
58
59
# File 'lib/enrichment_db/db.rb', line 54

def self.request_type(query)
  result = query.downcase.match(/(^(?:drop|select|insert|delete|\\d))/)
  return unless result

  result[0]
end

.reset_connectionObject


15
16
17
# File 'lib/enrichment_db/db.rb', line 15

def self.reset_connection
  @__api_connection = nil
end

.table_columns(table, schema = 'public') ⇒ Object


29
30
31
32
33
34
35
36
37
# File 'lib/enrichment_db/db.rb', line 29

def self.table_columns(table, schema = 'public')
  query = "SELECT *
  FROM information_schema.columns
  WHERE table_schema = '#{schema}'
  AND table_name   = '#{table}'"
  request(schema, query).collect do |h|
    h['column_name']
  end
end

.table_names(schema = 'public') ⇒ Object


19
20
21
22
23
24
25
26
27
# File 'lib/enrichment_db/db.rb', line 19

def self.table_names(schema = 'public')
  query = "SELECT table_name
          FROM information_schema.tables
          WHERE table_schema='#{schema}'
          AND table_type='BASE TABLE'"
  request(schema, query).collect do |h|
    h['table_name']
  end
end