activerecord_partitioning 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md ADDED
@@ -0,0 +1,6 @@
1
+ ActiveRecord Partitioning
2
+ ======================
3
+
4
+ An ActiveRecord ConnectionPools class supports switching connection pool by database config instead of ActiveRecord model class name.
5
+
6
+ It is only support ActiveRecord 2.3.18 currently.
@@ -0,0 +1,39 @@
1
+ module ActiveRecordPartitioning
2
+ class NoActiveConnectionPoolError < StandardError
3
+ end
4
+
5
+ class ConnectionPools
6
+ attr_reader :store
7
+
8
+ def initialize(store={})
9
+ @store = store
10
+ end
11
+
12
+ def [](key)
13
+ config = ActiveRecordPartitioning.current_connection_pool_config
14
+ raise NoActiveConnectionPoolError if config.nil?
15
+ @store[connection_pool_key(config)]
16
+ end
17
+
18
+ def []=(key, pool)
19
+ @store[connection_pool_key(pool.spec.config)] = pool
20
+ end
21
+
22
+ def delete_if(&block)
23
+ @store.delete_if(&block)
24
+ end
25
+
26
+ def each_value(&block)
27
+ @store.each_value(&block)
28
+ end
29
+
30
+ def size
31
+ @store.size
32
+ end
33
+
34
+ private
35
+ def connection_pool_key(config)
36
+ config[:url]
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,28 @@
1
+ require 'active_record'
2
+ require 'activerecord_partitioning/connection_pools'
3
+
4
+ module ActiveRecordPartitioning
5
+ module_function
6
+ def setup(base_config = {}, pools = {})
7
+ @base_config = base_config.symbolize_keys
8
+ ActiveRecord::Base.connection_handler = ActiveRecord::ConnectionAdapters::ConnectionHandler.new(ConnectionPools.new(pools))
9
+ end
10
+
11
+ def with_connection_pool(config, &block)
12
+ self.current_connection_pool_config = config = config.symbolize_keys
13
+ if ActiveRecord::Base.connection_pool.nil?
14
+ ActiveRecord::Base.establish_connection(@base_config.merge(config))
15
+ end
16
+ yield if block_given?
17
+ ensure
18
+ self.current_connection_pool_config = nil
19
+ end
20
+
21
+ def current_connection_pool_config
22
+ Thread.current[:current_connection_pool_config]
23
+ end
24
+
25
+ def current_connection_pool_config=(config)
26
+ Thread.current[:current_connection_pool_config] = config
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,113 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: activerecord_partitioning
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Xiao Li
14
+ - sdqali
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2013-10-10 00:00:00 Z
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: activerecord
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - "="
28
+ - !ruby/object:Gem::Version
29
+ hash: 39
30
+ segments:
31
+ - 2
32
+ - 3
33
+ - 18
34
+ version: 2.3.18
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: rake
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 0
48
+ version: "0"
49
+ type: :development
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: sqlite3
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ hash: 3
60
+ segments:
61
+ - 0
62
+ version: "0"
63
+ type: :development
64
+ version_requirements: *id003
65
+ description: An ActiveRecord ConnectionPools class supports switching connection pool by database config instead of ActiveRecord model class name
66
+ email:
67
+ - swing1979@gmail.com
68
+ - sadiqalikm@gmail.com
69
+ executables: []
70
+
71
+ extensions: []
72
+
73
+ extra_rdoc_files: []
74
+
75
+ files:
76
+ - README.md
77
+ - lib/activerecord_partitioning/connection_pools.rb
78
+ - lib/activerecord_partitioning.rb
79
+ homepage: https://github.com/ThoughtWorksStudios/activerecord_partitioning
80
+ licenses:
81
+ - MIT
82
+ post_install_message:
83
+ rdoc_options: []
84
+
85
+ require_paths:
86
+ - lib
87
+ required_ruby_version: !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ hash: 3
93
+ segments:
94
+ - 0
95
+ version: "0"
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ hash: 3
102
+ segments:
103
+ - 0
104
+ version: "0"
105
+ requirements: []
106
+
107
+ rubyforge_project:
108
+ rubygems_version: 1.8.24
109
+ signing_key:
110
+ specification_version: 3
111
+ summary: An ActiveRecord ConnectionPools class supports switching connection pool by database config instead of ActiveRecord model class name
112
+ test_files: []
113
+