active_record_shards 3.0.0.beta1 → 3.0.0.beta2
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 +7 -0
- data/lib/active_record_shards.rb +6 -10
- data/lib/active_record_shards/association_collection_connection_selection.rb +1 -6
- data/lib/active_record_shards/connection_specification.rb +1 -1
- data/lib/active_record_shards/connection_switcher.rb +5 -18
- data/lib/active_record_shards/default_slave_patches.rb +37 -44
- data/lib/active_record_shards/migration.rb +4 -11
- data/lib/active_record_shards/model.rb +0 -4
- data/lib/active_record_shards/tasks.rb +1 -1
- metadata +13 -43
- data/lib/active_record_shards/arel_engine.rb +0 -13
- data/test/configuration_parser_test.rb +0 -98
- data/test/connection_switching_test.rb +0 -515
- data/test/cowardly_migration/20110824010215_cowardly_migration.rb +0 -8
- data/test/database.yml +0 -73
- data/test/database_parse_test.yml +0 -21
- data/test/failure_migration/20110824010215_failure_migration.rb +0 -14
- data/test/helper.rb +0 -57
- data/test/migrations/20110824010216_shard_migration.rb +0 -12
- data/test/migrations/20110829215912_account_migration.rb +0 -13
- data/test/migrator_test.rb +0 -113
- data/test/models.rb +0 -38
- data/test/schema.rb +0 -36
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 6c4ca6523464fd8739f44b617fd634d0ade3a7e3
|
4
|
+
data.tar.gz: d21d6cfa9601754888ff291d367732d4642c4f8f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e8553793c3c910c79ea73251306ed33f41a2bce328a365bd8ee2ca20c644fc78c5b12a700b36c1d6ddaeeb62d34ffc10d5454221c6fba40e3e114d41f4930c94
|
7
|
+
data.tar.gz: 6b6725a7d70a810ee440366cd892cc4af3a26ac1cbdab855d5073b6e3c62202994a7c013da7869a16026f73f021c93313728cac7e3e6bc1ce6ae902a25938f99
|
data/lib/active_record_shards.rb
CHANGED
@@ -8,14 +8,10 @@ require 'active_record_shards/association_collection_connection_selection'
|
|
8
8
|
require 'active_record_shards/connection_pool'
|
9
9
|
require 'active_record_shards/migration'
|
10
10
|
require 'active_record_shards/default_slave_patches'
|
11
|
-
require 'active_record_shards/arel_engine'
|
12
11
|
require 'active_record_shards/connection_handler'
|
12
|
+
require 'active_record_shards/connection_specification'
|
13
13
|
|
14
|
-
if ActiveRecord::VERSION::
|
15
|
-
require 'active_record_shards/connection_specification'
|
16
|
-
end
|
17
|
-
|
18
|
-
if ActiveRecord::VERSION::STRING >= "4.0.0"
|
14
|
+
if ActiveRecord::VERSION::MAJOR >= 4
|
19
15
|
methods_to_override = [:establish_connection, :remove_connection, :pool_for,
|
20
16
|
:pool_from_any_process_for]
|
21
17
|
ActiveRecordShards::ConnectionSpecification = ActiveRecord::ConnectionAdapters::ConnectionSpecification
|
@@ -35,12 +31,12 @@ if ActiveRecord.const_defined?(:Relation)
|
|
35
31
|
ActiveRecord::Relation.send(:include, ActiveRecordShards::DefaultSlavePatches::ActiveRelationPatches)
|
36
32
|
end
|
37
33
|
|
38
|
-
if ActiveRecord::
|
39
|
-
ActiveRecord::Associations::
|
40
|
-
else
|
41
|
-
ActiveRecord::Associations::AssociationCollection.send(:include, ActiveRecordShards::AssociationCollectionConnectionSelection)
|
34
|
+
if ActiveRecord::Associations.const_defined?(:Preloader)
|
35
|
+
ActiveRecord::Associations::Preloader::HasAndBelongsToMany.send(:include, ActiveRecordShards::DefaultSlavePatches::HasAndBelongsToManyPreloaderPatches)
|
42
36
|
end
|
43
37
|
|
38
|
+
ActiveRecord::Associations::CollectionProxy.send(:include, ActiveRecordShards::AssociationCollectionConnectionSelection)
|
39
|
+
|
44
40
|
module ActiveRecordShards
|
45
41
|
def self.rails_env
|
46
42
|
env = Rails.env if Object.const_defined?(:Rails)
|
@@ -33,12 +33,7 @@ module ActiveRecordShards
|
|
33
33
|
def method_missing(method, *args, &block)
|
34
34
|
# would love to not rely on version here, unfortunately @association_collection
|
35
35
|
# is a sensitive little bitch of an object.
|
36
|
-
|
37
|
-
reflection = @association_collection.proxy_association.reflection
|
38
|
-
else
|
39
|
-
reflection = @association_collection.proxy_reflection
|
40
|
-
end
|
41
|
-
|
36
|
+
reflection = @association_collection.proxy_association.reflection
|
42
37
|
reflection.klass.on_cx_switch_block(@which) { @association_collection.send(method, *args, &block) }
|
43
38
|
end
|
44
39
|
end
|
@@ -10,7 +10,7 @@ class ActiveRecord::Base
|
|
10
10
|
remove_connection
|
11
11
|
specification_cache[connection_pool_name] = spec
|
12
12
|
|
13
|
-
if ActiveRecord::VERSION::
|
13
|
+
if ActiveRecord::VERSION::MAJOR >= 4
|
14
14
|
connection_handler.establish_connection self, spec
|
15
15
|
else
|
16
16
|
connection_handler.establish_connection connection_pool_name, spec
|
@@ -95,11 +95,7 @@ module ActiveRecordShards
|
|
95
95
|
if self == ActiveRecord::Base || !switch_to_slave || options[:construct_ro_scope] == false
|
96
96
|
yield
|
97
97
|
else
|
98
|
-
|
99
|
-
with_scope({:find => {:readonly => true}}, &block)
|
100
|
-
else
|
101
|
-
readonly.scoping(&block)
|
102
|
-
end
|
98
|
+
readonly.scoping(&block)
|
103
99
|
end
|
104
100
|
ensure
|
105
101
|
@disallow_slave -= 1 if which == :master
|
@@ -177,13 +173,8 @@ module ActiveRecordShards
|
|
177
173
|
# note that since we're subverting the standard establish_connection path, we have to handle the funky autoloading of the
|
178
174
|
# connection adapter ourselves.
|
179
175
|
specification_cache[name] ||= begin
|
180
|
-
|
181
|
-
|
182
|
-
resolver.spec
|
183
|
-
else
|
184
|
-
autoload_adapter(spec['adapter'])
|
185
|
-
ActiveRecordShards::ConnectionSpecification.new(spec, "#{spec['adapter']}_connection")
|
186
|
-
end
|
176
|
+
resolver = ActiveRecordShards::ConnectionSpecification::Resolver.new spec, configurations
|
177
|
+
resolver.spec
|
187
178
|
end
|
188
179
|
|
189
180
|
connection_handler.establish_connection(connection_pool_name, specification_cache[name])
|
@@ -194,15 +185,11 @@ module ActiveRecordShards
|
|
194
185
|
end
|
195
186
|
|
196
187
|
def connection_pool_key
|
197
|
-
|
198
|
-
specification_cache[connection_pool_name]
|
199
|
-
else
|
200
|
-
connection_pool_name
|
201
|
-
end
|
188
|
+
specification_cache[connection_pool_name]
|
202
189
|
end
|
203
190
|
|
204
191
|
def connected_to_shard?
|
205
|
-
if ActiveRecord::VERSION::MAJOR
|
192
|
+
if ActiveRecord::VERSION::MAJOR >= 4
|
206
193
|
specs_to_pools = Hash[connection_handler.connection_pool_list.map { |pool| [pool.spec, pool] }]
|
207
194
|
else
|
208
195
|
specs_to_pools = connection_handler.connection_pools
|
@@ -1,23 +1,32 @@
|
|
1
1
|
module ActiveRecordShards
|
2
2
|
module DefaultSlavePatches
|
3
|
-
|
3
|
+
def self.wrap_method_in_on_slave(class_method, base, method)
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
class << self
|
11
|
-
def #{slave_method}_with_default_slave#{punctuation}(*args, &block)
|
12
|
-
on_slave_unless_tx do
|
13
|
-
#{slave_method}_without_default_slave#{punctuation}(*args, &block)
|
14
|
-
end
|
15
|
-
end
|
5
|
+
if class_method
|
6
|
+
base_methods = (base.methods | base.private_methods).map(&:to_sym)
|
7
|
+
else
|
8
|
+
base_methods = (base.instance_methods | base.private_instance_methods).map(&:to_sym)
|
9
|
+
end
|
16
10
|
|
17
|
-
|
11
|
+
return unless base_methods.include?(method)
|
12
|
+
_, method, punctuation = method.to_s.match(/^(.*?)([\?\!]?)$/).to_a
|
13
|
+
base.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
14
|
+
#{class_method ? "class << self" : ""}
|
15
|
+
def #{method}_with_default_slave#{punctuation}(*args, &block)
|
16
|
+
on_slave_unless_tx do
|
17
|
+
#{method}_without_default_slave#{punctuation}(*args, &block)
|
18
|
+
end
|
18
19
|
end
|
19
|
-
|
20
|
-
|
20
|
+
|
21
|
+
alias_method_chain :#{method}#{punctuation}, :default_slave
|
22
|
+
#{class_method ? "end" : ""}
|
23
|
+
RUBY
|
24
|
+
end
|
25
|
+
|
26
|
+
CLASS_SLAVE_METHODS = [ :find_by_sql, :count_by_sql, :calculate, :find_one, :find_some, :find_every, :quote_value, :sanitize_sql_hash_for_conditions, :exists?, :table_exists? ]
|
27
|
+
|
28
|
+
def self.extended(base)
|
29
|
+
CLASS_SLAVE_METHODS.each { |m| ActiveRecordShards::DefaultSlavePatches.wrap_method_in_on_slave(true, base, m) }
|
21
30
|
|
22
31
|
base.class_eval do
|
23
32
|
# fix ActiveRecord to do the right thing, and use our aliased quote_value
|
@@ -58,33 +67,10 @@ module ActiveRecordShards
|
|
58
67
|
end
|
59
68
|
|
60
69
|
alias_method_chain :transaction, :slave_off
|
61
|
-
|
62
|
-
|
63
|
-
def table_exists_with_default_slave?(*args)
|
64
|
-
on_slave_unless_tx(*args) { table_exists_without_default_slave?(*args) }
|
65
|
-
end
|
66
|
-
|
67
|
-
alias_method_chain :table_exists?, :default_slave
|
68
70
|
end
|
69
71
|
end
|
70
|
-
|
71
|
-
|
72
|
-
ActiveRecord::Associations::HasAndBelongsToManyAssociation.class_eval do
|
73
|
-
def construct_sql_with_default_slave(*args, &block)
|
74
|
-
on_slave_unless_tx do
|
75
|
-
construct_sql_without_default_slave(*args, &block)
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def construct_find_options_with_default_slave!(*args, &block)
|
80
|
-
on_slave_unless_tx do
|
81
|
-
construct_find_options_without_default_slave!(*args, &block)
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
alias_method_chain :construct_sql, :default_slave if respond_to?(:construct_sql)
|
86
|
-
alias_method_chain :construct_find_options!, :default_slave if respond_to?(:construct_find_options!)
|
87
|
-
end
|
72
|
+
ActiveRecordShards::DefaultSlavePatches.wrap_method_in_on_slave(false, ActiveRecord::Associations::HasAndBelongsToManyAssociation, :construct_sql)
|
73
|
+
ActiveRecordShards::DefaultSlavePatches.wrap_method_in_on_slave(false, ActiveRecord::Associations::HasAndBelongsToManyAssociation, :construct_find_options!)
|
88
74
|
end
|
89
75
|
|
90
76
|
def on_slave_unless_tx(&block)
|
@@ -97,16 +83,23 @@ module ActiveRecordShards
|
|
97
83
|
|
98
84
|
module ActiveRelationPatches
|
99
85
|
def self.included(base)
|
100
|
-
|
101
|
-
|
86
|
+
ActiveRecordShards::DefaultSlavePatches.wrap_method_in_on_slave(false, base, :calculate)
|
87
|
+
ActiveRecordShards::DefaultSlavePatches.wrap_method_in_on_slave(false, base, :exists?)
|
88
|
+
ActiveRecordShards::DefaultSlavePatches.wrap_method_in_on_slave(false, base, :pluck)
|
102
89
|
end
|
103
90
|
|
104
91
|
def on_slave_unless_tx
|
105
92
|
@klass.on_slave_unless_tx { yield }
|
106
93
|
end
|
94
|
+
end
|
107
95
|
|
108
|
-
|
109
|
-
|
96
|
+
module HasAndBelongsToManyPreloaderPatches
|
97
|
+
def self.included(base)
|
98
|
+
ActiveRecordShards::DefaultSlavePatches.wrap_method_in_on_slave(false, base, :records_for) rescue nil
|
99
|
+
end
|
100
|
+
|
101
|
+
def on_slave_unless_tx
|
102
|
+
klass.on_slave_unless_tx { yield }
|
110
103
|
end
|
111
104
|
|
112
105
|
def exists_with_default_slave?(*args, &block)
|
@@ -106,18 +106,11 @@ end
|
|
106
106
|
ActiveRecord::Migration.class_eval do
|
107
107
|
extend ActiveRecordShards::MigrationClassExtension
|
108
108
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
self.class.migration_shard
|
113
|
-
end
|
114
|
-
alias_method_chain :migrate, :forced_shard
|
115
|
-
else
|
116
|
-
extend ActiveRecordShards::ActualMigrationExtension
|
117
|
-
class << self
|
118
|
-
alias_method_chain :migrate, :forced_shard
|
119
|
-
end
|
109
|
+
include ActiveRecordShards::ActualMigrationExtension
|
110
|
+
define_method :migration_shard do
|
111
|
+
self.class.migration_shard
|
120
112
|
end
|
113
|
+
alias_method_chain :migrate, :forced_shard
|
121
114
|
end
|
122
115
|
|
123
116
|
ActiveRecord::MigrationProxy.delegate :migration_shard, :to => :migration
|
@@ -48,10 +48,6 @@ module ActiveRecordShards
|
|
48
48
|
|
49
49
|
def self.extended(base)
|
50
50
|
base.send(:include, InstanceMethods)
|
51
|
-
if ActiveRecord::VERSION::MAJOR == 2 && !base.method_defined?(:after_initialize)
|
52
|
-
# trick rails 2 into running callbacks
|
53
|
-
base.send(:define_method, :after_initialize){}
|
54
|
-
end
|
55
51
|
base.after_initialize :initialize_shard_and_slave
|
56
52
|
end
|
57
53
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'active_record_shards'
|
2
2
|
|
3
3
|
%w[db:drop db:create db:abort_if_pending_migrations db:reset].each do |name|
|
4
|
-
Rake.
|
4
|
+
Rake::Task[name].clean
|
5
5
|
end
|
6
6
|
|
7
7
|
namespace :db do
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_record_shards
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0.
|
5
|
-
prerelease: 6
|
4
|
+
version: 3.0.0.beta2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Mick Staugaard
|
@@ -11,27 +10,25 @@ authors:
|
|
11
10
|
autorequire:
|
12
11
|
bindir: bin
|
13
12
|
cert_chain: []
|
14
|
-
date:
|
13
|
+
date: 2014-01-31 00:00:00.000000000 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: activerecord
|
18
17
|
requirement: !ruby/object:Gem::Requirement
|
19
|
-
none: false
|
20
18
|
requirements:
|
21
|
-
- -
|
19
|
+
- - '>='
|
22
20
|
- !ruby/object:Gem::Version
|
23
|
-
version: 2.
|
21
|
+
version: 3.2.16
|
24
22
|
- - <=
|
25
23
|
- !ruby/object:Gem::Version
|
26
24
|
version: '4.1'
|
27
25
|
type: :runtime
|
28
26
|
prerelease: false
|
29
27
|
version_requirements: !ruby/object:Gem::Requirement
|
30
|
-
none: false
|
31
28
|
requirements:
|
32
|
-
- -
|
29
|
+
- - '>='
|
33
30
|
- !ruby/object:Gem::Version
|
34
|
-
version: 2.
|
31
|
+
version: 3.2.16
|
35
32
|
- - <=
|
36
33
|
- !ruby/object:Gem::Version
|
37
34
|
version: '4.1'
|
@@ -44,7 +41,6 @@ executables: []
|
|
44
41
|
extensions: []
|
45
42
|
extra_rdoc_files: []
|
46
43
|
files:
|
47
|
-
- lib/active_record_shards/arel_engine.rb
|
48
44
|
- lib/active_record_shards/association_collection_connection_selection.rb
|
49
45
|
- lib/active_record_shards/configuration_parser.rb
|
50
46
|
- lib/active_record_shards/connection_handler.rb
|
@@ -58,54 +54,28 @@ files:
|
|
58
54
|
- lib/active_record_shards/tasks.rb
|
59
55
|
- lib/active_record_shards.rb
|
60
56
|
- README.md
|
61
|
-
|
62
|
-
- test/connection_switching_test.rb
|
63
|
-
- test/cowardly_migration/20110824010215_cowardly_migration.rb
|
64
|
-
- test/database.yml
|
65
|
-
- test/database_parse_test.yml
|
66
|
-
- test/failure_migration/20110824010215_failure_migration.rb
|
67
|
-
- test/helper.rb
|
68
|
-
- test/migrations/20110824010216_shard_migration.rb
|
69
|
-
- test/migrations/20110829215912_account_migration.rb
|
70
|
-
- test/migrator_test.rb
|
71
|
-
- test/models.rb
|
72
|
-
- test/schema.rb
|
73
|
-
homepage: http://github.com/zendesk/active_record_shards
|
57
|
+
homepage: https://github.com/zendesk/active_record_shards
|
74
58
|
licenses:
|
75
59
|
- MIT
|
60
|
+
metadata: {}
|
76
61
|
post_install_message:
|
77
62
|
rdoc_options: []
|
78
63
|
require_paths:
|
79
64
|
- lib
|
80
65
|
required_ruby_version: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
66
|
requirements:
|
83
|
-
- -
|
67
|
+
- - '>='
|
84
68
|
- !ruby/object:Gem::Version
|
85
69
|
version: '0'
|
86
70
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
|
-
none: false
|
88
71
|
requirements:
|
89
|
-
- -
|
72
|
+
- - '>'
|
90
73
|
- !ruby/object:Gem::Version
|
91
74
|
version: 1.3.1
|
92
75
|
requirements: []
|
93
76
|
rubyforge_project:
|
94
|
-
rubygems_version:
|
77
|
+
rubygems_version: 2.0.14
|
95
78
|
signing_key:
|
96
|
-
specification_version:
|
79
|
+
specification_version: 4
|
97
80
|
summary: Simple database switching for ActiveRecord.
|
98
|
-
test_files:
|
99
|
-
- test/configuration_parser_test.rb
|
100
|
-
- test/connection_switching_test.rb
|
101
|
-
- test/cowardly_migration/20110824010215_cowardly_migration.rb
|
102
|
-
- test/database.yml
|
103
|
-
- test/database_parse_test.yml
|
104
|
-
- test/failure_migration/20110824010215_failure_migration.rb
|
105
|
-
- test/helper.rb
|
106
|
-
- test/migrations/20110824010216_shard_migration.rb
|
107
|
-
- test/migrations/20110829215912_account_migration.rb
|
108
|
-
- test/migrator_test.rb
|
109
|
-
- test/models.rb
|
110
|
-
- test/schema.rb
|
111
|
-
has_rdoc:
|
81
|
+
test_files: []
|
@@ -1,13 +0,0 @@
|
|
1
|
-
if ActiveRecord::VERSION::MAJOR == 3 && ActiveRecord::VERSION::MINOR == 0
|
2
|
-
class ActiveRecord::Base
|
3
|
-
def self.arel_engine
|
4
|
-
@arel_engine ||= begin
|
5
|
-
if self == ActiveRecord::Base
|
6
|
-
Arel::Table.engine
|
7
|
-
else
|
8
|
-
connection_handler.connection_pools[connection_pool_name] ? self : superclass.arel_engine
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
@@ -1,98 +0,0 @@
|
|
1
|
-
require_relative 'helper'
|
2
|
-
|
3
|
-
describe ActiveRecordShards::ConfigurationParser do
|
4
|
-
describe "exploding the database.yml" do
|
5
|
-
before do
|
6
|
-
@exploded_conf = ActiveRecordShards::ConfigurationParser.explode(YAML::load(IO.read(File.dirname(__FILE__) + '/database_parse_test.yml')))
|
7
|
-
end
|
8
|
-
|
9
|
-
describe "main slave" do
|
10
|
-
before { @conf = @exploded_conf['test_slave'] }
|
11
|
-
it "be exploded" do
|
12
|
-
@conf["shard_names"] = @conf["shard_names"].to_set
|
13
|
-
assert_equal({
|
14
|
-
"adapter" => "mysql",
|
15
|
-
"encoding" => "utf8",
|
16
|
-
"database" => "ars_test",
|
17
|
-
"port" => 123,
|
18
|
-
"username" => "root",
|
19
|
-
"password" => nil,
|
20
|
-
"host" => "main_slave_host",
|
21
|
-
"shard_names" => ["a", "b"].to_set
|
22
|
-
}, @conf)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe "shard a" do
|
27
|
-
describe "master" do
|
28
|
-
before { @conf = @exploded_conf['test_shard_a'] }
|
29
|
-
it "be exploded" do
|
30
|
-
@conf["shard_names"] = @conf["shard_names"].to_set
|
31
|
-
assert_equal({
|
32
|
-
"adapter" => "mysql",
|
33
|
-
"encoding" => "utf8",
|
34
|
-
"database" => "ars_test_shard_a",
|
35
|
-
"port" => 123,
|
36
|
-
"username" => "root",
|
37
|
-
"password" => nil,
|
38
|
-
"host" => "shard_a_host",
|
39
|
-
"shard_names" => ["a", "b"].to_set
|
40
|
-
}, @conf)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe "slave" do
|
45
|
-
before { @conf = @exploded_conf['test_shard_a_slave'] }
|
46
|
-
it "be exploded" do
|
47
|
-
@conf["shard_names"] = @conf["shard_names"].to_set
|
48
|
-
assert_equal({
|
49
|
-
"adapter" => "mysql",
|
50
|
-
"encoding" => "utf8",
|
51
|
-
"database" => "ars_test_shard_a",
|
52
|
-
"port" => 123,
|
53
|
-
"username" => "root",
|
54
|
-
"password" => nil,
|
55
|
-
"host" => "shard_a_slave_host",
|
56
|
-
"shard_names" => ["a", "b"].to_set
|
57
|
-
}, @conf)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
describe "shard b" do
|
63
|
-
describe "master" do
|
64
|
-
before { @conf = @exploded_conf['test_shard_b'] }
|
65
|
-
it "be exploded" do
|
66
|
-
@conf["shard_names"] = @conf["shard_names"].to_set
|
67
|
-
assert_equal({
|
68
|
-
"adapter" => "mysql",
|
69
|
-
"encoding" => "utf8",
|
70
|
-
"database" => "ars_test_shard_b",
|
71
|
-
"port" => 123,
|
72
|
-
"username" => "root",
|
73
|
-
"password" => nil,
|
74
|
-
"host" => "shard_b_host",
|
75
|
-
"shard_names" => ["a", "b"].to_set
|
76
|
-
}, @conf)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
describe "slave" do
|
81
|
-
before { @conf = @exploded_conf['test_shard_b_slave'] }
|
82
|
-
it "be exploded" do
|
83
|
-
@conf["shard_names"] = @conf["shard_names"].to_set
|
84
|
-
assert_equal({
|
85
|
-
"adapter" => "mysql",
|
86
|
-
"encoding" => "utf8",
|
87
|
-
"database" => "ars_test_shard_b_slave",
|
88
|
-
"port" => 123,
|
89
|
-
"username" => "root",
|
90
|
-
"password" => nil,
|
91
|
-
"host" => "shard_b_host",
|
92
|
-
"shard_names" => ["a", "b"].to_set
|
93
|
-
}, @conf)
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|