Skip to content

Commit e6087bd

Browse files
authored
Merge pull request rails#47424 from eileencodes/support-string-or-symbol-for-owner_name
Support string or symbol for owner_name
2 parents 6af9cba + 5f39b8e commit e6087bd

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

activerecord/lib/active_record/connection_adapters/abstract/connection_handler.rb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ def each_connection_pool(role = nil, &block) # :nodoc:
127127
end
128128

129129
def establish_connection(config, owner_name: Base, role: ActiveRecord::Base.current_role, shard: Base.current_shard)
130-
owner_name = StringConnectionName.new(config.to_s) if config.is_a?(Symbol)
130+
owner_name = determine_owner_name(owner_name, config)
131131

132132
pool_config = resolve_pool_config(config, owner_name, role, shard)
133133
db_config = pool_config.db_config
@@ -349,6 +349,16 @@ def resolve_pool_config(config, connection_name, role, shard)
349349

350350
ConnectionAdapters::PoolConfig.new(connection_name, db_config, role, shard)
351351
end
352+
353+
def determine_owner_name(owner_name, config)
354+
if owner_name.is_a?(String) || owner_name.is_a?(Symbol)
355+
StringConnectionName.new(owner_name.to_s)
356+
elsif config.is_a?(Symbol)
357+
StringConnectionName.new(config.to_s)
358+
else
359+
owner_name
360+
end
361+
end
352362
end
353363
end
354364
end

activerecord/test/cases/connection_adapters/connection_handler_test.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,22 @@ def test_establish_connection_using_top_level_key_in_two_level_config
195195
ActiveRecord::Base.configurations = @prev_configs
196196
end
197197

198+
def test_establish_connection_with_string_owner_name
199+
config = {
200+
"development" => { "adapter" => "sqlite3", "database" => "test/db/primary.sqlite3" },
201+
"development_readonly" => { "adapter" => "sqlite3", "database" => "test/db/readonly.sqlite3" }
202+
}
203+
@prev_configs, ActiveRecord::Base.configurations = ActiveRecord::Base.configurations, config
204+
205+
@handler.establish_connection(:development_readonly, owner_name: "custom_connection")
206+
207+
assert_not_nil pool = @handler.retrieve_connection_pool("custom_connection")
208+
assert_not_predicate pool.connection, :preventing_writes?
209+
assert_equal "test/db/readonly.sqlite3", pool.db_config.database
210+
ensure
211+
ActiveRecord::Base.configurations = @prev_configs
212+
end
213+
198214
def test_symbolized_configurations_assignment
199215
@prev_configs = ActiveRecord::Base.configurations
200216
config = {

0 commit comments

Comments
 (0)