fino 1.7.0 → 1.8.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: 2e033b28ee38e474bbeec0146b678dbcb3f076a510546e7317fe41be05476cf5
4
- data.tar.gz: 772f29714cd61978a22b3cf1a4fee9f2570396a57703d5b3f228d005f09536f8
3
+ metadata.gz: 246bd0b948e3ff18a206129b9fbf5748177b480e14c5d94d9c34544fb016b647
4
+ data.tar.gz: 5c69240f165c207bd14dcd5155c538ac049fdf951dda4f68a4be5ca095c085dc
5
5
  SHA512:
6
- metadata.gz: 53eed6d59234333c47cdb1fe147011198827a10488c40772bd5abc14fffa57f36dafc7b34dd478ca9f218b938411cd37a842d374dbf2abe47e645b60a4c3a52b
7
- data.tar.gz: 59bfaa481e797ee8974af6e8402e449266f9fb01c0acb3f81d1faf5d19635d1df00963e54075c8de513ff3662fdc9047786e13b467213cf9d14e79921fea376c
6
+ metadata.gz: 851848fccffa77fdfb3a13c4c4ca05a159c998fcf92f5234995bbc2815f4f1e2e0c2c6501d06f9c77e57f72c6b22d22feced0e43837788a9aededbcf9c7572c0
7
+ data.tar.gz: b107d57b08580113a171428de75108c610568f73b1dc8da0d19208dd0a4274585dd640be33c0cefa7affe9c0be5017ce3563b84edf00f3d79495deca9c26feb2
data/README.md CHANGED
@@ -71,9 +71,14 @@ Fino.value(:model, at: :openai) #=> "gpt-5"
71
71
  Fino.enabled?(:maintenance_mode) #=> false
72
72
  Fino.disabled?(:maintenance_mode) #=> true
73
73
 
74
+ # Overrides
74
75
  Fino.enabled?(:maintenance_mode, for: "qa") #=> false
75
- Fino.add_override(:maintenance_mode, "qa" => true)
76
+
77
+ Fino.enable(:maintenance_mode, for: "qa")
76
78
  Fino.enabled?(:maintenance_mode, for: "qa") #=> true
79
+
80
+ Fino.disable(:maintenance_mode, for: "qa")
81
+ Fino.enabled?(:maintenance_mode, for: "qa") #=> false
77
82
  ```
78
83
 
79
84
  ### Overrides
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fino::Library::FeatureTogglesSupport
4
+ def enabled?(setting_name, at: nil, **context)
5
+ setting = setting(setting_name, at: at)
6
+ ensure_setting_is_boolean!(setting.definition)
7
+
8
+ setting.enabled?(**context)
9
+ end
10
+
11
+ def disabled?(setting_name, at: nil, **context)
12
+ setting = setting(setting_name, at: at)
13
+ ensure_setting_is_boolean!(setting.definition)
14
+
15
+ setting.disabled?(**context)
16
+ end
17
+
18
+ def enable(setting_name, for:, at: nil)
19
+ setting_definition = build_setting_definition(setting_name, at: at)
20
+ ensure_setting_is_boolean!(setting_definition)
21
+
22
+ add_override(setting_name, at: at, binding.local_variable_get(:for) => true)
23
+ end
24
+
25
+ def disable(setting_name, for:, at: nil)
26
+ setting_definition = build_setting_definition(setting_name, at: at)
27
+ ensure_setting_is_boolean!(setting_definition)
28
+
29
+ add_override(setting_name, at: at, binding.local_variable_get(:for) => false)
30
+ end
31
+
32
+ private
33
+
34
+ def ensure_setting_is_boolean!(setting_definition)
35
+ return if setting_definition.type_class == Fino::Settings::Boolean
36
+
37
+ raise ArgumentError, "Setting #{setting_definition.key} is not a boolean"
38
+ end
39
+ end
data/lib/fino/library.rb CHANGED
@@ -3,6 +3,8 @@
3
3
  require "forwardable"
4
4
 
5
5
  class Fino::Library
6
+ include FeatureTogglesSupport
7
+
6
8
  def initialize(configuration)
7
9
  @configuration = configuration
8
10
  end
@@ -15,20 +17,6 @@ class Fino::Library
15
17
  settings(*setting_names, at: at).map { |s| s.value(**context) }
16
18
  end
17
19
 
18
- def enabled?(setting_name, at: nil, **context)
19
- setting = setting(setting_name, at: at)
20
- raise ArgumentError, "Setting #{setting_name} is not a boolean" unless setting.instance_of?(Fino::Settings::Boolean)
21
-
22
- setting.enabled?(**context)
23
- end
24
-
25
- def disabled?(setting_name, at: nil, **context)
26
- setting = setting(setting_name, at: at)
27
- raise ArgumentError, "Setting #{setting_name} is not a boolean" unless setting.instance_of?(Fino::Settings::Boolean)
28
-
29
- setting.disabled?(**context)
30
- end
31
-
32
20
  def setting(setting_name, at: nil)
33
21
  pipeline.read(build_setting_definition(setting_name, at: at))
34
22
  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.7.0"
4
+ VERSION = "1.8.0"
5
5
  REQUIRED_RUBY_VERSION = ">= 3.0.0"
6
6
  end
data/lib/fino.rb CHANGED
@@ -41,6 +41,8 @@ module Fino
41
41
  :values,
42
42
  :enabled?,
43
43
  :disabled?,
44
+ :enable,
45
+ :disable,
44
46
  :setting,
45
47
  :settings,
46
48
  :slice,
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.7.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Egor Iskrenkov
@@ -46,6 +46,7 @@ files:
46
46
  - lib/fino/expirator.rb
47
47
  - lib/fino/ext/hash.rb
48
48
  - lib/fino/library.rb
49
+ - lib/fino/library/feature_toggles_support.rb
49
50
  - lib/fino/metadata.rb
50
51
  - lib/fino/pipe.rb
51
52
  - lib/fino/pipe/cache.rb