database_slave 0.1.1 → 0.1.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.
- checksums.yaml +8 -8
- data/CHANGELOG +8 -2
- data/README.md +2 -0
- data/lib/database_slave/base.rb +26 -0
- data/lib/database_slave/connection_handler.rb +2 -1
- data/lib/database_slave/errors.rb +19 -0
- data/lib/database_slave/relation.rb +8 -1
- data/lib/database_slave/version.rb +1 -1
- data/lib/database_slave.rb +1 -0
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZjI2MGU0NGYzZWZmNGE4MGU2MTRmZTJiYWQ4NjMwNWQ0Mzg1OTE4Yg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NmU3NzE0ZjM1ZjVmMTc5N2QwMzg1MGViM2QzNDQzYjFkMmQyMTdlNQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZDcwNTc3YjFlY2U3NDYyMzU0MjNkZGM1MjNlODgyMTFhMTNkNjAxODQ3ZmQ3
|
10
|
+
NTJjNWZiYzkyYjc1MDVhYTQxOGU3MDg0Mzc5NGQ4ZDFiZDQwZDk2MzEyMWQz
|
11
|
+
ZDVlNmQyNjExMGY4MmIyYWZiMGY4NWJmMDJiZjgzMTU1OTNhMWY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OGZiMzhiMzA3OWFhMDBjODFmYTJkZmYwMmE1MzZlMjExNGI1ZGVjNTEwMTEz
|
14
|
+
YThiZjJiZWY4YjA2MjRjOTA1OWY4Zjg1MTYyOTllYTllYTZjNTZkNmVhYWVl
|
15
|
+
ZDRlMWRkMmMyODBjYTVhYWNjMTc5YTNhMjc3ZTU3Yzc0NTViMjc=
|
data/CHANGELOG
CHANGED
@@ -1,4 +1,10 @@
|
|
1
|
+
0.1.2 - 2015-03-31
|
2
|
+
* support new usage:
|
3
|
+
ActiveRecord::Base.using(:slave_name) do
|
4
|
+
end
|
5
|
+
* prevent usage: ActiveRecord::Base.using(:slave_name).where()
|
6
|
+
* add error classes
|
1
7
|
0.1.1 - 2015.03.31
|
2
8
|
* alias using using_slave
|
3
|
-
*
|
4
|
-
* supprt pluck/count/sum etc.
|
9
|
+
* bug fixed: 父查询中包含default_scope等子查询时导致父查询不走从库
|
10
|
+
* supprt includes/pluck/count/sum etc.
|
data/README.md
CHANGED
data/lib/database_slave/base.rb
CHANGED
@@ -10,6 +10,32 @@ module DatabaseSlave
|
|
10
10
|
delegate :using_slave, :using, to: :scoped
|
11
11
|
end
|
12
12
|
end
|
13
|
+
|
14
|
+
module ClassMethods
|
15
|
+
# 为了兼容老版本
|
16
|
+
# ActiveRecord::Base.using(:slave_name) do
|
17
|
+
# end
|
18
|
+
# 的写法, 这里迫不得已重写了scoped方法, 目的是:
|
19
|
+
#
|
20
|
+
# 当使用如上方式时, 将其using()方法代理到一个继承了ActiveRecord::Base的
|
21
|
+
# 空的具象类DatabaseSlave::NoneActiveRecord, 以便进而能够使用using方法,
|
22
|
+
# 因为ActiveRecord::Base是一个抽象类, 不能使用using方法.
|
23
|
+
#
|
24
|
+
# 且此种方式只能后接block, 不能用于级联式. 使用级联式会抛出异常, 具体见
|
25
|
+
# ActiveRecord::Relation#using_slave中的实现.
|
26
|
+
#
|
27
|
+
def scoped(options = nil)
|
28
|
+
if self.equal? ActiveRecord::Base
|
29
|
+
# Module.const_get(ActiveRecord::Base.subclasses.map(&:name).sort.first) || self
|
30
|
+
DatabaseSlave::NoneActiveRecord
|
31
|
+
else
|
32
|
+
super
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class NoneActiveRecord < ActiveRecord::Base
|
13
39
|
end
|
14
40
|
end
|
15
41
|
|
@@ -30,7 +30,8 @@ module DatabaseSlave
|
|
30
30
|
klass = self.const_set(slave_name.to_s.strip.camelize, Class.new)
|
31
31
|
|
32
32
|
unless ActiveRecord::Base.respond_to?(spec.adapter_method)
|
33
|
-
raise
|
33
|
+
raise DatabaseSlave::AdapterNotFound,
|
34
|
+
"database configuration specifies not include #{config['adapter']} adapter"
|
34
35
|
end
|
35
36
|
|
36
37
|
ActiveRecord::Base.slave_connections << klass.name
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module DatabaseSlave
|
2
|
+
|
3
|
+
# Generic Database Slave exception class.
|
4
|
+
class DatabaseSlaveError < StandardError
|
5
|
+
end
|
6
|
+
|
7
|
+
# Raised when using_slave() method used on a abstract class
|
8
|
+
# without a block given.
|
9
|
+
# For example: ActiveRecord::Base.using_slave().where() is not allowed.
|
10
|
+
class AbstractClassWithoutBlockError < DatabaseSlaveError
|
11
|
+
end
|
12
|
+
|
13
|
+
# Raised when slave connection doesn't exists.
|
14
|
+
class SlaveConnectionNotExists < DatabaseSlaveError
|
15
|
+
end
|
16
|
+
|
17
|
+
class AdapterNotFound < DatabaseSlaveError
|
18
|
+
end
|
19
|
+
end
|
@@ -33,13 +33,20 @@ module DatabaseSlave
|
|
33
33
|
DatabaseSlave::RuntimeRegistry.current_slave_name = nil
|
34
34
|
end
|
35
35
|
else
|
36
|
+
# 不能使用抽象类级联式查询, 即不能使用ActiveRecord::Base.using().where()
|
37
|
+
if self.name.eql? DatabaseSlave::NoneActiveRecord.name
|
38
|
+
raise DatabaseSlave::AbstractClassWithoutBlockError,
|
39
|
+
'a block must be given to abstract class, or you can use a specific class.'
|
40
|
+
end
|
41
|
+
|
36
42
|
self.slave_name = "DatabaseSlave::ConnectionHandler::#{slave_name.to_s.strip.camelize}"
|
37
43
|
relation = clone
|
38
44
|
|
39
45
|
if ActiveRecord::Base.slave_connections.include? self.slave_name
|
40
46
|
relation
|
41
47
|
else
|
42
|
-
raise
|
48
|
+
raise DatabaseSlave::SlaveConnectionNotExists,
|
49
|
+
"#{slave_name} is not exists."
|
43
50
|
end
|
44
51
|
end
|
45
52
|
else
|
data/lib/database_slave.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: database_slave
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hayden Wei
|
@@ -26,6 +26,7 @@ files:
|
|
26
26
|
- lib/database_slave/base.rb
|
27
27
|
- lib/database_slave/configuration.rb
|
28
28
|
- lib/database_slave/connection_handler.rb
|
29
|
+
- lib/database_slave/errors.rb
|
29
30
|
- lib/database_slave/railtie.rb
|
30
31
|
- lib/database_slave/relation.rb
|
31
32
|
- lib/database_slave/runtime_registry.rb
|