knockoff 1.0 → 1.1.0.alpha
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 +4 -4
- data/.travis.yml +1 -1
- data/CHANGELOG.md +6 -0
- data/README.md +2 -6
- data/knockoff.gemspec +1 -1
- data/lib/knockoff.rb +7 -2
- data/lib/knockoff/active_record/base.rb +2 -1
- data/lib/knockoff/base.rb +8 -4
- data/lib/knockoff/version.rb +1 -1
- metadata +10 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9352faddb2bf60d2ddf6f3c91c9e03bce498a41
|
4
|
+
data.tar.gz: c4bb57f7a8b240d71ca164d489de9b26535ce53b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13d2338a6425fe9eea71c30b8b838f7df6fe9c69e369193b67bd3be59c739062a8f0515f7cc28c2846e0df743d9745467b5e3b5e3cf2bfdbeb680719c2bc4efd
|
7
|
+
data.tar.gz: ffda5a9534ca24f6dfb85d59ea3a225bd5759a50eaa94f71ae869396abf7d7806fa05583108adfbd240abb0c5356b2d9b3bf241af0dc0f59fb3c0edeab906d1a
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,6 @@
|
|
1
|
+
## Unreleased
|
2
|
+
|
3
|
+
- Allow for not checking `inside_transaction?` on primary database (https://github.com/joinhandshake/knockoff/pull/13)
|
4
|
+
- Allow setting `Knockoff.default_target` to set the default target other than `:primary` (https://github.com/joinhandshake/knockoff/pull/11)
|
5
|
+
- Drop Ruby 2.2 support
|
6
|
+
- Add Ruby 2.5 support
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Knockoff
|
2
2
|
|
3
|
-
[](https://travis-ci.org/joinhandshake/knockoff)
|
4
4
|
[](https://badge.fury.io/rb/knockoff)
|
5
5
|
|
6
6
|
A gem for easily using read replicas.
|
@@ -188,10 +188,6 @@ There are likely other cases specific to each application where it makes sense t
|
|
188
188
|
|
189
189
|
* Do not use prepared statements with this gem
|
190
190
|
|
191
|
-
## Inspirations
|
192
|
-
|
193
|
-
Based off of and inspired by https://github.com/kenn/slavery and https://github.com/kickstarter/replica_pools gem.
|
194
|
-
|
195
191
|
## Development
|
196
192
|
|
197
193
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -200,7 +196,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
200
196
|
|
201
197
|
## Contributing
|
202
198
|
|
203
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
199
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/joinhandshake/knockoff.
|
204
200
|
|
205
201
|
## License
|
206
202
|
|
data/knockoff.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_runtime_dependency 'activerecord', '>= 4.0.0'
|
22
22
|
spec.add_runtime_dependency 'activesupport', '>= 4.0.0'
|
23
23
|
|
24
|
-
spec.add_development_dependency "bundler"
|
24
|
+
spec.add_development_dependency "bundler"
|
25
25
|
spec.add_development_dependency "rake", "~> 10.0"
|
26
26
|
spec.add_development_dependency "rspec"
|
27
27
|
spec.add_development_dependency 'sqlite3'
|
data/lib/knockoff.rb
CHANGED
@@ -10,15 +10,20 @@ require 'knockoff/active_record/relation'
|
|
10
10
|
module Knockoff
|
11
11
|
class << self
|
12
12
|
attr_accessor :enabled
|
13
|
+
attr_reader :default_target
|
13
14
|
|
14
|
-
def on_replica(&block)
|
15
|
-
Base.new(:replica).run(&block)
|
15
|
+
def on_replica(check_transaction: true, &block)
|
16
|
+
Base.new(:replica, check_transaction: check_transaction).run(&block)
|
16
17
|
end
|
17
18
|
|
18
19
|
def on_primary(&block)
|
19
20
|
Base.new(:primary).run(&block)
|
20
21
|
end
|
21
22
|
|
23
|
+
def default_target=(target)
|
24
|
+
@default_target = Base.new(target).target
|
25
|
+
end
|
26
|
+
|
22
27
|
def replica_pool
|
23
28
|
@replica_pool ||= ReplicaConnectionPool.new(config.replica_database_keys)
|
24
29
|
end
|
@@ -4,7 +4,8 @@ module ActiveRecord
|
|
4
4
|
alias_method :original_connection, :connection
|
5
5
|
|
6
6
|
def connection
|
7
|
-
|
7
|
+
target = Thread.current[:knockoff] || Knockoff.default_target
|
8
|
+
case target
|
8
9
|
when :replica
|
9
10
|
# Attempts to use a random replica connection, but otherwise falls back to primary
|
10
11
|
Knockoff.replica_pool.random_replica_connection.original_connection
|
data/lib/knockoff/base.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
module Knockoff
|
2
2
|
class Base
|
3
|
-
|
4
|
-
|
3
|
+
attr_reader :target
|
4
|
+
|
5
|
+
def initialize(target, check_transaction: true)
|
6
|
+
@target = decide_with(target, check_transaction)
|
5
7
|
end
|
6
8
|
|
7
9
|
def run(&block)
|
@@ -10,7 +12,7 @@ module Knockoff
|
|
10
12
|
|
11
13
|
private
|
12
14
|
|
13
|
-
def decide_with(target)
|
15
|
+
def decide_with(target, check_transaction)
|
14
16
|
calculated_target =
|
15
17
|
if Knockoff.enabled
|
16
18
|
target
|
@@ -19,7 +21,9 @@ module Knockoff
|
|
19
21
|
end
|
20
22
|
|
21
23
|
# Don't allow setting the target to anything other than primary if we are already in a transaction
|
22
|
-
|
24
|
+
if calculated_target != :primary && check_transaction && inside_transaction?
|
25
|
+
raise Knockoff::Error.new('on_replica cannot be used inside transaction block!')
|
26
|
+
end
|
23
27
|
calculated_target
|
24
28
|
end
|
25
29
|
|
data/lib/knockoff/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knockoff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0.alpha
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Scott Ringwelski
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -42,16 +42,16 @@ dependencies:
|
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -104,6 +104,7 @@ files:
|
|
104
104
|
- ".gitignore"
|
105
105
|
- ".rspec"
|
106
106
|
- ".travis.yml"
|
107
|
+
- CHANGELOG.md
|
107
108
|
- Gemfile
|
108
109
|
- LICENSE.txt
|
109
110
|
- README.md
|
@@ -135,14 +136,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
135
136
|
version: '0'
|
136
137
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
138
|
requirements:
|
138
|
-
- - "
|
139
|
+
- - ">"
|
139
140
|
- !ruby/object:Gem::Version
|
140
|
-
version:
|
141
|
+
version: 1.3.1
|
141
142
|
requirements: []
|
142
143
|
rubyforge_project:
|
143
|
-
rubygems_version: 2.
|
144
|
+
rubygems_version: 2.6.13
|
144
145
|
signing_key:
|
145
146
|
specification_version: 4
|
146
147
|
summary: A gem for easily using read replicas
|
147
148
|
test_files: []
|
148
|
-
has_rdoc:
|