module Jrec::PG

Public Instance Methods

config() click to toggle source

:singleton method parses database url

# File lib/jrec/pg.rb, line 42
def config 
  @@config ||= begin
    
    if File.exists?(config_file)
      db = OpenStruct.new(YAML.load_file(config_file)[env])
    elsif ENV['DATABASE_URL']
      db = URI.parse(ENV['DATABASE_URL'])
    else
      raise "Database configuration not found"  
    end
    
    config = {
      dbname: db.path[1..-1],
      host: db.host,
      port: db.port,
      size: ENV['DB_POOL_SIZE'] || 5,          
      async_autoreconnect: ENV['DB_ASYNC_AUTO_RECONNECT'] || true,
      connect_timeout: ENV['DB_CONN_TIMEOUT'] || 60,
      query_timeout: ENV['DB_QUERY_TIMEOUT'] || 30,
      on_autoreconnect: proc { |pg| pg.exec "SELECT plv8_startup();" rescue nil },
      on_connect: proc { |pg| pg.exec "SELECT plv8_startup();" rescue nil }
    }
    config[:user] = db.user if db.user
    config[:password] = db.password if db.password
    config
  end
end
config_file() click to toggle source
# File lib/jrec/pg.rb, line 70
def config_file
  ENV['DATABASE_CONFIG_FILE'] || "#{Jrec.root}/config/database.yml"
end
env() click to toggle source
# File lib/jrec/pg.rb, line 74
def env
  ENV['RACK_ENV'] || "development"
end
exec_func(func_name, *params) click to toggle source
# File lib/jrec/pg.rb, line 17
def exec_func func_name, *params
  sql = "SELECT jrec_#{func_name}(#{ (params.length-1).times.inject("$1"){ |m,i| "#{m},$#{ i + 2 }"} })"
  exec_params sql, params
end
exec_params(sql, params = []) click to toggle source
# File lib/jrec/pg.rb, line 22
def exec_params sql, params = []
  result = pg.exec_params(sql, params)
  json = result.values.flatten.first
  result.clear
  json
end
pg() click to toggle source

:singleton method holds db connection

# File lib/jrec/pg.rb, line 33
def pg 
  @@connection_pool ||= ::PG::EM::ConnectionPool.new(config)
end