activerecord-connections 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "activerecord-connections"
3
- s.version = "0.0.1"
3
+ s.version = "0.0.2"
4
4
  s.authors = ["Gabriel Sobrinho"]
5
5
  s.email = ["gabriel.sobrinho@gmail.com"]
6
6
  s.homepage = "https://github.com/sobrinho/activerecord-connections"
@@ -1,8 +1,9 @@
1
+ require 'active_support'
1
2
  require 'active_support/concern'
2
3
 
3
4
  module ActiveRecord
4
5
  module Connections
5
- autoload :ConnectionFactory, 'active_record/connections/connection_factory'
6
+ autoload :ConnectionProxy, 'active_record/connections/connection_proxy'
6
7
 
7
8
  extend ActiveSupport::Concern
8
9
 
@@ -33,7 +34,7 @@ module ActiveRecord
33
34
  # end
34
35
  #
35
36
  def using_connection(connection_name, connection_spec)
36
- self.proxy_connection = ConnectionFactory.establish_connection(connection_name, connection_spec)
37
+ self.proxy_connection = ConnectionProxy.new(connection_name, connection_spec)
37
38
 
38
39
  def self.connection_pool
39
40
  connection_handler.retrieve_connection_pool(proxy_connection)
@@ -0,0 +1,40 @@
1
+ require 'active_support/basic_object'
2
+
3
+ module ActiveRecord
4
+ module Connections
5
+ class ConnectionProxy < ActiveSupport::BasicObject
6
+ def initialize(connection_name, connection_spec)
7
+ @connection_name, @connection_spec = connection_name, connection_spec
8
+ end
9
+
10
+ def respond_to?(method_name, include_private = false)
11
+ connection.respond_to?(method_name, include_private)
12
+ end
13
+
14
+ def method_missing(method_name, *arguments, &block)
15
+ connection.send(method_name, *arguments, &block)
16
+ end
17
+
18
+ private
19
+
20
+ def connection
21
+ @connection ||= retrieve_connection_klass rescue fabricate_connection_klass
22
+ end
23
+
24
+ def retrieve_connection_klass
25
+ "ActiveRecord::Connections::AbstractConnection#{@connection_name}".constantize
26
+ end
27
+
28
+ def fabricate_connection_klass
29
+ ::ActiveRecord::Connections.class_eval <<-RUBY
30
+ class AbstractConnection#{@connection_name} < ActiveRecord::Base
31
+ self.abstract_class = true
32
+ self.establish_connection(#{@connection_spec.inspect})
33
+
34
+ self
35
+ end
36
+ RUBY
37
+ end
38
+ end
39
+ end
40
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: activerecord-connections
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Gabriel Sobrinho
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-08-22 00:00:00 -03:00
13
+ date: 2011-08-24 00:00:00 -03:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -96,7 +96,7 @@ files:
96
96
  - Rakefile
97
97
  - activerecord-connections.gemspec
98
98
  - lib/active_record/connections.rb
99
- - lib/active_record/connections/connection_factory.rb
99
+ - lib/active_record/connections/connection_proxy.rb
100
100
  - lib/activerecord-connections.rb
101
101
  - test/active_record/connections_test.rb
102
102
  - test/db/migrate/20110822114329_create_customers.rb
@@ -1,43 +0,0 @@
1
- #
2
- # This class is used to automatically generate small abstract ActiveRecord classes
3
- # that would then be used as a source of database connections for ActiveRecord::Connections.
4
- # This way we do not need to re-implement all the connection establishing code
5
- # that ActiveRecord already has and we make our code less dependant on Rails versions.
6
- #
7
- module ActiveRecord
8
- module Connections
9
- class ConnectionFactory
10
- cattr_accessor :connection_classes
11
- self.connection_classes = {}
12
-
13
- # Establishes connection or return an existing one from cache
14
- def self.establish_connection(connection_name, connection_spec)
15
- connection_classes[connection_name] ||= make_connection_klass(connection_name, connection_spec)
16
- end
17
-
18
- protected
19
-
20
- # Generate an abstract AR class with specified connection established
21
- def self.make_connection_klass(connection_name, connection_spec)
22
- # Generate class
23
- klass = generate_connection_klass(connection_name)
24
-
25
- # Establish connection
26
- klass.establish_connection(connection_spec)
27
-
28
- # Return the class
29
- return klass
30
- end
31
-
32
- def self.generate_connection_klass(connection_name)
33
- class_eval <<-RUBY
34
- class AbstractConnection#{connection_name} < ActiveRecord::Base
35
- self.abstract_class = true
36
-
37
- self
38
- end
39
- RUBY
40
- end
41
- end
42
- end
43
- end