Remove hard coded references to Active Record in railties

This commit is contained in:
José Valim 2013-03-02 13:52:32 -07:00
parent c09f934dcb
commit dd5a80dc3d
5 changed files with 11 additions and 23 deletions

@ -38,7 +38,7 @@ def spec
private
def resolve_string_connection(spec) # :nodoc:
hash = configurations.fetch(spec) do |k|
self.class.connection_url_to_hash(k)
connection_url_to_hash(k)
end
raise(AdapterNotSpecified, "#{spec} database is not configured") unless hash
@ -65,7 +65,7 @@ def resolve_hash_connection(spec) # :nodoc:
ConnectionSpecification.new(spec, adapter_method)
end
def self.connection_url_to_hash(url) # :nodoc:
def connection_url_to_hash(url) # :nodoc:
config = URI.parse url
adapter = config.scheme
adapter = "postgresql" if adapter == "postgres"

@ -152,7 +152,7 @@ class Railtie < Rails::Railtie # :nodoc:
# and then establishes the connection.
initializer "active_record.initialize_database" do |app|
ActiveSupport.on_load(:active_record) do
self.configurations = app.config.database_configuration
self.configurations = app.config.database_configuration || {}
establish_connection
end
end

@ -2,7 +2,7 @@ require 'active_record'
db_namespace = namespace :db do
task :load_config do
ActiveRecord::Base.configurations = Rails.application.config.database_configuration
ActiveRecord::Base.configurations = Rails.application.config.database_configuration || {}
ActiveRecord::Migrator.migrations_paths = Rails.application.paths['db/migrate'].to_a
if defined?(ENGINE_PATH) && engine = Rails::Engine.find(ENGINE_PATH)

@ -98,14 +98,15 @@ def threadsafe!
end
# Loads and returns the configuration of the database.
# First, looks at If ENV['DATABASE_URL'] if it's not present it uses the #paths["config/database"]
# The contents of the file are processed via ERB before being sent through YAML::load.
def database_configuration
if ENV['DATABASE_URL']
{Rails.env => ActiveRecord::ConnectionAdapters::ConnectionSpecification::Resolver.connection_url_to_hash(ENV['DATABASE_URL']).stringify_keys}
yaml = paths["config/database"].first
if File.exists?(yaml)
require "erb"
YAML.load ERB.new(IO.read(yaml)).result
elsif ENV['DATABASE_URL']
nil
else
require 'erb'
YAML.load ERB.new(IO.read(paths["config/database"].first)).result
raise "Could not load database configuration. No such file - #{yaml}"
end
rescue Psych::SyntaxError => e
raise "YAML syntax error occurred while parsing #{paths["config/database"].first}. " \

@ -166,19 +166,6 @@ def db_test_load_structure
require "#{app_path}/config/environment"
db_test_load_structure
end
test 'db:test:load_structure with database_url' do
old_rails_env = ENV["RAILS_ENV"]
ENV["RAILS_ENV"] = 'test'
begin
require "#{app_path}/config/environment"
set_database_url
db_test_load_structure
ensure
ENV["RAILS_ENV"] = old_rails_env
end
end
end
end
end