fino-redis 1.1.2 → 1.2.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: 9090834e6dc88697a3b3e66932c651d8e7541b57bac6a7e326e2e145e892d334
4
- data.tar.gz: 1e209245bc70c1b29ec517731dd3277b19b82b1ac2b2515bf9da5af6016ce15f
3
+ metadata.gz: d008dcb98a7f099164cd0b185da4f9de189799f7b9cb8ac4256a87795664d223
4
+ data.tar.gz: 2057b0ec99f232cdcdc8a07b2af87a29d7151b3dca1e300dabf3270479a502d7
5
5
  SHA512:
6
- metadata.gz: 32f54bf76bdb01420f122691b5ad5ba011e7354547e668d947c4947bedf54e00b0aa6e571a3d4edea0165f8a3818b3af8ca26d4e1cd4c16f46787972297b5878
7
- data.tar.gz: 45ba3c46d5a4f4aa7eb9d3159603f533a31fecd85a9e1ffa4ec79598ccd9959f763c4cae6b858b656761f6ad7b51f894bab1931336d41962931e5291e51f2123
6
+ metadata.gz: 3bd8407f21f3d6b69bac82d263646723109d3e2ff92453dde4b1c13687c9b9496ba26a1d3f3d5cbf0956ac3048e870e1a70aee8d6a2185194663214fe606c4ed
7
+ data.tar.gz: 7811852bc152a9c24f8baa5a7a5ea91daf63a986017543274bff80c84ffabd606224c17288fdaa60a2487014e75e5d59cfe6abab9759ca9ceeec24109c53fea8
data/README.md CHANGED
@@ -75,11 +75,3 @@ end
75
75
  ```
76
76
 
77
77
  <img width="1229" height="641" alt="Screenshot 2025-09-04 at 16 01 51" src="https://github.com/user-attachments/assets/646df84c-c25b-4890-9637-c481e18c9bd4" />
78
-
79
- ## TODO
80
-
81
- - Preloading settings to be able to fetch all of them in one adapter call
82
- - Request scoped memoization when integrating with Rails
83
- - Nicer UI
84
- - Basic validations (presence, range, numericality)
85
- - Enum setting type
@@ -15,8 +15,12 @@ class Fino::Redis::Adapter
15
15
  redis.hgetall(redis_key_for(setting_definition))
16
16
  end
17
17
 
18
- def write(setting_definition, value)
19
- redis.hset(redis_key_for(setting_definition), VALUE_KEY, setting_definition.type_class.serialize(value))
18
+ def write(setting_definition, value, **context)
19
+ key = redis_key_for(setting_definition)
20
+ hash_key = redis_hash_value_key_for(context)
21
+ value = setting_definition.type_class.serialize(value)
22
+
23
+ redis.hset(key, hash_key, value)
20
24
  end
21
25
 
22
26
  def read_multi(setting_definitions)
@@ -31,10 +35,23 @@ class Fino::Redis::Adapter
31
35
  raw_adapter_data.key?(VALUE_KEY) ? raw_adapter_data.delete(VALUE_KEY) : Fino::EMPTINESS
32
36
  end
33
37
 
38
+ def fetch_scoped_values_from(raw_adapter_data)
39
+ raw_adapter_data.each_with_object({}) do |(key, value), memo|
40
+ next unless key.start_with?("s/")
41
+
42
+ scope = key.split("/", 3)[1]
43
+ memo[scope] = value
44
+ end
45
+ end
46
+
34
47
  private
35
48
 
36
49
  attr_reader :redis, :redis_namespace
37
50
 
51
+ def redis_hash_value_key_for(context)
52
+ context[:scope] ? "s/#{context[:scope]}/#{VALUE_KEY}" : VALUE_KEY
53
+ end
54
+
38
55
  def redis_key_for(setting_definition)
39
56
  "#{redis_namespace}:#{setting_definition.path.join(':')}"
40
57
  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.1.2"
4
+ VERSION = "1.2.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.1.2
4
+ version: 1.2.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.1.2
18
+ version: 1.2.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.1.2
25
+ version: 1.2.0
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: redis
28
28
  requirement: !ruby/object:Gem::Requirement