class Perpetuity::Postgres::Connection
Attributes
options[R]
Public Class Methods
new(options={})
click to toggle source
# File lib/perpetuity/postgres/connection.rb, line 8 def initialize options={} @options = sanitize_options(options) end
Public Instance Methods
active?()
click to toggle source
# File lib/perpetuity/postgres/connection.rb, line 40 def active? !!@pg_connection end
connect()
click to toggle source
# File lib/perpetuity/postgres/connection.rb, line 20 def connect @pg_connection = PG.connect(options) @pg_connection.exec 'SET client_min_messages TO warning' @pg_connection rescue PG::ConnectionBad => e tries ||= 0 connect_options = options.dup connect_options.delete :dbname conn = PG.connect connect_options conn.exec "CREATE DATABASE #{db}" conn.close if tries.zero? retry else raise e end end
db()
click to toggle source
# File lib/perpetuity/postgres/connection.rb, line 12 def db options[:dbname] end
execute(sql)
click to toggle source
# File lib/perpetuity/postgres/connection.rb, line 44 def execute sql pg_connection.exec sql rescue PG::AdminShutdown, PG::UnableToSend => e # server closed the connection unexpectedly # Try to reconnect 3 times in case it's just a server restart. unable_to_send_retries ||= 0 if unable_to_send_retries < 3 connect unable_to_send_retries += 1 sleep 1 retry else raise end rescue PG::UndefinedFunction => e if e.message =~ /uuid_generate/ use_uuid_extension retry else raise end end
pg_connection()
click to toggle source
# File lib/perpetuity/postgres/connection.rb, line 16 def pg_connection @pg_connection ||= connect end
sanitize_options(options)
click to toggle source
# File lib/perpetuity/postgres/connection.rb, line 75 def sanitize_options options options = options.dup db = options.delete(:db) username = options.delete(:username) if db options[:dbname] = db end if username options[:user] = username end options end
tables()
click to toggle source
# File lib/perpetuity/postgres/connection.rb, line 67 def tables sql = "SELECT table_name FROM information_schema.tables " sql << "WHERE table_schema = 'public'" result = execute(sql) result.to_a.map { |r| r['table_name'] } end
Private Instance Methods
use_uuid_extension()
click to toggle source
# File lib/perpetuity/postgres/connection.rb, line 92 def use_uuid_extension execute 'CREATE EXTENSION "uuid-ossp"' rescue PG::DuplicateObject # Ignore. It just means the extension's already been loaded. end