unleash 4.4.0 → 4.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/stale.yml +1 -0
- data/.github/workflows/pull_request.yml +3 -2
- data/.rubocop.yml +2 -2
- data/README.md +10 -3
- data/lib/unleash/constraint.rb +1 -0
- data/lib/unleash/context.rb +1 -1
- data/lib/unleash/feature_toggle.rb +11 -5
- data/lib/unleash/metrics.rb +20 -12
- data/lib/unleash/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e7e1d111b5560a8236c52c1b1744f32724fdd0b26d02af16da707efe2869be3e
|
4
|
+
data.tar.gz: 402580857880d3508ad7b46afbc47b74c696bb6ad5360a48e4254f35ecd48f05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ed380682c17c90cea0d8b79ba7b05f20b053eb20fd3d293f93e3b2356a264ab386fcee3b91b6ec6507965fb23e922f1e9d50cae2bd880973d9111413abda0572
|
7
|
+
data.tar.gz: 0ba69ee86b9dc60e65aac73023e9e39c1a93d56579fee7c3f990d4e944259a879ba66058e8614cc41c9dc22a41cc4ab5bf8824e7db24d3e8a5cbc8b5c4fcb4cb
|
data/.github/stale.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
_extends: .github
|
@@ -28,8 +28,9 @@ jobs:
|
|
28
28
|
- ubuntu
|
29
29
|
- macos
|
30
30
|
ruby-version:
|
31
|
-
- jruby-9.
|
31
|
+
- jruby-9.4
|
32
32
|
- jruby-9.3
|
33
|
+
- jruby-9.2
|
33
34
|
- 3.1
|
34
35
|
- '3.0'
|
35
36
|
- 2.7
|
@@ -37,7 +38,7 @@ jobs:
|
|
37
38
|
- 2.5
|
38
39
|
|
39
40
|
steps:
|
40
|
-
- uses: actions/checkout@
|
41
|
+
- uses: actions/checkout@v3
|
41
42
|
- name: Set up Ruby ${{ matrix.ruby-version }}
|
42
43
|
uses: ruby/setup-ruby@v1
|
43
44
|
with:
|
data/.rubocop.yml
CHANGED
@@ -9,7 +9,7 @@ Naming/PredicateName:
|
|
9
9
|
|
10
10
|
|
11
11
|
Metrics/ClassLength:
|
12
|
-
Max:
|
12
|
+
Max: 135
|
13
13
|
Layout/LineLength:
|
14
14
|
Max: 140
|
15
15
|
Metrics/MethodLength:
|
@@ -22,7 +22,7 @@ Metrics/BlockLength:
|
|
22
22
|
Metrics/AbcSize:
|
23
23
|
Max: 30
|
24
24
|
Metrics/CyclomaticComplexity:
|
25
|
-
Max:
|
25
|
+
Max: 10
|
26
26
|
Metrics/PerceivedComplexity:
|
27
27
|
Max: 10
|
28
28
|
|
data/README.md
CHANGED
@@ -15,6 +15,7 @@ Leverage the [Unleash Server](https://github.com/Unleash/unleash) for powerful f
|
|
15
15
|
* MRI 2.7
|
16
16
|
* MRI 2.6
|
17
17
|
* MRI 2.5
|
18
|
+
* jruby 9.4
|
18
19
|
* jruby 9.3
|
19
20
|
* jruby 9.2
|
20
21
|
|
@@ -23,7 +24,7 @@ Leverage the [Unleash Server](https://github.com/Unleash/unleash) for powerful f
|
|
23
24
|
Add this line to your application's Gemfile:
|
24
25
|
|
25
26
|
```ruby
|
26
|
-
gem 'unleash', '~> 4.
|
27
|
+
gem 'unleash', '~> 4.4.0'
|
27
28
|
```
|
28
29
|
|
29
30
|
And then execute:
|
@@ -475,7 +476,7 @@ This client comes with the all the required strategies out of the box:
|
|
475
476
|
|
476
477
|
## Custom Strategies
|
477
478
|
|
478
|
-
Client allows to add [custom activation strategies](https://docs.getunleash.io/advanced/custom_activation_strategy) using configuration.
|
479
|
+
Client allows to add [custom activation strategies](https://docs.getunleash.io/advanced/custom_activation_strategy) using configuration.
|
479
480
|
In order for strategy to work correctly it should support two methods `name` and `is_enabled?`
|
480
481
|
|
481
482
|
```ruby
|
@@ -483,7 +484,7 @@ class MyCustomStrategy
|
|
483
484
|
def name
|
484
485
|
'muCustomStrategy'
|
485
486
|
end
|
486
|
-
|
487
|
+
|
487
488
|
def is_enabled?(params = {}, context = nil)
|
488
489
|
true
|
489
490
|
end
|
@@ -498,6 +499,12 @@ end
|
|
498
499
|
|
499
500
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
500
501
|
|
502
|
+
This SDK is also built against the Unleash Client Specification tests. 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:
|
503
|
+
|
504
|
+
`git clone --depth 5 --branch v4.2.2 https://github.com/Unleash/client-specification.git client-specification`
|
505
|
+
|
506
|
+
After doing this, `rake spec` will also run the client specification tests.
|
507
|
+
|
501
508
|
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
502
509
|
|
503
510
|
|
data/lib/unleash/constraint.rb
CHANGED
@@ -43,6 +43,7 @@ module Unleash
|
|
43
43
|
|
44
44
|
def matches_context?(context)
|
45
45
|
Unleash.logger.debug "Unleash::Constraint matches_context? value: #{self.value} context.get_by_name(#{self.context_name})"
|
46
|
+
return false if context.nil?
|
46
47
|
|
47
48
|
match = matches_constraint?(context)
|
48
49
|
self.inverted ? !match : match
|
data/lib/unleash/context.rb
CHANGED
@@ -9,7 +9,7 @@ module Unleash
|
|
9
9
|
|
10
10
|
self.app_name = value_for('appName', params, Unleash&.configuration&.app_name)
|
11
11
|
self.environment = value_for('environment', params, Unleash&.configuration&.environment || 'default')
|
12
|
-
self.user_id = value_for('userId', params)
|
12
|
+
self.user_id = value_for('userId', params)&.to_s
|
13
13
|
self.session_id = value_for('sessionId', params)
|
14
14
|
self.remote_address = value_for('remoteAddress', params)
|
15
15
|
self.current_time = value_for('currentTime', params, Time.now.utc.iso8601.to_s)
|
@@ -37,12 +37,11 @@ module Unleash
|
|
37
37
|
|
38
38
|
context = ensure_valid_context(context)
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
variant = variant_from_override_match(context) || variant_from_weights(context, resolve_stickiness)
|
40
|
+
toggle_enabled = am_enabled?(context)
|
41
|
+
variant = resolve_variant(context, toggle_enabled)
|
44
42
|
|
45
|
-
|
43
|
+
choice = toggle_enabled ? :yes : :no
|
44
|
+
Unleash.toggle_metrics.increment_variant(self.name, choice, variant.name) unless Unleash.configuration.disable_metrics
|
46
45
|
variant
|
47
46
|
end
|
48
47
|
|
@@ -52,6 +51,13 @@ module Unleash
|
|
52
51
|
|
53
52
|
private
|
54
53
|
|
54
|
+
def resolve_variant(context, toggle_enabled)
|
55
|
+
return Unleash::FeatureToggle.disabled_variant unless toggle_enabled
|
56
|
+
return Unleash::FeatureToggle.disabled_variant if sum_variant_defs_weights <= 0
|
57
|
+
|
58
|
+
variant_from_override_match(context) || variant_from_weights(context, resolve_stickiness)
|
59
|
+
end
|
60
|
+
|
55
61
|
def resolve_stickiness
|
56
62
|
self.variant_definitions&.map(&:stickiness)&.compact&.first || "default"
|
57
63
|
end
|
data/lib/unleash/metrics.rb
CHANGED
@@ -1,33 +1,41 @@
|
|
1
1
|
module Unleash
|
2
2
|
class Metrics
|
3
|
-
attr_accessor :features
|
4
|
-
|
5
|
-
# NOTE: no mutexes for features
|
3
|
+
attr_accessor :features, :features_lock
|
6
4
|
|
7
5
|
def initialize
|
8
6
|
self.features = {}
|
7
|
+
self.features_lock = Mutex.new
|
9
8
|
end
|
10
9
|
|
11
10
|
def to_s
|
12
|
-
self.
|
11
|
+
self.features_lock.synchronize do
|
12
|
+
return self.features.to_json
|
13
|
+
end
|
13
14
|
end
|
14
15
|
|
15
16
|
def increment(feature, choice)
|
16
17
|
raise "InvalidArgument choice must be :yes or :no" unless [:yes, :no].include? choice
|
17
18
|
|
18
|
-
self.
|
19
|
-
|
19
|
+
self.features_lock.synchronize do
|
20
|
+
self.features[feature] = { yes: 0, no: 0 } unless self.features.include? feature
|
21
|
+
self.features[feature][choice] += 1
|
22
|
+
end
|
20
23
|
end
|
21
24
|
|
22
|
-
def increment_variant(feature, variant)
|
23
|
-
self.
|
24
|
-
|
25
|
-
|
26
|
-
|
25
|
+
def increment_variant(feature, choice, variant)
|
26
|
+
self.features_lock.synchronize do
|
27
|
+
self.features[feature] = { yes: 0, no: 0 } unless self.features.include? feature
|
28
|
+
self.features[feature][choice] += 1
|
29
|
+
self.features[feature]['variant'] = {} unless self.features[feature].include? 'variant'
|
30
|
+
self.features[feature]['variant'][variant] = 0 unless self.features[feature]['variant'].include? variant
|
31
|
+
self.features[feature]['variant'][variant] += 1
|
32
|
+
end
|
27
33
|
end
|
28
34
|
|
29
35
|
def reset
|
30
|
-
self.
|
36
|
+
self.features_lock.synchronize do
|
37
|
+
self.features = {}
|
38
|
+
end
|
31
39
|
end
|
32
40
|
end
|
33
41
|
end
|
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.
|
4
|
+
version: 4.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Renato Arruda
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-12-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: murmurhash3
|
@@ -146,6 +146,7 @@ executables:
|
|
146
146
|
extensions: []
|
147
147
|
extra_rdoc_files: []
|
148
148
|
files:
|
149
|
+
- ".github/stale.yml"
|
149
150
|
- ".github/workflows/add-to-project.yml"
|
150
151
|
- ".github/workflows/pull_request.yml"
|
151
152
|
- ".gitignore"
|