diff options
author | Eileen M. Uchitelle <eileencodes@users.noreply.github.com> | 2019-08-02 08:50:27 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-02 08:50:27 -0400 |
commit | f3c68c59ed57302ca54f4dfad0e91dbff426962d (patch) | |
tree | 585a98f99c4c411835b97bee31ca5cbfe715f74e | |
parent | 92cb55ce19b3d6d308318f15fdc43b1e5fa67f46 (diff) | |
parent | dde03a9234e9b7fe802a45d511720c0ac3bf7617 (diff) | |
download | rails-f3c68c59ed57302ca54f4dfad0e91dbff426962d.tar.gz rails-f3c68c59ed57302ca54f4dfad0e91dbff426962d.tar.bz2 rails-f3c68c59ed57302ca54f4dfad0e91dbff426962d.zip |
Merge pull request #36814 from eileencodes/introduce-invalid-configuration-error
Introduce InvalidConfigurationError
-rw-r--r-- | activerecord/lib/active_record/database_configurations.rb | 10 | ||||
-rw-r--r-- | activerecord/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb | 16 |
2 files changed, 23 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/database_configurations.rb b/activerecord/lib/active_record/database_configurations.rb index c56a099769..268be34b21 100644 --- a/activerecord/lib/active_record/database_configurations.rb +++ b/activerecord/lib/active_record/database_configurations.rb @@ -9,6 +9,8 @@ module ActiveRecord # objects (either a HashConfig or UrlConfig) that are constructed from the # application's database configuration hash or URL string. class DatabaseConfigurations + class InvalidConfigurationError < StandardError; end + attr_reader :configurations delegate :any?, to: :configurations @@ -146,17 +148,19 @@ module ActiveRecord build_db_config_from_string(env_name, spec_name, config) when Hash build_db_config_from_hash(env_name, spec_name, config.stringify_keys) + else + raise InvalidConfigurationError, "'{ #{env_name} => #{config} }' is not a valid configuration. Expected '#{config}' to be a URL string or a Hash." end end def build_db_config_from_string(env_name, spec_name, config) url = config uri = URI.parse(url) - if uri&.scheme + if uri.scheme ActiveRecord::DatabaseConfigurations::UrlConfig.new(env_name, spec_name, url) + else + raise InvalidConfigurationError, "'{ #{env_name} => #{config} }' is not a valid configuration. Expected '#{config}' to be a URL string or a Hash." end - rescue URI::InvalidURIError - ActiveRecord::DatabaseConfigurations::HashConfig.new(env_name, spec_name, config) end def build_db_config_from_hash(env_name, spec_name, config) diff --git a/activerecord/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb b/activerecord/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb index ee2972101f..2ac249b478 100644 --- a/activerecord/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb +++ b/activerecord/test/cases/connection_adapters/merge_and_resolve_default_url_config_test.rb @@ -28,6 +28,22 @@ module ActiveRecord resolver.resolve(spec, spec) end + def test_invalid_string_config + config = { "foo" => "bar" } + + assert_raises ActiveRecord::DatabaseConfigurations::InvalidConfigurationError do + resolve_config(config) + end + end + + def test_invalid_symbol_config + config = { "foo" => :bar } + + assert_raises ActiveRecord::DatabaseConfigurations::InvalidConfigurationError do + resolve_config(config) + end + end + def test_resolver_with_database_uri_and_current_env_symbol_key ENV["DATABASE_URL"] = "postgres://localhost/foo" config = { "not_production" => { "adapter" => "not_postgres", "database" => "not_foo" } } |