ff-ruby-server-sdk 0.0.2 → 1.0.2.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.run/sdk_test.rb.run.xml +3 -3
- data/CHANGELOG.md +12 -2
- data/Gemfile +17 -3
- data/README.md +155 -7
- data/api.yaml +736 -0
- data/example/example.rb +100 -3
- data/lib/ff/ruby/server/generated/lib/openapi_client/api/client_api.rb +545 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/api/metrics_api.rb +89 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/api_client.rb +390 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/api_error.rb +57 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/configuration.rb +282 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/authentication_request.rb +232 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/authentication_request_target.rb +250 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/authentication_response.rb +223 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/clause.rb +281 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/distribution.rb +239 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/error.rb +237 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/evaluation.rb +260 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/feature_config.rb +418 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/feature_state.rb +37 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/key_value.rb +237 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/metrics.rb +231 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/metrics_data.rb +303 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/pagination.rb +274 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/prerequisite.rb +239 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/segment.rb +320 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/serve.rb +227 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/serving_rule.rb +267 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/tag.rb +233 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/target.rb +331 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/target_data.rb +253 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/target_map.rb +232 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/variation.rb +255 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/variation_map.rb +245 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/models/weighted_variation.rb +237 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client/version.rb +15 -0
- data/lib/ff/ruby/server/generated/lib/openapi_client.rb +65 -0
- data/lib/ff/ruby/server/sdk/api/auth_service.rb +91 -0
- data/lib/ff/ruby/server/sdk/api/cf_client.rb +93 -0
- data/lib/ff/ruby/server/sdk/api/client_callback.rb +45 -0
- data/lib/ff/ruby/server/sdk/api/config.rb +140 -0
- data/lib/ff/ruby/server/sdk/api/config_builder.rb +116 -0
- data/lib/ff/ruby/server/sdk/api/default_cache.rb +112 -0
- data/lib/ff/ruby/server/sdk/api/evaluation.rb +29 -0
- data/lib/ff/ruby/server/sdk/api/evaluator.rb +526 -0
- data/lib/ff/ruby/server/sdk/api/file_map_store.rb +60 -0
- data/lib/ff/ruby/server/sdk/api/flag_evaluate_callback.rb +13 -0
- data/lib/ff/ruby/server/sdk/api/inner_client.rb +311 -0
- data/lib/ff/ruby/server/sdk/api/inner_client_flag_evaluate_callback.rb +30 -0
- data/lib/ff/ruby/server/sdk/api/inner_client_metrics_callback.rb +33 -0
- data/lib/ff/ruby/server/sdk/api/inner_client_repository_callback.rb +44 -0
- data/lib/ff/ruby/server/sdk/api/inner_client_updater.rb +63 -0
- data/lib/ff/ruby/server/sdk/api/metrics_callback.rb +19 -0
- data/lib/ff/ruby/server/sdk/api/metrics_event.rb +16 -0
- data/lib/ff/ruby/server/sdk/api/metrics_processor.rb +297 -0
- data/lib/ff/ruby/server/sdk/api/operators.rb +20 -0
- data/lib/ff/ruby/server/sdk/api/polling_processor.rb +164 -0
- data/lib/ff/ruby/server/sdk/api/repository_callback.rb +28 -0
- data/lib/ff/ruby/server/sdk/api/storage_repository.rb +263 -0
- data/lib/ff/ruby/server/sdk/api/summary_metrics.rb +16 -0
- data/lib/ff/ruby/server/sdk/api/update_processor.rb +149 -0
- data/lib/ff/ruby/server/sdk/common/cache.rb +27 -0
- data/lib/ff/ruby/server/sdk/common/closeable.rb +7 -0
- data/lib/ff/ruby/server/sdk/common/destroyable.rb +12 -0
- data/lib/ff/ruby/server/sdk/common/repository.rb +45 -0
- data/lib/ff/ruby/server/sdk/common/storage.rb +29 -0
- data/lib/ff/ruby/server/sdk/connector/connector.rb +44 -0
- data/lib/ff/ruby/server/sdk/connector/events.rb +118 -0
- data/lib/ff/ruby/server/sdk/connector/harness_connector.rb +236 -0
- data/lib/ff/ruby/server/sdk/connector/service.rb +19 -0
- data/lib/ff/ruby/server/sdk/connector/updater.rb +32 -0
- data/lib/ff/ruby/server/sdk/dto/message.rb +13 -0
- data/lib/ff/ruby/server/sdk/dto/target.rb +24 -0
- data/lib/ff/ruby/server/sdk/version.rb +2 -1
- data/lib/ff/ruby/server/sdk.rb +39 -3
- data/openapitools.json +7 -0
- data/scripts/install.sh +8 -2
- data/scripts/openapi.sh +76 -0
- data/scripts/publish.sh +1 -1
- data/scripts/sdk_specs.sh +1 -1
- metadata +263 -11
- data/lib/ff/ruby/server/sdk/cf_client.rb +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2597658c1a6717df136035cd00ddc1f0208d62cb625ace39c33d7e5a34b3e468
|
4
|
+
data.tar.gz: 3fb99b5496bb97802c55d2946641583b4f4bd2568827f4c8a02f4f7b909cc55e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68e2be8404dc2e1ba3ba77119eff42d26c3799213a6473a6908f447f8f4f8e18b006c887d1685a45a9810a274fa493eccb4e98969b8ebb5e8c0793c05b3fda27
|
7
|
+
data.tar.gz: 699491d8f605fd94061f0bad2ab491237bd0dd77cdb494908fbd079e7a4a92cd69755133596492c97c0aab8fdac07d79dc3f55206ecbb93c7289d7df0ab41452
|
data/.run/sdk_test.rb.run.xml
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
<component name="ProjectRunConfigurationManager">
|
2
|
-
<configuration default="false" name="
|
2
|
+
<configuration default="false" name="SDK test" type="TestUnitRunConfigurationType" factoryName="Test::Unit/Shoulda/Minitest">
|
3
3
|
<module name="ff-ruby-server-sdk" />
|
4
4
|
<predefined_log_file enabled="true" id="RUBY_TESTUNIT" />
|
5
5
|
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="-Ilib:test" />
|
@@ -19,8 +19,8 @@
|
|
19
19
|
</EXTENSION>
|
20
20
|
<EXTENSION ID="org.jetbrains.plugins.ruby.rails.run.RailsRunConfigurationExtension" SCRATCH_USE_RAILS_RUNNER="false" />
|
21
21
|
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="TESTS_FOLDER_PATH" VALUE="" />
|
22
|
-
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="$MODULE_DIR$/test/ff/ruby/server/sdk_test.rb" />
|
23
|
-
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPTS_PATHS" VALUE="$MODULE_DIR$/test/ff/ruby/server/sdk_test.rb" />
|
22
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="$MODULE_DIR$/test/ff/ruby/server/sdk/sdk_test.rb" />
|
23
|
+
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPTS_PATHS" VALUE="$MODULE_DIR$/test/ff/ruby/server/sdk/sdk_test.rb" />
|
24
24
|
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_FILE_MASK" VALUE="" />
|
25
25
|
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_METHOD_NAME" VALUE="" />
|
26
26
|
<RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_TEST_TYPE" VALUE="CUSTOM_SET_OF_FILES" />
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
|
-
## [
|
1
|
+
## [1.0.2]
|
2
2
|
|
3
|
-
|
3
|
+
- Runtime and development dependencies specified.
|
4
|
+
|
5
|
+
- ## [1.0.1]
|
6
|
+
|
7
|
+
- OpenAPI issues fixed
|
8
|
+
|
9
|
+
## [1.0.0]
|
10
|
+
|
11
|
+
- The first SDK release
|
12
|
+
|
13
|
+
## [0.0.1, 0.0.2] - 2021-11-16
|
4
14
|
|
5
15
|
- Initial release
|
data/Gemfile
CHANGED
@@ -2,11 +2,25 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
-
# Specify your gem's dependencies in ff-ruby-server-sdk.gemspec
|
6
5
|
gemspec
|
7
6
|
|
8
7
|
gem "rake", "~> 13.0"
|
9
|
-
|
10
8
|
gem "minitest", "~> 5.0"
|
11
|
-
|
12
9
|
gem "standard", "~> 1.3"
|
10
|
+
|
11
|
+
# Caching support:
|
12
|
+
gem "pp"
|
13
|
+
gem "rufus-scheduler"
|
14
|
+
gem "libcache"
|
15
|
+
gem "jwt"
|
16
|
+
gem "moneta"
|
17
|
+
|
18
|
+
# SSE support:
|
19
|
+
gem "rest-client"
|
20
|
+
gem "sse-client"
|
21
|
+
|
22
|
+
# Concurrency support:
|
23
|
+
gem "concurrent-ruby", require: "concurrent"
|
24
|
+
|
25
|
+
# Evaluator dependencies:
|
26
|
+
gem "murmurhash3"
|
data/README.md
CHANGED
@@ -1,14 +1,162 @@
|
|
1
|
-
|
1
|
+
Harness CF Ruby Server SDK
|
2
|
+
========================
|
2
3
|
|
3
|
-
|
4
|
+
## Overview
|
4
5
|
|
5
|
-
|
6
|
+
-------------------------
|
7
|
+
[Harness](https://www.harness.io/) is a feature management platform that helps teams to build better software and to
|
8
|
+
test features quicker.
|
6
9
|
|
7
|
-
|
10
|
+
-------------------------
|
8
11
|
|
9
|
-
|
12
|
+
## Setup
|
13
|
+
|
14
|
+
Add the following snippet to your project's `Gemfile` file:
|
15
|
+
|
16
|
+
```
|
17
|
+
gem "ff-ruby-server-sdk"
|
18
|
+
```
|
19
|
+
|
20
|
+
## Cloning the SDK repository
|
21
|
+
|
22
|
+
In order to clone SDK repository properly perform cloning like in the following example:
|
23
|
+
|
24
|
+
```
|
25
|
+
git clone --recurse-submodules git@github.com:harness/ff-ruby-server-sdk.git
|
26
|
+
```
|
27
|
+
|
28
|
+
After dependency has been added, the SDK elements, primarily `CfClient` should be accessible in the main application.
|
29
|
+
|
30
|
+
## Initialization
|
31
|
+
|
32
|
+
`CfClient` is a base class that provides all features of the SDK.
|
33
|
+
|
34
|
+
We can instantiate by calling the `instance` method or by using public
|
35
|
+
constructor (making multiple instances).
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
require 'ff/ruby/server/sdk/api/config'
|
39
|
+
require 'ff/ruby/server/sdk/dto/target'
|
40
|
+
require 'ff/ruby/server/sdk/api/cf_client'
|
41
|
+
require 'ff/ruby/server/sdk/api/config_builder'
|
42
|
+
|
43
|
+
client = CfClient.instance
|
44
|
+
|
45
|
+
key = "YOUR_API_KEY_GOES_HERE"
|
46
|
+
|
47
|
+
logger = Logger.new(STDOUT)
|
48
|
+
|
49
|
+
# Or saving logs into the filesystem with daily rotation:
|
50
|
+
# logger = Logger.new("example.log", "daily")
|
51
|
+
|
52
|
+
config = ConfigBuilder.new
|
53
|
+
.logger(logger)
|
54
|
+
.build
|
55
|
+
|
56
|
+
client.init(key, config)
|
57
|
+
|
58
|
+
config.logger.debug 'We will wait for the initialization'
|
59
|
+
|
60
|
+
client.wait_for_initialization
|
61
|
+
|
62
|
+
config.logger.debug 'Initialization is complete'
|
63
|
+
|
64
|
+
target = Target.new("YOUR_TARGET_NAME")
|
65
|
+
```
|
66
|
+
|
67
|
+
`target` represents the desired target for which we want features to be evaluated.
|
68
|
+
|
69
|
+
`"YOUR_API_KEY"` is an authentication key, needed for access to Harness services.
|
70
|
+
|
71
|
+
**Your Harness SDK is now initialized. Congratulations!**
|
72
|
+
|
73
|
+
### Public API Methods ###
|
74
|
+
|
75
|
+
The Public API exposes a few methods that you can utilize:
|
76
|
+
|
77
|
+
Instantiate, initialize and close when done:
|
78
|
+
|
79
|
+
* `def initialize(api_key = nil, config = nil, connector = nil)`
|
80
|
+
* `def init(api_key = nil, config = nil, connector = nil)`
|
81
|
+
* `def wait_for_initialization`
|
82
|
+
* `def close`
|
83
|
+
|
84
|
+
Evaluations:
|
85
|
+
|
86
|
+
* `def bool_variation(identifier, target, default_value)`
|
87
|
+
* `def string_variation(identifier, target, default_value)`
|
88
|
+
* `def number_variation(identifier, target, default_value)`
|
89
|
+
* `def json_variation(identifier, target, default_value)`
|
90
|
+
|
91
|
+
## Fetch evaluation's value
|
92
|
+
|
93
|
+
It is possible to fetch a value for a given evaluation. Evaluation is performed based on a different type. In case there
|
94
|
+
is no evaluation with provided id, the default value is returned.
|
95
|
+
|
96
|
+
Use the appropriate method to fetch the desired Evaluation of a certain type.
|
97
|
+
|
98
|
+
### Bool variation
|
99
|
+
|
100
|
+
```
|
101
|
+
bool_result = client.bool_variation(bool_flag, target, false)
|
102
|
+
```
|
103
|
+
|
104
|
+
### Number variation
|
105
|
+
|
106
|
+
```
|
107
|
+
number_result = client.number_variation(number_flag, target, -1)
|
108
|
+
```
|
109
|
+
|
110
|
+
### String variation
|
111
|
+
|
112
|
+
```
|
113
|
+
string_result = client.string_variation(string_flag, target, "unavailable !!!")
|
114
|
+
```
|
115
|
+
|
116
|
+
### JSON variation
|
117
|
+
|
118
|
+
```
|
119
|
+
json_result = client.json_variation(json_flag, target, JSON.parse("{}"))
|
120
|
+
```
|
121
|
+
|
122
|
+
## Using feature flags metrics
|
123
|
+
|
124
|
+
Metrics API endpoint can be changed like this (if ever needed):
|
125
|
+
|
126
|
+
```
|
127
|
+
config = ConfigBuilder.new
|
128
|
+
.event_url("SOME_ENDPOINT_URL")
|
129
|
+
.build
|
130
|
+
```
|
131
|
+
|
132
|
+
Otherwise, the default metrics endpoint URL will be used.
|
133
|
+
|
134
|
+
## Connector
|
135
|
+
|
136
|
+
This is a new feature that allows you to create or use other connectors.
|
137
|
+
Connector is just a proxy to your data. Currently supported connectors:
|
138
|
+
|
139
|
+
* Harness (the default implementation)
|
140
|
+
|
141
|
+
```
|
142
|
+
connector = YourConnectorImplementation.new
|
143
|
+
|
144
|
+
client.init(
|
145
|
+
|
146
|
+
key,
|
147
|
+
config,
|
148
|
+
connector
|
149
|
+
)
|
150
|
+
```
|
151
|
+
|
152
|
+
## Shutting down the SDK
|
153
|
+
|
154
|
+
To avoid potential memory leak, when SDK is no longer needed
|
155
|
+
(when the app is closed, for example), a caller should call the `close` method:
|
156
|
+
|
157
|
+
```
|
158
|
+
client.close
|
159
|
+
```
|
10
160
|
|
11
161
|
|
12
|
-
# Harness FFM Server-side SDK for Ruby
|
13
162
|
|
14
|
-
Tbd.
|