Skip to content

Commit 28cd12c

Browse files
authored
Merge pull request #28896 from pschambacher/load_with_shared
Added a shared section to config/database.yml that will be loaded for all envs
2 parents 1583e26 + dfc361d commit 28cd12c

File tree

3 files changed

+49
-4
lines changed

3 files changed

+49
-4
lines changed

railties/CHANGELOG.md

+7-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1+
* Added a shared section to config/database.yml that will be loaded for all environments.
2+
3+
*Pierre Schambacher*
4+
15
* Namespace error pages' CSS selectors to stop the styles from bleeding into other pages
2-
when using Turbolinks.
3-
6+
when using Turbolinks.
7+
48
*Jan Krutisch*
59

6-
10+
711

812
Please check [5-1-stable](https://github.com/rails/rails/blob/5-1-stable/railties/CHANGELOG.md) for previous changes.

railties/lib/rails/application/configuration.rb

+8-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,14 @@ def database_configuration
133133
config = if yaml && yaml.exist?
134134
require "yaml"
135135
require "erb"
136-
YAML.load(ERB.new(yaml.read).result) || {}
136+
loaded_yaml = YAML.load(ERB.new(yaml.read).result) || {}
137+
shared = loaded_yaml.delete("shared")
138+
if shared
139+
loaded_yaml.each do |_k, values|
140+
values.reverse_merge!(shared)
141+
end
142+
end
143+
Hash.new(shared).merge(loaded_yaml)
137144
elsif ENV["DATABASE_URL"]
138145
# Value from ENV['DATABASE_URL'] is set to default database connection
139146
# by Active Record.

railties/test/application/configuration_test.rb

+34
Original file line numberDiff line numberDiff line change
@@ -1407,6 +1407,40 @@ def index
14071407
assert_match "config/database", err.message
14081408
end
14091409

1410+
test "loads database.yml using shared keys" do
1411+
app_file "config/database.yml", <<-YAML
1412+
shared:
1413+
username: bobby
1414+
adapter: sqlite3
1415+
1416+
development:
1417+
database: 'dev_db'
1418+
YAML
1419+
1420+
app "development"
1421+
1422+
ar_config = Rails.application.config.database_configuration
1423+
assert_equal "sqlite3", ar_config["development"]["adapter"]
1424+
assert_equal "bobby", ar_config["development"]["username"]
1425+
assert_equal "dev_db", ar_config["development"]["database"]
1426+
end
1427+
1428+
test "loads database.yml using shared keys for undefined environments" do
1429+
app_file "config/database.yml", <<-YAML
1430+
shared:
1431+
username: bobby
1432+
adapter: sqlite3
1433+
database: 'dev_db'
1434+
YAML
1435+
1436+
app "development"
1437+
1438+
ar_config = Rails.application.config.database_configuration
1439+
assert_equal "sqlite3", ar_config["development"]["adapter"]
1440+
assert_equal "bobby", ar_config["development"]["username"]
1441+
assert_equal "dev_db", ar_config["development"]["database"]
1442+
end
1443+
14101444
test "config.action_mailer.show_previews defaults to true in development" do
14111445
app "development"
14121446

0 commit comments

Comments
 (0)