aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/connection_specification.rb
diff options
context:
space:
mode:
authorArthur Neves <arthurnn@gmail.com>2016-05-04 00:46:38 -0500
committerArthur Neves <arthurnn@gmail.com>2016-05-05 15:29:11 -0500
commitb83fb847337b690ebbc96c55414157f71bbf8aa2 (patch)
tree63dbbbcdcad26fc4b69925578bd8a7e2d3a1f687 /activerecord/lib/active_record/connection_adapters/connection_specification.rb
parent3bed679670dd8348ffc348509a653677c6ecb7f3 (diff)
downloadrails-b83fb847337b690ebbc96c55414157f71bbf8aa2.tar.gz
rails-b83fb847337b690ebbc96c55414157f71bbf8aa2.tar.bz2
rails-b83fb847337b690ebbc96c55414157f71bbf8aa2.zip
Refactor connection handler
ConnectionHandler will not have any knowlodge of AR models now, it will only know about the specs. Like that we can decouple the two, and allow the same model to use more than one connection. Historically, folks used to create abstract AR classes on the fly in order to have multiple connections for the same model, and override the connection methods. With this, now we can override the `specificiation_id` method in the model, to return a key, that will be used to find the connection_pool from the handler.
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/connection_specification.rb')
-rw-r--r--activerecord/lib/active_record/connection_adapters/connection_specification.rb10
1 files changed, 5 insertions, 5 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/connection_specification.rb b/activerecord/lib/active_record/connection_adapters/connection_specification.rb
index 4bc6447368..5a18e95bcd 100644
--- a/activerecord/lib/active_record/connection_adapters/connection_specification.rb
+++ b/activerecord/lib/active_record/connection_adapters/connection_specification.rb
@@ -3,10 +3,10 @@ require 'uri'
module ActiveRecord
module ConnectionAdapters
class ConnectionSpecification #:nodoc:
- attr_reader :config, :adapter_method
+ attr_reader :config, :adapter_method, :id
- def initialize(config, adapter_method)
- @config, @adapter_method = config, adapter_method
+ def initialize(id, config, adapter_method)
+ @config, @adapter_method, @id = config, adapter_method, id
end
def initialize_dup(original)
@@ -164,7 +164,7 @@ module ActiveRecord
# spec.config
# # => { "host" => "localhost", "database" => "foo", "adapter" => "sqlite3" }
#
- def spec(config)
+ def spec(config, id = "primary")
spec = resolve(config).symbolize_keys
raise(AdapterNotSpecified, "database configuration does not specify adapter") unless spec.key?(:adapter)
@@ -179,7 +179,7 @@ module ActiveRecord
end
adapter_method = "#{spec[:adapter]}_connection"
- ConnectionSpecification.new(spec, adapter_method)
+ ConnectionSpecification.new(id, spec, adapter_method)
end
private