class DBConnection

Public Class Methods

columns(table_name) click to toggle source
# File lib/laris/larisrecord/db_connection.rb, line 39
  def self.columns(table_name)
    cols = instance.exec(<<-SQL)
      SELECT
        attname
      FROM
        pg_attribute
      WHERE
        attrelid = '#{table_name}'::regclass AND
        attnum > 0 AND
        NOT attisdropped
    SQL

    cols.map { |col| col['attname'].to_sym }
  end
execute(query, params=[]) click to toggle source
# File lib/laris/larisrecord/db_connection.rb, line 33
def self.execute(query, params=[])
  query = number_placeholders(query)
  print_query(query, params)
  res = instance.exec(query, params)
end
migrate() click to toggle source
# File lib/laris/larisrecord/db_connection.rb, line 14
  def self.migrate
    ensure_migrations_table

    migrations = Dir[File.join(Laris::ROOT, "/db/migrations/*.sql")]
    migrations.each do |file|
      filename = file.match(/([\w|-]*)\.sql$/)[1]

      unless migrated_files.include?(filename)
        instance.exec(File.read(file))
        instance.exec(<<-SQL)
          INSERT INTO
            migrations (filename)
          VALUES
            ('#{filename}')
          SQL
      end
    end
  end
open() click to toggle source
# File lib/laris/larisrecord/db_connection.rb, line 2
def self.open
  uri = URI.parse(ENV['DATABASE_URL'])

  @conn = PG::Connection.new(
    user: uri.user,
    password: uri.password,
    host: uri.host,
    port: uri.port,
    dbname: uri.path[1..-1],
  )
end

Private Class Methods

ensure_migrations_table() click to toggle source
# File lib/laris/larisrecord/db_connection.rb, line 56
  def self.ensure_migrations_table
    res = instance.exec(<<-SQL)
      SELECT to_regclass('migrations') AS exists
    SQL

    unless res[0]['exists']
      instance.exec(<<-SQL)
        CREATE TABLE migrations (
          id SERIAL PRIMARY KEY,
          filename VARCHAR(255) NOT NULL
        )
      SQL
    end
  end
instance() click to toggle source
# File lib/laris/larisrecord/db_connection.rb, line 71
def self.instance
  open if @conn.nil?
  @conn
end
migrated_files() click to toggle source
# File lib/laris/larisrecord/db_connection.rb, line 76
  def self.migrated_files
    Set.new instance.exec(<<-SQL).values.flatten
      SELECT
        filename
      FROM
        migrations
    SQL
  end
number_placeholders(query_string) click to toggle source
# File lib/laris/larisrecord/db_connection.rb, line 85
def self.number_placeholders(query_string)
  count = 0
  query_string.chars.map do |char|
    if char == "?"
      count += 1
      "$#{count}"
    else
      char
    end
  end.join("")
end
print_query(query, interpolation_args) click to toggle source