module RuboCop::Cop::DatabaseTypeResolvable

def database

def database
  cop_config['Database'] || database_from_yaml || database_from_env
end

def database_adapter

def database_adapter
  database_yaml['adapter'] || database_yaml.first.last['adapter']
end

def database_from_env

def database_from_env
  url = ENV.fetch('DATABASE_URL', '')
  return if url.blank?
  case url
  when %r{\A(mysql2|trilogy)://}
    MYSQL
  when %r{\Apostgres(ql)?://}
    POSTGRESQL
  end
end

def database_from_yaml

def database_from_yaml
  return unless database_yaml
  case database_adapter
  when 'mysql2', 'trilogy'
    MYSQL
  when 'postgresql', 'postgis'
    POSTGRESQL
  end
end

def database_yaml

def database_yaml
  return unless File.exist?('config/database.yml')
  yaml = if YAML.respond_to?(:unsafe_load_file)
           YAML.unsafe_load_file('config/database.yml')
         else
           YAML.load_file('config/database.yml')
         end
  return unless yaml.is_a? Hash
  config = yaml['development']
  return unless config.is_a?(Hash)
  config
rescue Psych::SyntaxError
  # noop
end