module DBA::Database

Public Instance Methods

connect() click to toggle source
# File lib/dba/database.rb, line 11
def connect
  args = find_connection_args

  Sequel.connect(args)
rescue Sequel::DatabaseConnectionError => exception
  raise DBA::Error, connection_error_message(args)
end

Private Instance Methods

connection_error_message(args) click to toggle source
# File lib/dba/database.rb, line 45
def connection_error_message(args)
  if args.is_a?(Hash)
    adapter, host, port = args.values_at('adapter', 'host', 'port')

    host ||= 'localhost'

    if port
      "could not connect to #{adapter} database at #{host}:#{port}"
    else
      "could not connect to #{adapter} database at #{host}"
    end
  else
    uri = URI(args)

    "could not connect to #{uri.scheme} database at #{uri.host}"
  end
end
database_config() click to toggle source
# File lib/dba/database.rb, line 71
def database_config
  YAML.load(ERB.new(File.read('config/database.yml')).result)
end
database_config?() click to toggle source
# File lib/dba/database.rb, line 67
def database_config?
  File.exist?('config/database.yml')
end
development_database_args() click to toggle source
# File lib/dba/database.rb, line 75
def development_database_args
  args = database_config['development']
  args['adapter'] = 'postgres' if args['adapter'] == 'postgresql'
  args['adapter'] = 'sqlite' if args['adapter'] == 'sqlite3'
  args
end
dotenv?() click to toggle source
# File lib/dba/database.rb, line 63
def dotenv?
  File.exist?('.env')
end
find_connection_args() click to toggle source
# File lib/dba/database.rb, line 21
def find_connection_args
  if dotenv?
    File.readlines('.env').each do |line|
      if line.strip =~ /\ADATABASE_URL=/
        return $'
      end
    end
  end

  if database_config?
    return development_database_args
  end

  if postgres_running?
    return 'postgres://localhost:5432/postgres'
  end

  if path = Dir['*.sqlite3'].first
    return 'sqlite://' + path
  end

  raise DBA::Error, 'could not find database'
end
postgres_running?() click to toggle source
# File lib/dba/database.rb, line 82
def postgres_running?
  Socket.tcp('localhost', 5432) { :connected }
rescue Errno::ECONNREFUSED
end