fino-redis 1.3.1 → 1.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7f208678be6c8dc8bdf5fde1a3c8458e8cd908c59f870f432b4136e4f8e38bf5
4
- data.tar.gz: 134c3275f900f0dcd9ace76124f6a3b2167316d2b2b7845ddc2597c64c3647ed
3
+ metadata.gz: bf8532d7c9300576fc53693bc44a1ae65cecc2177c7cffe1ced5e233c915272a
4
+ data.tar.gz: 0a8d663f550775de858394e53c6ee522e07d0a90fe257fd1c6d5a16773a743cc
5
5
  SHA512:
6
- metadata.gz: 4ea485e204970f5f571f8993cfe3431cfa7a031f9c70167214656646b1538af6a3d568cd260faa2de51db66b7c54f793ed64c6b5d11a7c6cb7819a035b46e0dc
7
- data.tar.gz: a65a7aaa5a427741f39f56daa5e2913c80b3347c3806dc47f5c58eed6a9ddbeab341816954ce724477702c92790c93df41f6a7e62e57b822fac0e1f20c665446
6
+ metadata.gz: c7257b235d5755fb4474fb5e3a478b8e97b0a80a78b54b11967faf871bf70f3e34e3f7a4f49da1cf24729df12052617c6ec1b9fd1ebff255f5cccd40daf8937c
7
+ data.tar.gz: 5c44aa7255f8e5bb2ea16a8167acd64385e031a22635ebd583ebeac17aead3dd5c8acf504bd2134c4f550c5f3dc329d88b3593df9bf4e2676ed94037cffbb073
@@ -6,6 +6,8 @@ class Fino::Redis::Adapter
6
6
  using Fino::CustomRedisScripts
7
7
 
8
8
  DEFAULT_REDIS_NAMESPACE = "fino"
9
+ SETTINGS_NAMESPACE = "s"
10
+ PERSISTED_SETTINGS_KEYS_REDIS_KEY = "psl"
9
11
  SCOPE_PREFIX = "s"
10
12
  VARIANT_PREFIX = "v"
11
13
  VALUE_KEY = "v"
@@ -15,12 +17,12 @@ class Fino::Redis::Adapter
15
17
  @redis_namespace = namespace
16
18
  end
17
19
 
18
- def read(setting_definition)
19
- redis.hgetall(redis_key_for(setting_definition))
20
+ def read(setting_key)
21
+ redis.hgetall(redis_key_for(setting_key))
20
22
  end
21
23
 
22
- def read_multi(setting_definitions)
23
- keys = setting_definitions.map { |definition| redis_key_for(definition) }
24
+ def read_multi(setting_keys)
25
+ keys = setting_keys.map { |setting_key| redis_key_for(setting_key) }
24
26
 
25
27
  redis.pipelined do |pipeline|
26
28
  keys.each { |key| pipeline.hgetall(key) }
@@ -42,7 +44,23 @@ class Fino::Redis::Adapter
42
44
  hash["#{VARIANT_PREFIX}/#{variant.percentage}/#{VALUE_KEY}"] = serialize_value.call(variant.value)
43
45
  end
44
46
 
45
- redis.mapped_hreplace(redis_key_for(setting_definition), hash)
47
+ redis.multi do |r|
48
+ r.mapped_hreplace(redis_key_for(setting_definition.key), hash)
49
+ r.sadd(build_redis_key(PERSISTED_SETTINGS_KEYS_REDIS_KEY), setting_definition.key)
50
+ end
51
+ end
52
+
53
+ def read_persisted_setting_keys
54
+ redis.smembers(build_redis_key(PERSISTED_SETTINGS_KEYS_REDIS_KEY))
55
+ end
56
+
57
+ def clear(setting_key)
58
+ _, cleared = redis.multi do |r|
59
+ r.del(redis_key_for(setting_key))
60
+ r.srem(build_redis_key(PERSISTED_SETTINGS_KEYS_REDIS_KEY), setting_key)
61
+ end
62
+
63
+ cleared == 1
46
64
  end
47
65
 
48
66
  def fetch_value_from(raw_adapter_data)
@@ -72,7 +90,11 @@ class Fino::Redis::Adapter
72
90
 
73
91
  attr_reader :redis, :redis_namespace
74
92
 
75
- def redis_key_for(setting_definition)
76
- "#{redis_namespace}:#{setting_definition.path.join(':')}"
93
+ def redis_key_for(setting_key)
94
+ build_redis_key(SETTINGS_NAMESPACE, setting_key)
95
+ end
96
+
97
+ def build_redis_key(*parts)
98
+ [redis_namespace, *parts].join(":")
77
99
  end
78
100
  end
@@ -1,12 +1,24 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fino::CustomRedisScripts
4
+ module_function
5
+
6
+ def mapped_hreplace(connection, key, values_mapping)
7
+ connection.del(key)
8
+ connection.mapped_hmset(key, values_mapping)
9
+ end
10
+
4
11
  refine Redis do
5
12
  def mapped_hreplace(key, values_mapping)
6
- multi do |r|
7
- r.del(key)
8
- r.mapped_hmset(key, values_mapping)
13
+ multi do |multi|
14
+ Fino::CustomRedisScripts.mapped_hreplace(multi, key, values_mapping)
9
15
  end
10
16
  end
11
17
  end
18
+
19
+ refine Redis::MultiConnection do
20
+ def mapped_hreplace(key, values_mapping)
21
+ Fino::CustomRedisScripts.mapped_hreplace(self, key, values_mapping)
22
+ end
23
+ end
12
24
  end
data/lib/fino/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fino
4
- VERSION = "1.3.1"
4
+ VERSION = "1.4.0"
5
5
  REQUIRED_RUBY_VERSION = ">= 3.0.0"
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fino-redis
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Egor Iskrenkov
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: 1.3.1
18
+ version: 1.4.0
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
- version: 1.3.1
25
+ version: 1.4.0
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: redis
28
28
  requirement: !ruby/object:Gem::Requirement