replica_pools 2.1.1 → 2.2.1
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 +5 -5
- data/README.md +5 -1
- data/lib/replica_pools/engine.rb +3 -3
- data/lib/replica_pools/pools.rb +11 -1
- data/lib/replica_pools/query_cache.rb +3 -1
- data/lib/replica_pools/version.rb +1 -1
- data/spec/query_cache_spec.rb +13 -0
- metadata +17 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b9a32096014e9f2cd137adb7c8fe226173f40d9dea893a319c0dab24cbdf8371
|
4
|
+
data.tar.gz: da62952df8213322963f8b8ce0c5da9ed8efe381c2348801794ec0ef0b6d294a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f2d2abc5f7badb102c8116213b306d35336f6d54c651a74d6fcaa0e37c53c5282c46fbc643984ffde43f5e54d868051c38590372b8af4329741da1247b68128
|
7
|
+
data.tar.gz: 51c4514ec6e0fa79ea2e6b128fd4d6d3866916d65d89ec743f49621678a5997c0dd3bc0bfe78a25acd72c39d61c5f13523a9f84a9160259966f9408f9c56b109
|
data/README.md
CHANGED
@@ -186,11 +186,15 @@ Then you can run tests with:
|
|
186
186
|
$ bundle exec rake spec
|
187
187
|
```
|
188
188
|
|
189
|
+
## Releasing a New Version
|
190
|
+
|
191
|
+
First bump the version as appropriate in `lib/replica_pools/version.rb` and then run `bundle exec rake release`. This will push git tags to github and package and push the gem to rubygems.org.
|
192
|
+
|
189
193
|
## Authors
|
190
194
|
|
191
195
|
Author: Dan Drabik, Lance Ivy
|
192
196
|
|
193
|
-
Copyright (c) 2012-
|
197
|
+
Copyright (c) 2012-2021, Kickstarter
|
194
198
|
|
195
199
|
Released under the MIT license
|
196
200
|
|
data/lib/replica_pools/engine.rb
CHANGED
@@ -21,15 +21,15 @@ module ReplicaPools
|
|
21
21
|
:select_rows, :select, :verify!, :raw_connection, :active?, :reconnect!,
|
22
22
|
:disconnect!, :reset_runtime, :log
|
23
23
|
]
|
24
|
-
elsif ActiveRecord::VERSION::MAJOR
|
24
|
+
elsif [5, 6].include?(ActiveRecord::VERSION::MAJOR)
|
25
25
|
[
|
26
26
|
:select_all, :select_one, :select_value, :select_values,
|
27
27
|
:select_rows, :select, :select_prepared, :verify!, :raw_connection,
|
28
28
|
:active?, :reconnect!, :disconnect!, :reset_runtime, :log,
|
29
29
|
:lookup_cast_type_from_column, :sanitize_limit,
|
30
|
-
:combine_bind_parameters, :quote_table_name, :quote, :quote_column_names, :quote_table_names,
|
30
|
+
:combine_bind_parameters, :quote_table_name, :quote, :quote_column_names, :quote_table_names, :table_alias_for,
|
31
31
|
:case_sensitive_comparison, :case_insensitive_comparison,
|
32
|
-
:schema_cache, :cacheable_query, :prepared_statements, :clear_cache
|
32
|
+
:schema_cache, :cacheable_query, :prepared_statements, :clear_cache!, :column_name_for_operation
|
33
33
|
]
|
34
34
|
else
|
35
35
|
warn "Unsupported ActiveRecord version #{ActiveRecord.version}. Please whitelist the safe methods."
|
data/lib/replica_pools/pools.rb
CHANGED
@@ -27,12 +27,22 @@ module ReplicaPools
|
|
27
27
|
|
28
28
|
# finds valid pool configs
|
29
29
|
def pool_configurations
|
30
|
-
|
30
|
+
config_hash.map do |name, config|
|
31
31
|
next unless name.to_s =~ /#{ReplicaPools.config.environment}_pool_(.*)_name_(.*)/
|
32
32
|
[name, $1, $2]
|
33
33
|
end.compact
|
34
34
|
end
|
35
35
|
|
36
|
+
def config_hash
|
37
|
+
if ActiveRecord::VERSION::MAJOR >= 6
|
38
|
+
# in Rails >= 6, `configurations` is an instance of ActiveRecord::DatabaseConfigurations
|
39
|
+
ActiveRecord::Base.configurations.to_h
|
40
|
+
else
|
41
|
+
# in Rails < 6, it's just a hash
|
42
|
+
ActiveRecord::Base.configurations
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
36
46
|
# generates a unique ActiveRecord::Base subclass for a single replica
|
37
47
|
def connection_class(pool_name, replica_name, connection_name)
|
38
48
|
class_name = "#{pool_name.camelize}#{replica_name.camelize}"
|
@@ -24,6 +24,8 @@ module ReplicaPools
|
|
24
24
|
# there may be more args for Rails 5.0+, but we only care about arel, name, and binds for caching.
|
25
25
|
relation, name, raw_binds = args
|
26
26
|
|
27
|
+
# Rails 6.2 breaks this method as locked? is no longer available
|
28
|
+
# https://github.com/kickstarter/replica_pools/issues/26
|
27
29
|
if !query_cache_enabled || locked?(relation)
|
28
30
|
return route_to(current, :select_all, *args)
|
29
31
|
end
|
@@ -32,7 +34,7 @@ module ReplicaPools
|
|
32
34
|
if raw_binds.blank? && relation.is_a?(ActiveRecord::Relation)
|
33
35
|
arel, binds = relation.arel, relation.bind_values
|
34
36
|
else
|
35
|
-
arel, binds = relation, raw_binds
|
37
|
+
arel, binds = relation, Array(raw_binds)
|
36
38
|
end
|
37
39
|
|
38
40
|
sql = to_sql(arel, binds)
|
data/spec/query_cache_spec.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'rack'
|
2
2
|
require_relative 'spec_helper'
|
3
|
+
require_relative 'config/test_model'
|
3
4
|
|
4
5
|
describe ReplicaPools::QueryCache do
|
5
6
|
before(:each) do
|
@@ -103,4 +104,16 @@ describe ReplicaPools::QueryCache do
|
|
103
104
|
end
|
104
105
|
end
|
105
106
|
end
|
107
|
+
|
108
|
+
describe '.pluck regression test' do
|
109
|
+
it 'should work with query caching' do
|
110
|
+
TestModel.connection.enable_query_cache!
|
111
|
+
expect(TestModel.pluck(:id).count).to eql TestModel.all.count
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'should work if query cache is not enabled' do
|
115
|
+
TestModel.connection.disable_query_cache!
|
116
|
+
expect(TestModel.pluck(:id).count).to eql TestModel.all.count
|
117
|
+
end
|
118
|
+
end
|
106
119
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: replica_pools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Drabik
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-04-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -95,6 +95,20 @@ dependencies:
|
|
95
95
|
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '0'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: pry
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
98
112
|
description: Connection proxy for ActiveRecord for leader / replica setups.
|
99
113
|
email: dan@kickstarter.com
|
100
114
|
executables: []
|
@@ -138,8 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
152
|
- !ruby/object:Gem::Version
|
139
153
|
version: '1.2'
|
140
154
|
requirements: []
|
141
|
-
|
142
|
-
rubygems_version: 2.4.5.1
|
155
|
+
rubygems_version: 3.0.3
|
143
156
|
signing_key:
|
144
157
|
specification_version: 4
|
145
158
|
summary: Connection proxy for ActiveRecord for leader / replica setups.
|