db-charmer 1.8.4 → 1.9.0
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.
- checksums.yaml +15 -0
- data/CHANGES +19 -0
- data/README.rdoc +12 -537
- data/lib/db_charmer.rb +17 -52
- data/lib/db_charmer/active_record/class_attributes.rb +42 -27
- data/lib/db_charmer/active_record/connection_switching.rb +17 -14
- data/lib/db_charmer/active_record/db_magic.rb +3 -2
- data/lib/db_charmer/connection_factory.rb +13 -5
- data/lib/db_charmer/connection_proxy.rb +30 -1
- data/lib/db_charmer/force_slave_reads.rb +27 -8
- data/lib/db_charmer/sharding/stub_connection.rb +6 -0
- data/lib/db_charmer/version.rb +2 -2
- data/lib/db_charmer/with_remapped_databases.rb +49 -0
- data/lib/tasks/databases.rake +5 -1
- metadata +14 -26
@@ -37,6 +37,12 @@ module DbCharmer
|
|
37
37
|
@real_conn = ::ActiveRecord::Base.coerce_to_connection_proxy(conn, DbCharmer.connections_should_exist?)
|
38
38
|
end
|
39
39
|
|
40
|
+
def respond_to?(method_name, include_all = false)
|
41
|
+
return true if super
|
42
|
+
return false if real_connection.object_id == self.object_id
|
43
|
+
real_connection.respond_to?(method_name, include_all)
|
44
|
+
end
|
45
|
+
|
40
46
|
def method_missing(meth, *args, &block)
|
41
47
|
# Fail on database statements
|
42
48
|
if ::ActiveRecord::ConnectionAdapters::DatabaseStatements.instance_methods.member?(meth.to_s)
|
data/lib/db_charmer/version.rb
CHANGED
@@ -0,0 +1,49 @@
|
|
1
|
+
module DbCharmer
|
2
|
+
def self.with_remapped_databases(mappings, &proc)
|
3
|
+
old_mappings = ::ActiveRecord::Base.db_charmer_database_remappings
|
4
|
+
begin
|
5
|
+
::ActiveRecord::Base.db_charmer_database_remappings = mappings
|
6
|
+
if mappings[:master] || mappings['master']
|
7
|
+
with_all_hijacked(&proc)
|
8
|
+
else
|
9
|
+
proc.call
|
10
|
+
end
|
11
|
+
ensure
|
12
|
+
::ActiveRecord::Base.db_charmer_database_remappings = old_mappings
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.hijack_new_classes?
|
17
|
+
!! Thread.current[:db_charmer_hijack_new_classes]
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def self.with_all_hijacked
|
23
|
+
old_hijack_new_classes = Thread.current[:db_charmer_hijack_new_classes]
|
24
|
+
begin
|
25
|
+
Thread.current[:db_charmer_hijack_new_classes] = true
|
26
|
+
subclasses_method = DbCharmer.rails3? ? :descendants : :subclasses
|
27
|
+
::ActiveRecord::Base.send(subclasses_method).each do |subclass|
|
28
|
+
subclass.hijack_connection!
|
29
|
+
end
|
30
|
+
yield
|
31
|
+
ensure
|
32
|
+
Thread.current[:db_charmer_hijack_new_classes] = old_hijack_new_classes
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
#---------------------------------------------------------------------------------------------------
|
38
|
+
# Hijack connection on all new AR classes when we're in a block with main AR connection remapped
|
39
|
+
class ActiveRecord::Base
|
40
|
+
class << self
|
41
|
+
def inherited_with_hijacking(subclass)
|
42
|
+
out = inherited_without_hijacking(subclass)
|
43
|
+
hijack_connection! if DbCharmer.hijack_new_classes?
|
44
|
+
out
|
45
|
+
end
|
46
|
+
|
47
|
+
alias_method_chain :inherited, :hijacking
|
48
|
+
end
|
49
|
+
end
|
data/lib/tasks/databases.rake
CHANGED
@@ -68,7 +68,11 @@ namespace :db_charmer do
|
|
68
68
|
end
|
69
69
|
|
70
70
|
def drop_core_and_sub_database(config)
|
71
|
-
|
71
|
+
begin
|
72
|
+
drop_database(config)
|
73
|
+
rescue
|
74
|
+
$stderr.puts "#{config['database']} not exists"
|
75
|
+
end
|
72
76
|
config.each_value do | sub_config |
|
73
77
|
next unless sub_config.is_a?(Hash)
|
74
78
|
next unless sub_config['database']
|
metadata
CHANGED
@@ -1,52 +1,46 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: db-charmer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
5
|
-
prerelease:
|
4
|
+
version: 1.9.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Oleksiy Kovyrin
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-11-10 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: activesupport
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - <
|
20
18
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
19
|
+
version: 4.0.0
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - <
|
28
25
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
26
|
+
version: 4.0.0
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: activerecord
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - <
|
36
32
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
33
|
+
version: 4.0.0
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - <
|
44
39
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
40
|
+
version: 4.0.0
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rspec
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ! '>='
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ! '>='
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: yard
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ! '>='
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ! '>='
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,7 +69,6 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: actionpack
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
73
|
- - ! '>='
|
84
74
|
- !ruby/object:Gem::Version
|
@@ -86,7 +76,6 @@ dependencies:
|
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
80
|
- - ! '>='
|
92
81
|
- !ruby/object:Gem::Version
|
@@ -133,6 +122,7 @@ files:
|
|
133
122
|
- lib/db_charmer/sharding/stub_connection.rb
|
134
123
|
- lib/db_charmer/sharding.rb
|
135
124
|
- lib/db_charmer/version.rb
|
125
|
+
- lib/db_charmer/with_remapped_databases.rb
|
136
126
|
- lib/db_charmer.rb
|
137
127
|
- lib/tasks/databases.rake
|
138
128
|
- init.rb
|
@@ -141,28 +131,26 @@ files:
|
|
141
131
|
- CHANGES
|
142
132
|
homepage: http://dbcharmer.net
|
143
133
|
licenses: []
|
134
|
+
metadata: {}
|
144
135
|
post_install_message:
|
145
136
|
rdoc_options:
|
146
137
|
- --charset=UTF-8
|
147
138
|
require_paths:
|
148
139
|
- lib
|
149
140
|
required_ruby_version: !ruby/object:Gem::Requirement
|
150
|
-
none: false
|
151
141
|
requirements:
|
152
142
|
- - ! '>='
|
153
143
|
- !ruby/object:Gem::Version
|
154
144
|
version: '0'
|
155
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
|
-
none: false
|
157
146
|
requirements:
|
158
147
|
- - ! '>='
|
159
148
|
- !ruby/object:Gem::Version
|
160
149
|
version: '0'
|
161
150
|
requirements: []
|
162
151
|
rubyforge_project:
|
163
|
-
rubygems_version: 1.
|
152
|
+
rubygems_version: 2.1.10
|
164
153
|
signing_key:
|
165
|
-
specification_version:
|
154
|
+
specification_version: 4
|
166
155
|
summary: ActiveRecord Connections Magic (slaves, multiple connections, etc)
|
167
156
|
test_files: []
|
168
|
-
has_rdoc:
|