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.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/.run/sdk_test.rb.run.xml +3 -3
  3. data/CHANGELOG.md +12 -2
  4. data/Gemfile +17 -3
  5. data/README.md +155 -7
  6. data/api.yaml +736 -0
  7. data/example/example.rb +100 -3
  8. data/lib/ff/ruby/server/generated/lib/openapi_client/api/client_api.rb +545 -0
  9. data/lib/ff/ruby/server/generated/lib/openapi_client/api/metrics_api.rb +89 -0
  10. data/lib/ff/ruby/server/generated/lib/openapi_client/api_client.rb +390 -0
  11. data/lib/ff/ruby/server/generated/lib/openapi_client/api_error.rb +57 -0
  12. data/lib/ff/ruby/server/generated/lib/openapi_client/configuration.rb +282 -0
  13. data/lib/ff/ruby/server/generated/lib/openapi_client/models/authentication_request.rb +232 -0
  14. data/lib/ff/ruby/server/generated/lib/openapi_client/models/authentication_request_target.rb +250 -0
  15. data/lib/ff/ruby/server/generated/lib/openapi_client/models/authentication_response.rb +223 -0
  16. data/lib/ff/ruby/server/generated/lib/openapi_client/models/clause.rb +281 -0
  17. data/lib/ff/ruby/server/generated/lib/openapi_client/models/distribution.rb +239 -0
  18. data/lib/ff/ruby/server/generated/lib/openapi_client/models/error.rb +237 -0
  19. data/lib/ff/ruby/server/generated/lib/openapi_client/models/evaluation.rb +260 -0
  20. data/lib/ff/ruby/server/generated/lib/openapi_client/models/feature_config.rb +418 -0
  21. data/lib/ff/ruby/server/generated/lib/openapi_client/models/feature_state.rb +37 -0
  22. data/lib/ff/ruby/server/generated/lib/openapi_client/models/key_value.rb +237 -0
  23. data/lib/ff/ruby/server/generated/lib/openapi_client/models/metrics.rb +231 -0
  24. data/lib/ff/ruby/server/generated/lib/openapi_client/models/metrics_data.rb +303 -0
  25. data/lib/ff/ruby/server/generated/lib/openapi_client/models/pagination.rb +274 -0
  26. data/lib/ff/ruby/server/generated/lib/openapi_client/models/prerequisite.rb +239 -0
  27. data/lib/ff/ruby/server/generated/lib/openapi_client/models/segment.rb +320 -0
  28. data/lib/ff/ruby/server/generated/lib/openapi_client/models/serve.rb +227 -0
  29. data/lib/ff/ruby/server/generated/lib/openapi_client/models/serving_rule.rb +267 -0
  30. data/lib/ff/ruby/server/generated/lib/openapi_client/models/tag.rb +233 -0
  31. data/lib/ff/ruby/server/generated/lib/openapi_client/models/target.rb +331 -0
  32. data/lib/ff/ruby/server/generated/lib/openapi_client/models/target_data.rb +253 -0
  33. data/lib/ff/ruby/server/generated/lib/openapi_client/models/target_map.rb +232 -0
  34. data/lib/ff/ruby/server/generated/lib/openapi_client/models/variation.rb +255 -0
  35. data/lib/ff/ruby/server/generated/lib/openapi_client/models/variation_map.rb +245 -0
  36. data/lib/ff/ruby/server/generated/lib/openapi_client/models/weighted_variation.rb +237 -0
  37. data/lib/ff/ruby/server/generated/lib/openapi_client/version.rb +15 -0
  38. data/lib/ff/ruby/server/generated/lib/openapi_client.rb +65 -0
  39. data/lib/ff/ruby/server/sdk/api/auth_service.rb +91 -0
  40. data/lib/ff/ruby/server/sdk/api/cf_client.rb +93 -0
  41. data/lib/ff/ruby/server/sdk/api/client_callback.rb +45 -0
  42. data/lib/ff/ruby/server/sdk/api/config.rb +140 -0
  43. data/lib/ff/ruby/server/sdk/api/config_builder.rb +116 -0
  44. data/lib/ff/ruby/server/sdk/api/default_cache.rb +112 -0
  45. data/lib/ff/ruby/server/sdk/api/evaluation.rb +29 -0
  46. data/lib/ff/ruby/server/sdk/api/evaluator.rb +526 -0
  47. data/lib/ff/ruby/server/sdk/api/file_map_store.rb +60 -0
  48. data/lib/ff/ruby/server/sdk/api/flag_evaluate_callback.rb +13 -0
  49. data/lib/ff/ruby/server/sdk/api/inner_client.rb +311 -0
  50. data/lib/ff/ruby/server/sdk/api/inner_client_flag_evaluate_callback.rb +30 -0
  51. data/lib/ff/ruby/server/sdk/api/inner_client_metrics_callback.rb +33 -0
  52. data/lib/ff/ruby/server/sdk/api/inner_client_repository_callback.rb +44 -0
  53. data/lib/ff/ruby/server/sdk/api/inner_client_updater.rb +63 -0
  54. data/lib/ff/ruby/server/sdk/api/metrics_callback.rb +19 -0
  55. data/lib/ff/ruby/server/sdk/api/metrics_event.rb +16 -0
  56. data/lib/ff/ruby/server/sdk/api/metrics_processor.rb +297 -0
  57. data/lib/ff/ruby/server/sdk/api/operators.rb +20 -0
  58. data/lib/ff/ruby/server/sdk/api/polling_processor.rb +164 -0
  59. data/lib/ff/ruby/server/sdk/api/repository_callback.rb +28 -0
  60. data/lib/ff/ruby/server/sdk/api/storage_repository.rb +263 -0
  61. data/lib/ff/ruby/server/sdk/api/summary_metrics.rb +16 -0
  62. data/lib/ff/ruby/server/sdk/api/update_processor.rb +149 -0
  63. data/lib/ff/ruby/server/sdk/common/cache.rb +27 -0
  64. data/lib/ff/ruby/server/sdk/common/closeable.rb +7 -0
  65. data/lib/ff/ruby/server/sdk/common/destroyable.rb +12 -0
  66. data/lib/ff/ruby/server/sdk/common/repository.rb +45 -0
  67. data/lib/ff/ruby/server/sdk/common/storage.rb +29 -0
  68. data/lib/ff/ruby/server/sdk/connector/connector.rb +44 -0
  69. data/lib/ff/ruby/server/sdk/connector/events.rb +118 -0
  70. data/lib/ff/ruby/server/sdk/connector/harness_connector.rb +236 -0
  71. data/lib/ff/ruby/server/sdk/connector/service.rb +19 -0
  72. data/lib/ff/ruby/server/sdk/connector/updater.rb +32 -0
  73. data/lib/ff/ruby/server/sdk/dto/message.rb +13 -0
  74. data/lib/ff/ruby/server/sdk/dto/target.rb +24 -0
  75. data/lib/ff/ruby/server/sdk/version.rb +2 -1
  76. data/lib/ff/ruby/server/sdk.rb +39 -3
  77. data/openapitools.json +7 -0
  78. data/scripts/install.sh +8 -2
  79. data/scripts/openapi.sh +76 -0
  80. data/scripts/publish.sh +1 -1
  81. data/scripts/sdk_specs.sh +1 -1
  82. metadata +263 -11
  83. 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: 817b19ae2d914cd44f1cda5e8dea8eb019fa0cf8e367d71fd56990dc8150efdf
4
- data.tar.gz: '088dd7868cb6c17ad2633082f6592e07642b54ea9897a34a3074ca0a2108afae'
3
+ metadata.gz: 2597658c1a6717df136035cd00ddc1f0208d62cb625ace39c33d7e5a34b3e468
4
+ data.tar.gz: 3fb99b5496bb97802c55d2946641583b4f4bd2568827f4c8a02f4f7b909cc55e
5
5
  SHA512:
6
- metadata.gz: c0549f021ca93e1b6cd0e913370caa69b43dc4247a86e4e8e288259124482903a7316e7bd489afedcbb2d42317107c3300d961567a8ad6cf7552b69f98572ec8
7
- data.tar.gz: aa76f04ad606997faa49d4c61506ba86198e15cb9f61356ff76d6fa11332077eeb525640ff5bd2336dd554b113993b89d2da21d8434cd7610e562a5a122625b9
6
+ metadata.gz: 68e2be8404dc2e1ba3ba77119eff42d26c3799213a6473a6908f447f8f4f8e18b006c887d1685a45a9810a274fa493eccb4e98969b8ebb5e8c0793c05b3fda27
7
+ data.tar.gz: 699491d8f605fd94061f0bad2ab491237bd0dd77cdb494908fbd079e7a4a92cd69755133596492c97c0aab8fdac07d79dc3f55206ecbb93c7289d7df0ab41452
@@ -1,5 +1,5 @@
1
1
  <component name="ProjectRunConfigurationManager">
2
- <configuration default="false" name="sdk_test.rb" type="TestUnitRunConfigurationType" factoryName="Test::Unit/Shoulda/Minitest" nameIsGenerated="true">
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
- ## [Unreleased]
1
+ ## [1.0.2]
2
2
 
3
- ## [0.0.1] - 2021-11-16
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
- Before you Begin
1
+ Harness CF Ruby Server SDK
2
+ ========================
2
3
 
3
- Harness Feature Flags (FF) is a feature management solution that enables users to change the software’s functionality, without deploying new code. FF uses feature flags to hide code or behaviours without having to ship new versions of the software. A feature flag is like a powerful if statement.
4
+ ## Overview
4
5
 
5
- For more information, see https://harness.io/products/feature-flags/
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
- To read more, see https://ngdocs.harness.io/category/vjolt35atg-feature-flags
10
+ -------------------------
8
11
 
9
- To sign up, https://app.harness.io/auth/#/signup/
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.