unleash 4.5.0 → 4.6.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/pull_request.yml +1 -1
- data/.rubocop.yml +2 -0
- data/CHANGELOG.md +5 -0
- data/README.md +3 -3
- data/lib/unleash/client.rb +0 -1
- data/lib/unleash/configuration.rb +1 -1
- data/lib/unleash/feature_toggle.rb +40 -10
- data/lib/unleash/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f7e5c9cc285cd8b5d030f115babe035a65540a63aea7f2c0500d845afe74af1
|
4
|
+
data.tar.gz: ec93948ce1eed18fc20ac93e8a9bb944ae6080a1740f58910d6689305d1cc72e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cabaff808990418367c85b739b5994f3d0010ee61415b5d9e6dfcea9e3b808b3b9d9e6bd05d07a0fd9bacc9423d909e52393e1a42ea671a95acfa7e45b4c80f4
|
7
|
+
data.tar.gz: fdb3553cb10738d0db2be4a8f1bbd01181eb32abcb790420cbd6961c7f0df76841e7abfa88a29a829554d0baa3374db2f46fe87e068f380187bdbcc94d77fc03
|
@@ -50,7 +50,7 @@ jobs:
|
|
50
50
|
- name: Install dependencies
|
51
51
|
run: bundle install
|
52
52
|
- name: Download test cases
|
53
|
-
run: git clone --depth 5 --branch v4.
|
53
|
+
run: git clone --depth 5 --branch v4.5.1 https://github.com/Unleash/client-specification.git client-specification
|
54
54
|
- name: Run tests
|
55
55
|
run: bundle exec rake
|
56
56
|
env:
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -13,6 +13,11 @@ Note: These changes are not considered notable:
|
|
13
13
|
|
14
14
|
## [Unreleased]
|
15
15
|
|
16
|
+
## [4.6.0] - 2023-10-16
|
17
|
+
### Added
|
18
|
+
- dependant toggles (#155)
|
19
|
+
- client specification is [here](https://github.com/Unleash/client-specification/pull/63)
|
20
|
+
|
16
21
|
## [4.5.0] - 2023-07-05
|
17
22
|
### Added
|
18
23
|
- variants in strategies (#148)
|
data/README.md
CHANGED
@@ -25,7 +25,7 @@ Leverage the [Unleash Server](https://github.com/Unleash/unleash) for powerful f
|
|
25
25
|
Add this line to your application's Gemfile:
|
26
26
|
|
27
27
|
```ruby
|
28
|
-
gem 'unleash', '~> 4.
|
28
|
+
gem 'unleash', '~> 4.6.0'
|
29
29
|
```
|
30
30
|
|
31
31
|
And then execute:
|
@@ -528,7 +528,7 @@ You can also run `bin/console` for an interactive prompt that will allow you to
|
|
528
528
|
This SDK is also built against the Unleash Client Specification tests.
|
529
529
|
To run the Ruby SDK against this test suite, you'll need to have a copy on your machine, you can clone the repository directly using:
|
530
530
|
|
531
|
-
`git clone --depth 5 --branch v4.
|
531
|
+
`git clone --depth 5 --branch v4.5.1 https://github.com/Unleash/client-specification.git client-specification`
|
532
532
|
|
533
533
|
After doing this, `rake spec` will also run the client specification tests.
|
534
534
|
|
@@ -539,7 +539,7 @@ To install this gem onto your local machine, run `bundle exec rake install`.
|
|
539
539
|
Choose a new version number following [Semantic Versioning](https://semver.org/spec/v2.0.0.html) semantics and then:
|
540
540
|
|
541
541
|
- update the version number in [./lib/unleash/version.rb](./lib/unleash/version.rb),
|
542
|
-
- if a major or minor version bump, update the [Installation section](#
|
542
|
+
- if a major or minor version bump, update the [Installation section](#installation) in [README.md](README.md)
|
543
543
|
- update [CHANGELOG.md](CHANGELOG.md) following the format on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
|
544
544
|
- commit with message `chore: bump version to x.y.z`
|
545
545
|
- then run `bundle exec rake release`
|
data/lib/unleash/client.rb
CHANGED
@@ -7,7 +7,7 @@ require 'securerandom'
|
|
7
7
|
|
8
8
|
module Unleash
|
9
9
|
class FeatureToggle
|
10
|
-
attr_accessor :name, :enabled, :strategies, :variant_definitions
|
10
|
+
attr_accessor :name, :enabled, :dependencies, :strategies, :variant_definitions
|
11
11
|
|
12
12
|
FeatureEvaluationResult = Struct.new(:enabled?, :strategy)
|
13
13
|
|
@@ -16,6 +16,7 @@ module Unleash
|
|
16
16
|
|
17
17
|
self.name = params.fetch('name', nil)
|
18
18
|
self.enabled = params.fetch('enabled', false)
|
19
|
+
self.dependencies = params.fetch('dependencies', [])
|
19
20
|
|
20
21
|
self.strategies = initialize_strategies(params, segment_map)
|
21
22
|
self.variant_definitions = initialize_variant_definitions(params)
|
@@ -41,11 +42,11 @@ module Unleash
|
|
41
42
|
|
42
43
|
evaluation_result = evaluate(context)
|
43
44
|
|
44
|
-
group_id = evaluation_result
|
45
|
+
group_id = evaluation_result.strategy&.params.to_h['groupId'] || self.name
|
45
46
|
|
46
47
|
variant = resolve_variant(context, evaluation_result, group_id)
|
47
48
|
|
48
|
-
choice = evaluation_result
|
49
|
+
choice = evaluation_result.enabled? ? :yes : :no
|
49
50
|
Unleash.toggle_metrics.increment_variant(self.name, choice, variant.name) unless Unleash.configuration.disable_metrics
|
50
51
|
variant
|
51
52
|
end
|
@@ -57,9 +58,9 @@ module Unleash
|
|
57
58
|
private
|
58
59
|
|
59
60
|
def resolve_variant(context, evaluation_result, group_id)
|
60
|
-
variant_definitions = evaluation_result
|
61
|
+
variant_definitions = evaluation_result.strategy&.variant_definitions
|
61
62
|
variant_definitions = self.variant_definitions if variant_definitions.nil? || variant_definitions.empty?
|
62
|
-
return Unleash::FeatureToggle.disabled_variant unless evaluation_result
|
63
|
+
return Unleash::FeatureToggle.disabled_variant unless evaluation_result.enabled?
|
63
64
|
return Unleash::FeatureToggle.disabled_variant if sum_variant_defs_weights(variant_definitions) <= 0
|
64
65
|
|
65
66
|
variant_from_override_match(context, variant_definitions) ||
|
@@ -72,12 +73,42 @@ module Unleash
|
|
72
73
|
|
73
74
|
# only check if it is enabled, do not do metrics
|
74
75
|
def am_enabled?(context)
|
75
|
-
evaluate(context)
|
76
|
+
evaluate(context).enabled?
|
77
|
+
end
|
78
|
+
|
79
|
+
def parent_dependencies_satisfied?(context)
|
80
|
+
dependencies.empty? || dependencies.all?{ |parent| evaluate_parent(parent, context) }
|
81
|
+
end
|
82
|
+
|
83
|
+
def evaluate_parent(parent, context)
|
84
|
+
parent_toggle = get_parent(parent["feature"])
|
85
|
+
return false if parent_toggle.nil? || !parent_toggle.dependencies.empty?
|
86
|
+
|
87
|
+
evaluation_result = parent_toggle.is_enabled?(context)
|
88
|
+
return !evaluation_result if parent["enabled"] == false
|
89
|
+
|
90
|
+
return false unless evaluation_result
|
91
|
+
|
92
|
+
return evaluation_result if parent["variants"].nil? || parent["variants"].empty?
|
93
|
+
|
94
|
+
parent["variants"].include?(parent_toggle.get_variant(context).name)
|
95
|
+
end
|
96
|
+
|
97
|
+
def get_parent(feature)
|
98
|
+
toggle_as_hash = Unleash&.toggles&.find{ |toggle| toggle['name'] == feature }
|
99
|
+
if toggle_as_hash.nil?
|
100
|
+
Unleash.logger.debug "Unleash::Client.is_enabled? feature: #{feature} not found"
|
101
|
+
return nil
|
102
|
+
end
|
103
|
+
|
104
|
+
Unleash::FeatureToggle.new(toggle_as_hash, Unleash&.segment_cache)
|
76
105
|
end
|
77
106
|
|
78
107
|
def evaluate(context)
|
79
108
|
evaluation_result =
|
80
|
-
if !
|
109
|
+
if !parent_dependencies_satisfied?(context)
|
110
|
+
FeatureEvaluationResult.new(false, nil)
|
111
|
+
elsif !self.enabled
|
81
112
|
FeatureEvaluationResult.new(false, nil)
|
82
113
|
elsif self.strategies.empty?
|
83
114
|
FeatureEvaluationResult.new(true, nil)
|
@@ -86,9 +117,8 @@ module Unleash
|
|
86
117
|
FeatureEvaluationResult.new(!strategy.nil?, strategy)
|
87
118
|
end
|
88
119
|
|
89
|
-
Unleash.logger.debug "Unleash::FeatureToggle (enabled:#{self.enabled} " \
|
90
|
-
"and Strategies combined with
|
91
|
-
|
120
|
+
Unleash.logger.debug "Unleash::FeatureToggle (enabled:#{self.enabled}) " \
|
121
|
+
"and Strategies combined with constraints returned #{evaluation_result})"
|
92
122
|
evaluation_result
|
93
123
|
end
|
94
124
|
|
data/lib/unleash/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unleash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Renato Arruda
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-10-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: murmurhash3
|