unleash 6.0.0 → 6.0.1.pre
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 +2 -0
- data/.rubocop.yml +1 -1
- data/CHANGELOG.md +0 -4
- data/README.md +119 -93
- data/lib/unleash/version.rb +1 -1
- data/unleash-client.gemspec +3 -2
- metadata +19 -6
- data/v6_MIGRATION_GUIDE.md +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98e81af92481a67d0db0298f00d6733a7df5359f9e691e92b65e1bab489611f7
|
4
|
+
data.tar.gz: 045bd8a3f93853f9537ee60c22ce9324562778d0597bc755a2157f79b798b21f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ab700dc87f42f566b42383e8c02171cf314e2b3879d066f0b2a2e3707900f336c629d49eafee1a009153e704b3bd0af99770f0fe397025e451dea0597ea5eb5
|
7
|
+
data.tar.gz: 1ec175c2bf02e6b6e02d81abb5ebc07c54c2db413dc5a0b73bbf958e81ae3ed43d2456cdaa5acbb8c53f03444ae139f90d162da055c5e579a9412a490ae6c0a9
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -13,10 +13,6 @@ Note: These changes are not considered notable:
|
|
13
13
|
|
14
14
|
## [Unreleased]
|
15
15
|
|
16
|
-
## [6.0.0] - 2024-09-25
|
17
|
-
#### Fixed
|
18
|
-
- Upgrade core engine library to support ARM on Linux
|
19
|
-
|
20
16
|
## [6.0.0.pre] - 2024-09-25
|
21
17
|
#### Changed
|
22
18
|
- No longer possible to override built in strategies with custom strategies (#152)
|
data/README.md
CHANGED
@@ -6,19 +6,42 @@
|
|
6
6
|
|
7
7
|
Ruby client for the [Unleash](https://github.com/Unleash/unleash) feature management service.
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
- [Supported Ruby Interpreters](#supported-ruby-interpreters)
|
10
|
+
- [Installation](#installation)
|
11
|
+
- [Configure](#configure)
|
12
|
+
- [Dynamic custom HTTP headers](#dynamic-custom-http-headers)
|
13
|
+
- [List of Arguments](#list-of-arguments)
|
14
|
+
- [Usage in a plain Ruby Application](#usage-in-a-plain-ruby-application)
|
15
|
+
- [Usage in a Rails Application](#usage-in-a-rails-application)
|
16
|
+
- [1. Add Initializer](#1-add-initializer)
|
17
|
+
- [1.a Initializer for standard Rails applications](#1a-initializer-for-standard-rails-applications)
|
18
|
+
- [1.b Add Initializer if using Puma in clustered mode](#1b-add-initializer-if-using-puma-in-clustered-mode)
|
19
|
+
- [with `preload_app!`](#with-preload_app)
|
20
|
+
- [without `preload_app!`](#without-preload_app)
|
21
|
+
- [1.c Add Initializer if using Phusion Passenger](#1c-add-initializer-if-using-phusion-passenger)
|
22
|
+
- [1.d Add Initializer hooks when using within Sidekiq](#1d-add-initializer-hooks-when-using-within-sidekiq)
|
23
|
+
- [2. Set Unleash::Context](#2-set-unleashcontext)
|
24
|
+
- [3. Sample usage](#3-sample-usage)
|
25
|
+
- [Variations](#variations)
|
26
|
+
- [Bootstrapping](#bootstrapping)
|
27
|
+
- [Client methods](#client-methods)
|
28
|
+
- [Local test client](#local-test-client)
|
29
|
+
- [Available Strategies](#available-strategies)
|
30
|
+
- [Custom Strategies](#custom-strategies)
|
31
|
+
- [Development](#development)
|
32
|
+
- [Releasing](#releasing)
|
33
|
+
- [Contributing](#contributing)
|
34
|
+
|
35
|
+
## Supported Ruby Interpreters
|
15
36
|
|
16
37
|
- MRI 3.3
|
17
38
|
- MRI 3.2
|
18
39
|
- MRI 3.1
|
19
40
|
- MRI 3.0
|
20
41
|
- MRI 2.7
|
42
|
+
- MRI 2.6
|
21
43
|
- jruby 9.4
|
44
|
+
- jruby 9.3
|
22
45
|
|
23
46
|
## Installation
|
24
47
|
|
@@ -36,70 +59,72 @@ Or install it yourself as:
|
|
36
59
|
|
37
60
|
$ gem install unleash
|
38
61
|
|
39
|
-
##
|
62
|
+
## Configure
|
40
63
|
|
41
64
|
It is **required** to configure:
|
42
65
|
|
43
|
-
- `
|
44
|
-
- `
|
45
|
-
- `custom_http_headers` with `{'Authorization': '<
|
66
|
+
- `url` of the unleash server
|
67
|
+
- `app_name` with the name of the runninng application.
|
68
|
+
- `custom_http_headers` with `{'Authorization': '<API token>'}` when using Unleash v4.0.0 and later.
|
69
|
+
|
70
|
+
Please substitute the example `'https://unleash.herokuapp.com/api'` for the url of your own instance.
|
46
71
|
|
47
72
|
It is **highly recommended** to configure:
|
48
73
|
|
49
|
-
- `instance_id` parameter with a unique identifier for the running instance
|
74
|
+
- `instance_id` parameter with a unique identifier for the running instance.
|
50
75
|
|
51
76
|
```ruby
|
52
77
|
Unleash.configure do |config|
|
53
78
|
config.app_name = 'my_ruby_app'
|
54
|
-
config.url = '
|
55
|
-
config.custom_http_headers = {'Authorization': '<
|
79
|
+
config.url = 'https://unleash.herokuapp.com/api'
|
80
|
+
config.custom_http_headers = {'Authorization': '<API token>'}
|
56
81
|
end
|
57
82
|
```
|
58
83
|
|
59
84
|
or instantiate the client with the valid configuration:
|
60
85
|
|
61
86
|
```ruby
|
62
|
-
UNLEASH = Unleash::Client.new(url: '
|
87
|
+
UNLEASH = Unleash::Client.new(url: 'https://unleash.herokuapp.com/api', app_name: 'my_ruby_app', custom_http_headers: {'Authorization': '<API token>'})
|
63
88
|
```
|
64
89
|
|
65
90
|
## Dynamic custom HTTP headers
|
66
91
|
|
67
|
-
If you need custom HTTP headers that change during the lifetime of the client,
|
92
|
+
If you need custom HTTP headers that change during the lifetime of the client, the `custom_http_headers` can be given as a `Proc`.
|
68
93
|
|
69
94
|
```ruby
|
70
95
|
Unleash.configure do |config|
|
71
96
|
config.app_name = 'my_ruby_app'
|
72
|
-
config.url = '
|
97
|
+
config.url = 'https://unleash.herokuapp.com/api'
|
73
98
|
config.custom_http_headers = proc do
|
74
99
|
{
|
75
|
-
'Authorization': '<
|
100
|
+
'Authorization': '<API token>',
|
76
101
|
'X-Client-Request-Time': Time.now.iso8601
|
77
102
|
}
|
78
103
|
end
|
79
104
|
end
|
80
105
|
```
|
81
106
|
|
82
|
-
#### List of
|
107
|
+
#### List of Arguments
|
83
108
|
|
84
|
-
| Argument | Description | Required? | Type | Default
|
109
|
+
| Argument | Description | Required? | Type | Default Value |
|
85
110
|
| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | --------------------------------- | ---------------------------------------------- |
|
86
111
|
| `url` | Unleash server URL. | Y | String | N/A |
|
87
112
|
| `app_name` | Name of your program. | Y | String | N/A |
|
88
|
-
| `instance_id` | Identifier for the running instance of
|
89
|
-
| `environment` | Unleash context option
|
90
|
-
| `project_name` | Name of the project to retrieve
|
91
|
-
| `refresh_interval` | How often the
|
92
|
-
| `metrics_interval` | How often the
|
93
|
-
| `disable_client` | Disables all communication with the Unleash server, effectively taking it _offline_. If set, `is_enabled?` always answer with the `default_value` and configuration validation is skipped. Will also forcefully set `disable_metrics` to `true`. Defeats the entire purpose of using
|
113
|
+
| `instance_id` | Identifier for the running instance of program. Important so you can trace back to where metrics are being collected from. **Highly recommended be be set.** | N | String | random UUID |
|
114
|
+
| `environment` | Unleash context option. Could be for example `prod` or `dev`. Not yet in use. **Not** the same as the SDK's [Unleash environment](https://docs.getunleash.io/reference/environments). | N | String | `default` |
|
115
|
+
| `project_name` | Name of the project to retrieve features from. If not set, all feature flags will be retrieved. | N | String | nil |
|
116
|
+
| `refresh_interval` | How often the unleash client should check with the server for configuration changes. | N | Integer | 15 |
|
117
|
+
| `metrics_interval` | How often the unleash client should send metrics to server. | N | Integer | 60 |
|
118
|
+
| `disable_client` | Disables all communication with the Unleash server, effectively taking it _offline_. If set, `is_enabled?` will always answer with the `default_value` and configuration validation is skipped. Will also forcefully set `disable_metrics` to `true`. Defeats the entire purpose of using unleash, except when running tests. | N | Boolean | `false` |
|
94
119
|
| `disable_metrics` | Disables sending metrics to Unleash server. If the `disable_client` option is set to `true`, then this option will also be set to `true`, regardless of the value provided. | N | Boolean | `false` |
|
95
|
-
| `custom_http_headers` | Custom headers to send to Unleash. As of Unleash v4.0.0, the `Authorization` header is required. For example: `{'Authorization': '<
|
120
|
+
| `custom_http_headers` | Custom headers to send to Unleash. As of Unleash v4.0.0, the `Authorization` header is required. For example: `{'Authorization': '<API token>'}` | N | Hash/Proc | {} |
|
96
121
|
| `timeout` | How long to wait for the connection to be established or wait in reading state (open_timeout/read_timeout) | N | Integer | 30 |
|
97
122
|
| `retry_limit` | How many consecutive failures in connecting to the Unleash server are allowed before giving up. The default is to retry indefinitely. | N | Float::INFINITY | 5 |
|
98
|
-
| `backup_file` | Filename to store the last known state from the Unleash server.
|
123
|
+
| `backup_file` | Filename to store the last known state from the Unleash server. Best to not change this from the default. | N | String | `Dir.tmpdir + "/unleash-#{app_name}-repo.json` |
|
99
124
|
| `logger` | Specify a custom `Logger` class to handle logs for the Unleash client. | N | Class | `Logger.new(STDOUT)` |
|
100
125
|
| `log_level` | Change the log level for the `Logger` class. Constant from `Logger::Severity`. | N | Constant | `Logger::WARN` |
|
101
|
-
| `bootstrap_config` | Bootstrap config
|
102
|
-
| `strategies` | Strategies manager that holds all strategies and allows to add custom strategies
|
126
|
+
| `bootstrap_config` | Bootstrap config on how to loaded data on start-up. This is useful for loading large states on startup without (or before) hitting the network. | N | Unleash::Bootstrap::Configuration | `nil` |
|
127
|
+
| `strategies` | Strategies manager that holds all strategies and allows to add custom strategies | N | Unleash::Strategies | `Unleash::Strategies.new` |
|
103
128
|
|
104
129
|
For a more in-depth look, please see `lib/unleash/configuration.rb`.
|
105
130
|
|
@@ -108,13 +133,13 @@ For a more in-depth look, please see `lib/unleash/configuration.rb`.
|
|
108
133
|
| `UNLEASH_BOOTSTRAP_FILE` | File to read bootstrap data from |
|
109
134
|
| `UNLEASH_BOOTSTRAP_URL` | URL to read bootstrap data from |
|
110
135
|
|
111
|
-
## Usage in a plain Ruby
|
136
|
+
## Usage in a plain Ruby Application
|
112
137
|
|
113
138
|
```ruby
|
114
139
|
require 'unleash'
|
115
140
|
require 'unleash/context'
|
116
141
|
|
117
|
-
@unleash = Unleash::Client.new(app_name: 'my_ruby_app', url: '
|
142
|
+
@unleash = Unleash::Client.new(app_name: 'my_ruby_app', url: 'https://unleash.herokuapp.com/api', custom_http_headers: { 'Authorization': '<API token>' })
|
118
143
|
|
119
144
|
feature_name = "AwesomeFeature"
|
120
145
|
unleash_context = Unleash::Context.new
|
@@ -133,7 +158,7 @@ else
|
|
133
158
|
end
|
134
159
|
```
|
135
160
|
|
136
|
-
## Usage in a Rails
|
161
|
+
## Usage in a Rails Application
|
137
162
|
|
138
163
|
### 1. Add Initializer
|
139
164
|
|
@@ -158,8 +183,10 @@ UNLEASH = Unleash::Client.new
|
|
158
183
|
# Rails.configuration.unleash = Unleash::Client.new
|
159
184
|
```
|
160
185
|
|
161
|
-
For `config.instance_id` use a string with a unique identification for the running instance.
|
162
|
-
|
186
|
+
For `config.instance_id` use a string with a unique identification for the running instance.
|
187
|
+
For example: it could be the hostname, if you only run one App per host.
|
188
|
+
Or the docker container id, if you are running in docker.
|
189
|
+
If it is not set the client will generate an unique UUID for each execution.
|
163
190
|
|
164
191
|
To have it available in the `rails console` command as well, also add to the file above:
|
165
192
|
|
@@ -186,12 +213,12 @@ Then you may keep the client configuration still in `config/initializers/unleash
|
|
186
213
|
```ruby
|
187
214
|
Unleash.configure do |config|
|
188
215
|
config.app_name = Rails.application.class.parent.to_s
|
189
|
-
config.url = '
|
190
|
-
config.custom_http_headers = {'Authorization': '<
|
216
|
+
config.url = 'https://unleash.herokuapp.com/api'
|
217
|
+
config.custom_http_headers = {'Authorization': '<API token>'}
|
191
218
|
end
|
192
219
|
```
|
193
220
|
|
194
|
-
But you must ensure that the
|
221
|
+
But you must ensure that the unleash client is instantiated only after the process is forked.
|
195
222
|
This is done by creating the client inside the `on_worker_boot` code block in `puma.rb` as below:
|
196
223
|
|
197
224
|
```ruby
|
@@ -214,14 +241,14 @@ end
|
|
214
241
|
|
215
242
|
By not using `preload_app!`:
|
216
243
|
|
217
|
-
-
|
218
|
-
-
|
244
|
+
- the `Rails` constant will NOT be available.
|
245
|
+
- but phased restarts will be possible.
|
219
246
|
|
220
247
|
You need to ensure that in `puma.rb`:
|
221
248
|
|
222
|
-
-
|
223
|
-
-
|
224
|
-
-
|
249
|
+
- loading unleash sdk with `require 'unleash'` explicitly, as it will not be pre-loaded.
|
250
|
+
- all parameters must be explicitly set in the `on_worker_boot` block, as `config/initializers/unleash.rb` is not read.
|
251
|
+
- there are no references to `Rails` constant, as that is not yet available.
|
225
252
|
|
226
253
|
Example for `puma.rb`:
|
227
254
|
|
@@ -236,8 +263,8 @@ on_worker_boot do
|
|
236
263
|
|
237
264
|
::UNLEASH = Unleash::Client.new(
|
238
265
|
app_name: 'my_rails_app',
|
239
|
-
url: '
|
240
|
-
custom_http_headers: {'Authorization': '<
|
266
|
+
url: 'https://unleash.herokuapp.com/api',
|
267
|
+
custom_http_headers: {'Authorization': '<API token>'},
|
241
268
|
)
|
242
269
|
end
|
243
270
|
|
@@ -250,7 +277,7 @@ Note that we also added shutdown hooks in `on_worker_shutdown`, to ensure a clea
|
|
250
277
|
|
251
278
|
#### 1.c Add Initializer if using [Phusion Passenger](https://github.com/phusion/passenger)
|
252
279
|
|
253
|
-
The
|
280
|
+
The unleash client needs to be configured and instantiated inside the `PhusionPassenger.on_event(:starting_worker_process)` code block due to [smart spawning](https://www.phusionpassenger.com/library/indepth/ruby/spawn_methods/#smart-spawning-caveats):
|
254
281
|
|
255
282
|
The initializer in `config/initializers/unleash.rb` should look like:
|
256
283
|
|
@@ -261,8 +288,8 @@ PhusionPassenger.on_event(:starting_worker_process) do |forked|
|
|
261
288
|
config.app_name = Rails.application.class.parent.to_s
|
262
289
|
# config.instance_id = "#{Socket.gethostname}"
|
263
290
|
config.logger = Rails.logger
|
264
|
-
config.url = '
|
265
|
-
config.custom_http_headers = {'Authorization': '<
|
291
|
+
config.url = 'https://unleash.herokuapp.com/api'
|
292
|
+
config.custom_http_headers = {'Authorization': '<API token>'}
|
266
293
|
end
|
267
294
|
|
268
295
|
UNLEASH = Unleash::Client.new
|
@@ -272,7 +299,7 @@ end
|
|
272
299
|
|
273
300
|
#### 1.d Add Initializer hooks when using within [Sidekiq](https://github.com/mperham/sidekiq)
|
274
301
|
|
275
|
-
Note that in this case
|
302
|
+
Note that in this case we require that the code block for `Unleash.configure` is set beforehand.
|
276
303
|
For example in `config/initializers/unleash.rb`.
|
277
304
|
|
278
305
|
```ruby
|
@@ -289,7 +316,7 @@ end
|
|
289
316
|
|
290
317
|
### 2. Set Unleash::Context
|
291
318
|
|
292
|
-
|
319
|
+
Be sure to add the following method and callback in the application controller to have `@unleash_context` set for all requests:
|
293
320
|
|
294
321
|
Add in `app/controllers/application_controller.rb`:
|
295
322
|
|
@@ -306,7 +333,7 @@ Add in `app/controllers/application_controller.rb`:
|
|
306
333
|
end
|
307
334
|
```
|
308
335
|
|
309
|
-
|
336
|
+
Or if you see better fit, only in the controllers that you will be using unleash.
|
310
337
|
|
311
338
|
### 3. Sample usage
|
312
339
|
|
@@ -379,11 +406,11 @@ end
|
|
379
406
|
|
380
407
|
Note:
|
381
408
|
|
382
|
-
- The block/lambda/proc can use
|
409
|
+
- The block/lambda/proc can use feature name and context as an arguments.
|
383
410
|
- The client will evaluate the fallback function once per call of `is_enabled()`.
|
384
|
-
Please keep this in mind when creating your fallback function
|
411
|
+
Please keep this in mind when creating your fallback function!
|
385
412
|
- The returned value of the block should be a boolean.
|
386
|
-
However, the client will coerce the result to
|
413
|
+
However, the client will coerce the result to boolean via `!!`.
|
387
414
|
- If both a `default_value` and `fallback_function` are supplied,
|
388
415
|
the client will define the default value by `OR`ing the default value and the output of the fallback function.
|
389
416
|
|
@@ -415,21 +442,21 @@ Bootstrapping can be configured by providing a bootstrap configuration when init
|
|
415
442
|
|
416
443
|
```ruby
|
417
444
|
@unleash = Unleash::Client.new(
|
418
|
-
url: '
|
445
|
+
url: 'https://unleash.herokuapp.com/api',
|
419
446
|
app_name: 'my_ruby_app',
|
420
|
-
custom_http_headers: { 'Authorization': '<
|
447
|
+
custom_http_headers: { 'Authorization': '<API token>' },
|
421
448
|
bootstrap_config: Unleash::Bootstrap::Configuration.new({
|
422
|
-
url: "
|
423
|
-
url_headers: {'Authorization': '<
|
449
|
+
url: "https://unleash.herokuapp.com/api/client/features",
|
450
|
+
url_headers: {'Authorization': '<API token>'}
|
424
451
|
})
|
425
452
|
)
|
426
453
|
```
|
427
454
|
|
428
455
|
The `Bootstrap::Configuration` initializer takes a hash with one of the following options specified:
|
429
456
|
|
430
|
-
- `file_path` - An absolute or relative path to a file containing a JSON string of the response body from the Unleash server. This can also be set
|
431
|
-
- `url` - A url pointing to an Unleash server's features endpoint, the code sample above is illustrative. This can also be set
|
432
|
-
- `url_headers` - Headers for the GET
|
457
|
+
- `file_path` - An absolute or relative path to a file containing a JSON string of the response body from the Unleash server. This can also be set though the `UNLEASH_BOOTSTRAP_FILE` environment variable.
|
458
|
+
- `url` - A url pointing to an Unleash server's features endpoint, the code sample above is illustrative. This can also be set though the `UNLEASH_BOOTSTRAP_URL` environment variable.
|
459
|
+
- `url_headers` - Headers for the GET http request to the `url` above. Only used if the `url` parameter is also set. If this option isn't set then the bootstrapper will use the same url headers as the Unleash client.
|
433
460
|
- `data` - A raw JSON string as returned by the Unleash server.
|
434
461
|
- `block` - A lambda containing custom logic if you need it, an example is provided below.
|
435
462
|
|
@@ -443,13 +470,13 @@ The order of preference is as follows:
|
|
443
470
|
|
444
471
|
Example usage:
|
445
472
|
|
446
|
-
First
|
473
|
+
First saving the toggles locally:
|
447
474
|
|
448
475
|
```shell
|
449
|
-
curl -H 'Authorization: <
|
476
|
+
curl -H 'Authorization: <API token>' -XGET 'https://unleash.herokuapp.com/api' > ./default-toggles.json
|
450
477
|
```
|
451
478
|
|
452
|
-
|
479
|
+
Now using them on start up:
|
453
480
|
|
454
481
|
```ruby
|
455
482
|
|
@@ -459,8 +486,8 @@ custom_boostrapper = lambda {
|
|
459
486
|
|
460
487
|
@unleash = Unleash::Client.new(
|
461
488
|
app_name: 'my_ruby_app',
|
462
|
-
url: '
|
463
|
-
custom_http_headers: { 'Authorization': '<
|
489
|
+
url: 'https://unleash.herokuapp.com/api',
|
490
|
+
custom_http_headers: { 'Authorization': '<API token>' },
|
464
491
|
bootstrap_config: Unleash::Bootstrap::Configuration.new({
|
465
492
|
block: custom_boostrapper
|
466
493
|
})
|
@@ -472,19 +499,19 @@ Be aware that the client initializer will block until bootstrapping is complete.
|
|
472
499
|
|
473
500
|
#### Client methods
|
474
501
|
|
475
|
-
| Method
|
502
|
+
| Method Name | Description | Return Type |
|
476
503
|
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ |
|
477
|
-
| `is_enabled?` |
|
478
|
-
| `enabled?` |
|
479
|
-
| `if_enabled` |
|
480
|
-
| `is_disabled?` |
|
481
|
-
| `disabled?` |
|
482
|
-
| `if_disabled` |
|
483
|
-
| `get_variant` |
|
484
|
-
| `shutdown` |
|
485
|
-
| `shutdown!` |
|
486
|
-
|
487
|
-
For the full method signatures, see [client.rb](lib/unleash/client.rb)
|
504
|
+
| `is_enabled?` | Check if feature toggle is to be enabled or not. | Boolean |
|
505
|
+
| `enabled?` | Alias to the `is_enabled?` method. But more ruby idiomatic. | Boolean |
|
506
|
+
| `if_enabled` | Run a code block, if a feature is enabled. | `yield` |
|
507
|
+
| `is_disabled?` | Check if feature toggle is to be enabled or not. | Boolean |
|
508
|
+
| `disabled?` | Alias to the `is_disabled?` method. But more ruby idiomatic. | Boolean |
|
509
|
+
| `if_disabled` | Run a code block, if a feature is disabled. | `yield` |
|
510
|
+
| `get_variant` | Get variant for a given feature | `Unleash::Variant` |
|
511
|
+
| `shutdown` | Save metrics to disk, flush metrics to server, and then kill ToggleFetcher and MetricsReporter threads. A safe shutdown. Not really useful in long running applications, like web applications. | nil |
|
512
|
+
| `shutdown!` | Kill ToggleFetcher and MetricsReporter threads immediately. | nil |
|
513
|
+
|
514
|
+
For the full method signatures, please see [client.rb](lib/unleash/client.rb)
|
488
515
|
|
489
516
|
## Local test client
|
490
517
|
|
@@ -496,9 +523,9 @@ bundle exec bin/unleash-client --help
|
|
496
523
|
bundle exec examples/simple.rb
|
497
524
|
```
|
498
525
|
|
499
|
-
## Available
|
526
|
+
## Available Strategies
|
500
527
|
|
501
|
-
This client comes with all the required strategies out of the box:
|
528
|
+
This client comes with the all the required strategies out of the box:
|
502
529
|
|
503
530
|
- ApplicationHostnameStrategy
|
504
531
|
- DefaultStrategy
|
@@ -510,10 +537,10 @@ This client comes with all the required strategies out of the box:
|
|
510
537
|
- UnknownStrategy
|
511
538
|
- UserWithIdStrategy
|
512
539
|
|
513
|
-
## Custom
|
540
|
+
## Custom Strategies
|
514
541
|
|
515
|
-
|
516
|
-
In order for
|
542
|
+
Client allows to add [custom activation strategies](https://docs.getunleash.io/advanced/custom_activation_strategy) using configuration.
|
543
|
+
In order for strategy to work correctly it should support two methods `name` and `is_enabled?`
|
517
544
|
|
518
545
|
```ruby
|
519
546
|
class MyCustomStrategy
|
@@ -548,17 +575,16 @@ To install this gem onto your local machine, run `bundle exec rake install`.
|
|
548
575
|
|
549
576
|
## Releasing
|
550
577
|
|
551
|
-
|
578
|
+
Choose a new version number following [Semantic Versioning](https://semver.org/spec/v2.0.0.html) semantics and then:
|
552
579
|
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
- On the `main` branch, run `bundle exec rake release` to create a git tag for the new version, push commits and tags to origin, and publish `.gem` file to [rubygems.org](https://rubygems.org).
|
580
|
+
- update the version number in [./lib/unleash/version.rb](./lib/unleash/version.rb),
|
581
|
+
- if a major or minor version bump, update the [Installation section](#installation) in [README.md](README.md)
|
582
|
+
- update [CHANGELOG.md](CHANGELOG.md) following the format on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
|
583
|
+
- commit with message `chore: bump version to x.y.z`
|
584
|
+
- then run `bundle exec rake release`
|
585
|
+
- This will create a git tag for the version on the current commit,
|
586
|
+
- push git commits and tags to origin and
|
587
|
+
- push the `.gem` file to [rubygems.org](https://rubygems.org)
|
562
588
|
|
563
589
|
## Contributing
|
564
590
|
|
@@ -568,4 +594,4 @@ Be sure to run both `bundle exec rspec` and `bundle exec rubocop` in your branch
|
|
568
594
|
|
569
595
|
Please include tests with any pull requests, to avoid regressions.
|
570
596
|
|
571
|
-
Check out our guide for more information on how to build and scale [feature flag systems](https://docs.getunleash.io/topics/feature-flags/feature-flag-best-practices)
|
597
|
+
Check out our guide for more information on how to build and scale [feature flag systems](https://docs.getunleash.io/topics/feature-flags/feature-flag-best-practices)
|
data/lib/unleash/version.rb
CHANGED
data/unleash-client.gemspec
CHANGED
@@ -21,9 +21,10 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.bindir = 'bin'
|
22
22
|
spec.executables = spec.files.grep(%r{^bin/unleash}) { |f| File.basename(f) }
|
23
23
|
spec.require_paths = ["lib"]
|
24
|
-
spec.required_ruby_version = ">= 2.
|
24
|
+
spec.required_ruby_version = ">= 2.6"
|
25
25
|
|
26
|
-
spec.add_dependency "
|
26
|
+
spec.add_dependency "murmurhash3", "~> 0.1.7"
|
27
|
+
spec.add_dependency "yggdrasil-engine", "~> 0.0.6.beta.2"
|
27
28
|
|
28
29
|
spec.add_development_dependency "bundler", "~> 2.1"
|
29
30
|
spec.add_development_dependency "rake", "~> 12.3"
|
metadata
CHANGED
@@ -1,29 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unleash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.0.
|
4
|
+
version: 6.0.1.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Renato Arruda
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: murmurhash3
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.1.7
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.1.7
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: yggdrasil-engine
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
31
|
- - "~>"
|
18
32
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.0.6
|
33
|
+
version: 0.0.6.beta.2
|
20
34
|
type: :runtime
|
21
35
|
prerelease: false
|
22
36
|
version_requirements: !ruby/object:Gem::Requirement
|
23
37
|
requirements:
|
24
38
|
- - "~>"
|
25
39
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.0.6
|
40
|
+
version: 0.0.6.beta.2
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -183,7 +197,6 @@ files:
|
|
183
197
|
- lib/unleash/variant.rb
|
184
198
|
- lib/unleash/version.rb
|
185
199
|
- unleash-client.gemspec
|
186
|
-
- v6_MIGRATION_GUIDE.md
|
187
200
|
homepage: https://github.com/unleash/unleash-client-ruby
|
188
201
|
licenses:
|
189
202
|
- Apache-2.0
|
@@ -196,7 +209,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
196
209
|
requirements:
|
197
210
|
- - ">="
|
198
211
|
- !ruby/object:Gem::Version
|
199
|
-
version: '2.
|
212
|
+
version: '2.6'
|
200
213
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
201
214
|
requirements:
|
202
215
|
- - ">="
|
data/v6_MIGRATION_GUIDE.md
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# Migrating to Unleash-Client-Ruby 6.0.0
|
2
|
-
|
3
|
-
This guide highlights the key changes you should be aware of when upgrading to v6.0.0 of the Unleash client.
|
4
|
-
|
5
|
-
## Custom strategy changes
|
6
|
-
|
7
|
-
In version 6+, custom strategies cannot override the built-in strategies. Specifically, strategies `applicationHostname`, `default`, `flexibleRollout`, `gradualRolloutRandom`, `gradualRolloutSessionId`, `gradualRolloutUserId`, `remoteAddress` or `userWithId` throw an error on startup. Previously, creating a custom strategy would only generate a warning in the logs.
|
8
|
-
|
9
|
-
The deprecated `register_custom_strategies` method has been removed. You can continue to [register custom strategies](./README.md#custom-strategies) using configuration.
|
10
|
-
|
11
|
-
## Direct access to strategy objects
|
12
|
-
|
13
|
-
**Note:** If you're not using the method `known_strategies` this section doesn't affect you
|
14
|
-
|
15
|
-
The objects for base strategies are no longer directly accessible via the SDK. The `known_strategies` method only returns custom strategies registered by the user. To check if a custom strategy will override either a built-in or custom strategy, use the `includes?` method (returns false if the name is available).
|
16
|
-
|
17
|
-
It is strongly discouraged to access or modify any properties of the built-in strategies other than the name. In version 6+, this is a hard requirement.
|
18
|
-
|
19
|
-
## ARM requirements
|
20
|
-
|
21
|
-
Version 6.0.0 introduces a new dependency on a native binary. Currently, only ARM binaries for macOS are distributed. If you require ARM support for Linux or Windows, please open a GitHub issue.
|