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.
@@ -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)
@@ -1,8 +1,8 @@
1
1
  module DbCharmer
2
2
  module Version
3
3
  MAJOR = 1
4
- MINOR = 8
5
- PATCH = 4
4
+ MINOR = 9
5
+ PATCH = 0
6
6
  BUILD = nil
7
7
 
8
8
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
@@ -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
@@ -68,7 +68,11 @@ namespace :db_charmer do
68
68
  end
69
69
 
70
70
  def drop_core_and_sub_database(config)
71
- drop_database(config)
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.8.4
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-03-18 00:00:00.000000000 Z
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: 3.2.13
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: 3.2.13
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: 3.2.13
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: 3.2.13
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.8.24
152
+ rubygems_version: 2.1.10
164
153
  signing_key:
165
- specification_version: 3
154
+ specification_version: 4
166
155
  summary: ActiveRecord Connections Magic (slaves, multiple connections, etc)
167
156
  test_files: []
168
- has_rdoc: