modis 4.2.0 → 4.3.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.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +2 -1
- data/CHANGELOG.md +11 -2
- data/Gemfile.lock +9 -9
- data/lib/modis/deprecator.rb +7 -0
- data/lib/modis/finder.rb +2 -2
- data/lib/modis/index.rb +1 -1
- data/lib/modis/model.rb +2 -0
- data/lib/modis/persistence.rb +4 -4
- data/lib/modis/transaction.rb +1 -1
- data/lib/modis/version.rb +1 -1
- data/lib/modis.rb +27 -11
- data/spec/multi_redis_spec.rb +54 -0
- data/spec/spec_helper.rb +6 -3
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a9d3d05277e2ddf26b7c14547b3e03f37cb6fbb771ba9b2a6b61acce6485bd9
|
4
|
+
data.tar.gz: 031d2f34a15d5f077b5b01c2e4286b73285ed2171f4029577c2d812a22f6da6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b76390c567d8ba5495c226cb7425372797fe9b3d5e2d2a07a8f891bed7e5aa4f3c66d84f54c6cac7814f07f156e958687a62da8179c4d1922da2efb065412c1
|
7
|
+
data.tar.gz: dba384ff8ad647615016ed340c21e72088d45b1186b91e96f28c579b73ff7d45cd2616b10c70d42fcb17e1f4cfe4889074c0eb8a6ab41b0e92082d83d663c026
|
data/.github/workflows/test.yml
CHANGED
@@ -26,6 +26,7 @@ jobs:
|
|
26
26
|
- 6379:6379
|
27
27
|
|
28
28
|
strategy:
|
29
|
+
fail-fast: false
|
29
30
|
matrix:
|
30
31
|
gemfile: ['rails_5.2', 'rails_6.0', 'rails_6.1', 'rails_7.0']
|
31
32
|
|
@@ -55,7 +56,7 @@ jobs:
|
|
55
56
|
BUNDLE_GEMFILE: gemfiles/${{ matrix.gemfile }}.gemfile
|
56
57
|
|
57
58
|
steps:
|
58
|
-
- uses: actions/checkout@
|
59
|
+
- uses: actions/checkout@v4
|
59
60
|
|
60
61
|
- name: Set up Ruby
|
61
62
|
uses: ruby/setup-ruby@v1
|
data/CHANGELOG.md
CHANGED
@@ -1,8 +1,17 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
-
## [v4.1.0](https://github.com/rpush/modis/tree/v4.1.0) (
|
3
|
+
## [v4.1.0](https://github.com/rpush/modis/tree/v4.1.0) (2024-07-31)
|
4
4
|
|
5
|
-
[Full Changelog](https://github.com/rpush/modis/compare/v4.
|
5
|
+
[Full Changelog](https://github.com/rpush/modis/compare/v4.2.0...v4.1.0)
|
6
|
+
|
7
|
+
**Merged pull requests:**
|
8
|
+
|
9
|
+
- Add support for multiple redis connections [\#49](https://github.com/rpush/modis/pull/49) ([SxDx](https://github.com/SxDx))
|
10
|
+
- Fix deprecation warning [\#48](https://github.com/rpush/modis/pull/48) ([SxDx](https://github.com/SxDx))
|
11
|
+
|
12
|
+
## [v4.2.0](https://github.com/rpush/modis/tree/v4.2.0) (2023-08-01)
|
13
|
+
|
14
|
+
[Full Changelog](https://github.com/rpush/modis/compare/v4.1.0...v4.2.0)
|
6
15
|
|
7
16
|
**Merged pull requests:**
|
8
17
|
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
modis (4.
|
4
|
+
modis (4.3.0)
|
5
5
|
activemodel (>= 5.2)
|
6
6
|
activesupport (>= 5.2)
|
7
7
|
connection_pool (>= 2)
|
@@ -48,8 +48,8 @@ GEM
|
|
48
48
|
parallel
|
49
49
|
codeclimate-test-reporter (1.0.7)
|
50
50
|
simplecov
|
51
|
-
concurrent-ruby (1.2.
|
52
|
-
connection_pool (2.
|
51
|
+
concurrent-ruby (1.2.2)
|
52
|
+
connection_pool (2.4.1)
|
53
53
|
console (1.16.2)
|
54
54
|
fiber-local
|
55
55
|
diff-lcs (1.4.4)
|
@@ -71,12 +71,12 @@ GEM
|
|
71
71
|
rainbow (>= 2.2.1)
|
72
72
|
rake (>= 10.0)
|
73
73
|
hiredis (0.6.3)
|
74
|
-
i18n (1.
|
74
|
+
i18n (1.14.1)
|
75
75
|
concurrent-ruby (~> 1.0)
|
76
76
|
io-event (1.1.6)
|
77
77
|
jaro_winkler (1.5.4)
|
78
|
-
minitest (5.
|
79
|
-
msgpack (1.
|
78
|
+
minitest (5.19.0)
|
79
|
+
msgpack (1.7.2)
|
80
80
|
multi_json (1.15.0)
|
81
81
|
octokit (4.25.1)
|
82
82
|
faraday (>= 1, < 3)
|
@@ -94,9 +94,9 @@ GEM
|
|
94
94
|
public_suffix (5.0.1)
|
95
95
|
rainbow (3.0.0)
|
96
96
|
rake (13.0.1)
|
97
|
-
redis (5.0
|
98
|
-
redis-client (>= 0.
|
99
|
-
redis-client (0.
|
97
|
+
redis (5.2.0)
|
98
|
+
redis-client (>= 0.22.0)
|
99
|
+
redis-client (0.22.2)
|
100
100
|
connection_pool
|
101
101
|
rexml (3.2.5)
|
102
102
|
rspec (3.9.0)
|
data/lib/modis/finder.rb
CHANGED
@@ -18,7 +18,7 @@ module Modis
|
|
18
18
|
"because you disabled all index. See :enable_all_index for more."
|
19
19
|
end
|
20
20
|
|
21
|
-
records = Modis.with_connection do |redis|
|
21
|
+
records = Modis.with_connection(modis_connection) do |redis|
|
22
22
|
ids = redis.smembers(key_for(:all))
|
23
23
|
redis.pipelined do |pipeline|
|
24
24
|
ids.map { |id| record_for(pipeline, id) }
|
@@ -41,7 +41,7 @@ module Modis
|
|
41
41
|
def find_all(ids)
|
42
42
|
raise RecordNotFound, "Couldn't find #{name} without an ID" if ids.empty?
|
43
43
|
|
44
|
-
records = Modis.with_connection do |redis|
|
44
|
+
records = Modis.with_connection(modis_connection) do |redis|
|
45
45
|
if ids.count == 1
|
46
46
|
ids.map { |id| record_for(redis, id) }
|
47
47
|
else
|
data/lib/modis/index.rb
CHANGED
data/lib/modis/model.rb
CHANGED
data/lib/modis/persistence.rb
CHANGED
@@ -150,7 +150,7 @@ module Modis
|
|
150
150
|
end
|
151
151
|
|
152
152
|
def reload
|
153
|
-
new_attributes = Modis.with_connection { |redis| self.class.attributes_for(redis, id) }
|
153
|
+
new_attributes = Modis.with_connection(modis_connection) { |redis| self.class.attributes_for(redis, id) }
|
154
154
|
initialize(new_attributes)
|
155
155
|
self
|
156
156
|
end
|
@@ -166,7 +166,7 @@ module Modis
|
|
166
166
|
end
|
167
167
|
|
168
168
|
alias update_attributes update
|
169
|
-
deprecate update_attributes: 'please, use update instead'
|
169
|
+
deprecate update_attributes: 'please, use update instead', deprecator: Modis.deprecator
|
170
170
|
|
171
171
|
def update!(attrs)
|
172
172
|
assign_attributes(attrs)
|
@@ -174,7 +174,7 @@ module Modis
|
|
174
174
|
end
|
175
175
|
|
176
176
|
alias update_attributes! update!
|
177
|
-
deprecate update_attributes!: 'please, use update! instead'
|
177
|
+
deprecate update_attributes!: 'please, use update! instead', deprecator: Modis.deprecator
|
178
178
|
|
179
179
|
private
|
180
180
|
|
@@ -253,7 +253,7 @@ module Modis
|
|
253
253
|
|
254
254
|
def set_id
|
255
255
|
namespace = self.class.sti_child? ? self.class.sti_base_absolute_namespace : self.class.absolute_namespace
|
256
|
-
Modis.with_connection do |redis|
|
256
|
+
Modis.with_connection(modis_connection) do |redis|
|
257
257
|
self.id = redis.incr("#{namespace}_id_seq")
|
258
258
|
end
|
259
259
|
end
|
data/lib/modis/transaction.rb
CHANGED
@@ -8,7 +8,7 @@ module Modis
|
|
8
8
|
|
9
9
|
module ClassMethods
|
10
10
|
def transaction
|
11
|
-
Modis.with_connection { |redis| redis.multi { |transaction| yield(transaction) } }
|
11
|
+
Modis.with_connection(modis_connection) { |redis| redis.multi { |transaction| yield(transaction) } }
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
data/lib/modis/version.rb
CHANGED
data/lib/modis.rb
CHANGED
@@ -7,6 +7,7 @@ require 'active_support/all'
|
|
7
7
|
require 'msgpack'
|
8
8
|
|
9
9
|
require 'modis/version'
|
10
|
+
require 'modis/deprecator'
|
10
11
|
require 'modis/configuration'
|
11
12
|
require 'modis/attribute'
|
12
13
|
require 'modis/errors'
|
@@ -18,13 +19,20 @@ require 'modis/model'
|
|
18
19
|
|
19
20
|
module Modis
|
20
21
|
@mutex = Mutex.new
|
21
|
-
|
22
22
|
class << self
|
23
|
-
attr_writer :
|
24
|
-
:
|
23
|
+
attr_writer :connection_pool_size, :connection_pool_timeout,
|
24
|
+
:connection_pools
|
25
25
|
|
26
26
|
def redis_options
|
27
|
-
@redis_options ||= {}
|
27
|
+
@redis_options ||= { default: {} }
|
28
|
+
end
|
29
|
+
|
30
|
+
def redis_options=(options)
|
31
|
+
if options.is_a?(Hash) && options.values.first.is_a?(Hash)
|
32
|
+
@redis_options = options.transform_values(&:dup)
|
33
|
+
else
|
34
|
+
@redis_options[:default] = options
|
35
|
+
end
|
28
36
|
end
|
29
37
|
|
30
38
|
def connection_pool_size
|
@@ -35,17 +43,25 @@ module Modis
|
|
35
43
|
@connection_pool_timeout ||= 5
|
36
44
|
end
|
37
45
|
|
38
|
-
def
|
39
|
-
|
46
|
+
def connection_pools
|
47
|
+
@connection_pools ||= {}
|
48
|
+
end
|
40
49
|
|
41
|
-
|
42
|
-
|
43
|
-
@
|
50
|
+
def connection_pool(pool_name = :default)
|
51
|
+
connection_pools[pool_name] ||= begin
|
52
|
+
@mutex.synchronize do
|
53
|
+
ConnectionPool.new(
|
54
|
+
size: connection_pool_size,
|
55
|
+
timeout: connection_pool_timeout
|
56
|
+
) do
|
57
|
+
Redis.new(redis_options[pool_name])
|
58
|
+
end
|
59
|
+
end
|
44
60
|
end
|
45
61
|
end
|
46
62
|
|
47
|
-
def with_connection
|
48
|
-
connection_pool.with { |connection| yield(connection) }
|
63
|
+
def with_connection(pool_name = :default)
|
64
|
+
connection_pool(pool_name).with { |connection| yield(connection) }
|
49
65
|
end
|
50
66
|
end
|
51
67
|
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MultiRedisSpec
|
4
|
+
class DefaultUserModel
|
5
|
+
include Modis::Model
|
6
|
+
|
7
|
+
attribute :name, :string
|
8
|
+
end
|
9
|
+
|
10
|
+
class CustomUserModel
|
11
|
+
include Modis::Model
|
12
|
+
self.modis_connection = :custom
|
13
|
+
|
14
|
+
attribute :name, :string
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'Multiple redis support' do
|
19
|
+
before do
|
20
|
+
Modis.redis_options = {
|
21
|
+
default: { url: 'redis://localhost:6379/0' },
|
22
|
+
custom: { url: 'redis://localhost:6379/1' }
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'uses the default redis connection' do
|
27
|
+
expect(Modis).to receive(:with_connection).with(:default).at_least(3).times.and_call_original
|
28
|
+
user = MultiRedisSpec::DefaultUserModel.create!(name: 'Ian')
|
29
|
+
|
30
|
+
expect(Modis).to receive(:with_connection).with(:default).at_least(3).times.and_call_original
|
31
|
+
MultiRedisSpec::DefaultUserModel.find(user.id)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'uses the specified redis connection when set up' do
|
35
|
+
expect(Modis).to receive(:with_connection).with(:custom).at_least(3).times.and_call_original
|
36
|
+
user = MultiRedisSpec::CustomUserModel.create!(name: 'Tanya')
|
37
|
+
|
38
|
+
expect(Modis).to receive(:with_connection).with(:custom).at_least(3).times.and_call_original
|
39
|
+
MultiRedisSpec::CustomUserModel.find(user.id)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe 'backwards compatibility' do
|
44
|
+
before do
|
45
|
+
Modis.redis_options = {
|
46
|
+
url: 'redis://localhost:6379/0'
|
47
|
+
}
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'uses the default redis connection' do
|
51
|
+
expect(Modis).to receive(:with_connection).with(:default).at_least(3).times.and_call_original
|
52
|
+
MultiRedisSpec::DefaultUserModel.create!(name: 'Ian')
|
53
|
+
end
|
54
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -20,9 +20,12 @@ end
|
|
20
20
|
|
21
21
|
RSpec.configure do |config|
|
22
22
|
config.after :each do
|
23
|
-
Modis.
|
24
|
-
|
25
|
-
|
23
|
+
RSpec::Mocks.space.proxy_for(Modis).reset
|
24
|
+
Modis.connection_pools.each do |key, _|
|
25
|
+
Modis.with_connection(key) do |connection|
|
26
|
+
keys = connection.keys "#{Modis.config.namespace}:*"
|
27
|
+
connection.del(*keys) unless keys.empty?
|
28
|
+
end
|
26
29
|
end
|
27
30
|
end
|
28
31
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: modis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ian Leitch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -236,6 +236,7 @@ files:
|
|
236
236
|
- lib/modis.rb
|
237
237
|
- lib/modis/attribute.rb
|
238
238
|
- lib/modis/configuration.rb
|
239
|
+
- lib/modis/deprecator.rb
|
239
240
|
- lib/modis/errors.rb
|
240
241
|
- lib/modis/finder.rb
|
241
242
|
- lib/modis/index.rb
|
@@ -249,6 +250,7 @@ files:
|
|
249
250
|
- spec/errors_spec.rb
|
250
251
|
- spec/finder_spec.rb
|
251
252
|
- spec/index_spec.rb
|
253
|
+
- spec/multi_redis_spec.rb
|
252
254
|
- spec/persistence_spec.rb
|
253
255
|
- spec/spec_helper.rb
|
254
256
|
- spec/support/simplecov_helper.rb
|
@@ -283,6 +285,7 @@ test_files:
|
|
283
285
|
- spec/errors_spec.rb
|
284
286
|
- spec/finder_spec.rb
|
285
287
|
- spec/index_spec.rb
|
288
|
+
- spec/multi_redis_spec.rb
|
286
289
|
- spec/persistence_spec.rb
|
287
290
|
- spec/spec_helper.rb
|
288
291
|
- spec/support/simplecov_helper.rb
|