fino 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: a4e5fd25023829c358b6b3a596c8bf426648a37ab6579652c97fc8546d359a53
4
- data.tar.gz: 512d85c85779f1324a2a3bc1b7f1ae1ba81c6e7529ad552627901b3c7d3aaa2e
3
+ metadata.gz: 8fea3206069816874011b9d072929f796ad38c3c5645689fa75daf68638a0226
4
+ data.tar.gz: e8f72e2779da8c910539001ff7c0f91b0d23d44a8b2f8975c984506d8023796e
5
5
  SHA512:
6
- metadata.gz: 85cf3286ee466805c8b2beb3d5a31c97cd220a6d14556b2c82e1f2563bad44bab991b90228e4e952446b712e57a268085401268aa455d57bdd109274a214b99d
7
- data.tar.gz: 5ca9d07dd037ffe2ed56a40c729300b75427250e254e6adc0ed76466e57023b4b9b765af5ee0a72600d66b97ff56d1d8c479d99dc42479976cde74296ca3b079
6
+ metadata.gz: bb7428b18c55226ed0c21f5de8d6cbfc219424a6986fd4ab208ae8ee4cd33fcb961fa3c112872c06b9c35a21d1148aafe1ff005e963d6c68facbf4eb4a5a5129
7
+ data.tar.gz: fbbce319a638b28bf322f65683e998f83090d159c56b62861f9a3d0df4fce3cead018864fec4bb2c81f0a8de3313fd75747cbc2bcfa8316c707266952ddb1975
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
@@ -48,6 +48,10 @@ class Fino::Cache::Memory
48
48
  expire_if_needed
49
49
  end
50
50
 
51
+ def delete(key)
52
+ hash.delete(key)
53
+ end
54
+
51
55
  private
52
56
 
53
57
  attr_reader :hash, :expirator
data/lib/fino/library.rb CHANGED
@@ -7,12 +7,12 @@ class Fino::Library
7
7
  @configuration = configuration
8
8
  end
9
9
 
10
- def value(setting_name, at: nil)
11
- setting(setting_name, at: at).value
10
+ def value(setting_name, at: nil, **context)
11
+ setting(setting_name, at: at).value(**context)
12
12
  end
13
13
 
14
- def values(*setting_names, at: nil)
15
- settings(*setting_names, at: at).map(&:value)
14
+ def values(*setting_names, at: nil, **context)
15
+ settings(*setting_names, at: at).map { |s| s.value(**context) }
16
16
  end
17
17
 
18
18
  def setting(setting_name, at: nil)
@@ -37,12 +37,16 @@ class Fino::Library
37
37
  def set(**setting_names_to_values)
38
38
  at = setting_names_to_values.delete(:at)
39
39
 
40
+ scope = setting_names_to_values.delete(:scope)
41
+ context = { scope: scope }.compact
42
+
40
43
  setting_names_to_values.each do |setting_name, value|
41
44
  setting_definition = build_setting_definition(setting_name, at: at)
42
45
 
43
46
  pipeline.write(
44
47
  setting_definition,
45
- setting_definition.type_class.deserialize(value)
48
+ setting_definition.type_class.deserialize(value),
49
+ **context
46
50
  )
47
51
  end
48
52
  end
@@ -22,13 +22,10 @@ class Fino::Pipe::Cache
22
22
  end
23
23
  end
24
24
 
25
- def write(setting_definition, value)
26
- pipe.write(setting_definition, value)
25
+ def write(setting_definition, value, **context)
26
+ pipe.write(setting_definition, value, **context)
27
27
 
28
- cache.write(
29
- setting_definition.key,
30
- setting_definition.type_class.build(setting_definition, value)
31
- )
28
+ cache.delete(setting_definition.key)
32
29
  end
33
30
 
34
31
  private
@@ -17,8 +17,8 @@ class Fino::Pipe::Storage
17
17
  end
18
18
  end
19
19
 
20
- def write(setting_definition, value)
21
- adapter.write(setting_definition, value)
20
+ def write(setting_definition, value, **context)
21
+ adapter.write(setting_definition, value, **context)
22
22
  end
23
23
 
24
24
  private
@@ -27,11 +27,12 @@ class Fino::Pipe::Storage
27
27
 
28
28
  def to_setting(setting_definition, raw_adapter_data)
29
29
  raw_value = adapter.fetch_value_from(raw_adapter_data)
30
+ scoped_raw_values = adapter.fetch_scoped_values_from(raw_adapter_data)
30
31
 
31
32
  setting_definition.type_class.build(
32
33
  setting_definition,
33
34
  raw_value,
34
- **raw_adapter_data
35
+ scoped_raw_values
35
36
  )
36
37
  end
37
38
  end
data/lib/fino/pipe.rb CHANGED
@@ -13,7 +13,7 @@ module Fino::Pipe
13
13
  raise NotImplementedError
14
14
  end
15
15
 
16
- def write(setting_definition, value)
16
+ def write(setting_definition, value, **context)
17
17
  raise NotImplementedError
18
18
  end
19
19
 
data/lib/fino/setting.rb CHANGED
@@ -14,22 +14,24 @@ module Fino::Setting
14
14
  raise NotImplementedError
15
15
  end
16
16
 
17
- def build(setting_definition, raw_value, *options)
17
+ def build(setting_definition, raw_value, scoped_raw_values)
18
+ value = raw_value.equal?(Fino::EMPTINESS) ? setting_definition.options[:default] : deserialize(raw_value)
19
+ scoped_values = scoped_raw_values.transform_values { |v| deserialize(v) }
20
+
18
21
  new(
19
22
  setting_definition,
20
- raw_value.equal?(Fino::EMPTINESS) ? setting_definition.options[:default] : deserialize(raw_value),
21
- *options
23
+ value,
24
+ scoped_values
22
25
  )
23
26
  end
24
27
  end
25
28
 
26
- attr_reader :definition, :value
29
+ attr_reader :definition
27
30
 
28
- def initialize(definition, value, **options)
31
+ def initialize(definition, value, scoped_values = {})
29
32
  @definition = definition
30
33
  @value = value
31
-
32
- @options = options
34
+ @scoped_values = scoped_values
33
35
  end
34
36
 
35
37
  def name
@@ -40,6 +42,18 @@ module Fino::Setting
40
42
  definition.key
41
43
  end
42
44
 
45
+ def value(scope: nil)
46
+ scope ? scoped_values.fetch(scope.to_s, @value) : @value
47
+ end
48
+
49
+ def overriden_scopes
50
+ scoped_values.keys
51
+ end
52
+
53
+ def scope_overrides
54
+ scoped_values
55
+ end
56
+
43
57
  def type
44
58
  definition.type
45
59
  end
@@ -74,4 +88,8 @@ module Fino::Setting
74
88
 
75
89
  "#<#{self.class.name} #{attributes.join(', ')}>"
76
90
  end
91
+
92
+ private
93
+
94
+ attr_reader :scoped_values
77
95
  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
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