openfeature-sdk 0.6.4 → 0.6.5
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/.release-please-manifest.json +1 -1
- data/.ruby-version +1 -1
- data/.simplecov +1 -0
- data/.tool-versions +1 -1
- data/.yardopts +5 -0
- data/CHANGELOG.md +7 -0
- data/CLAUDE.md +3 -0
- data/CONTRIBUTING.md +15 -1
- data/Gemfile +17 -2
- data/Gemfile.lock +72 -13
- data/README.md +14 -2
- data/Rakefile +14 -0
- data/SECURITY.md +10 -0
- data/Steepfile +7 -0
- data/examples/basic_usage.rb +22 -0
- data/examples/custom_provider.rb +56 -0
- data/examples/rails_integration.rb +60 -0
- data/lib/open_feature/sdk/version.rb +1 -1
- data/openfeature-sdk.gemspec +34 -0
- data/rbs_collection.lock.yaml +292 -0
- data/rbs_collection.yaml +14 -0
- data/sig/open_feature/sdk/api.rbs +35 -0
- data/sig/open_feature/sdk/client.rbs +49 -0
- data/sig/open_feature/sdk/client_metadata.rbs +11 -0
- data/sig/open_feature/sdk/configuration.rbs +43 -0
- data/sig/open_feature/sdk/evaluation_context.rbs +19 -0
- data/sig/open_feature/sdk/evaluation_context_builder.rbs +7 -0
- data/sig/open_feature/sdk/evaluation_details.rbs +19 -0
- data/sig/open_feature/sdk/event_dispatcher.rbs +24 -0
- data/sig/open_feature/sdk/hooks/hints.rbs +30 -0
- data/sig/open_feature/sdk/hooks/hook.rbs +19 -0
- data/sig/open_feature/sdk/hooks/hook_context.rbs +18 -0
- data/sig/open_feature/sdk/hooks/hook_executor.rbs +20 -0
- data/sig/open_feature/sdk/hooks/logging_hook.rbs +25 -0
- data/sig/open_feature/sdk/provider/error_code.rbs +16 -0
- data/sig/open_feature/sdk/provider/event_emitter.rbs +16 -0
- data/sig/open_feature/sdk/provider/in_memory_provider.rbs +35 -0
- data/sig/open_feature/sdk/provider/no_op_provider.rbs +25 -0
- data/sig/open_feature/sdk/provider/provider_metadata.rbs +11 -0
- data/sig/open_feature/sdk/provider/reason.rbs +17 -0
- data/sig/open_feature/sdk/provider/resolution_details.rbs +19 -0
- data/sig/open_feature/sdk/provider.rbs +24 -0
- data/sig/open_feature/sdk/provider_event.rbs +12 -0
- data/sig/open_feature/sdk/provider_initialization_error.rbs +11 -0
- data/sig/open_feature/sdk/provider_state.rbs +13 -0
- data/sig/open_feature/sdk/provider_state_registry.rbs +22 -0
- data/sig/open_feature/sdk/telemetry.rbs +29 -0
- data/sig/open_feature/sdk/thread_local_transaction_context_propagator.rbs +12 -0
- data/sig/open_feature/sdk/tracking_event_details.rbs +10 -0
- data/sig/open_feature/sdk/transaction_context_propagator.rbs +11 -0
- data/sig/open_feature/sdk/version.rbs +5 -0
- data/sig/open_feature/sdk.rbs +22 -0
- metadata +52 -139
- data/docs/plans/2026-03-07-telemetry-utility-design.md +0 -98
- data/docs/plans/2026-03-07-telemetry-utility-plan.md +0 -578
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
---
|
|
2
|
+
path: ".gem_rbs_collection"
|
|
3
|
+
gems:
|
|
4
|
+
- name: activesupport
|
|
5
|
+
version: '7.0'
|
|
6
|
+
source:
|
|
7
|
+
type: git
|
|
8
|
+
name: ruby/gem_rbs_collection
|
|
9
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
10
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
11
|
+
repo_dir: gems
|
|
12
|
+
- name: ast
|
|
13
|
+
version: '2.4'
|
|
14
|
+
source:
|
|
15
|
+
type: git
|
|
16
|
+
name: ruby/gem_rbs_collection
|
|
17
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
18
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
19
|
+
repo_dir: gems
|
|
20
|
+
- name: base64
|
|
21
|
+
version: 0.3.0
|
|
22
|
+
source:
|
|
23
|
+
type: rubygems
|
|
24
|
+
- name: bigdecimal
|
|
25
|
+
version: '4.0'
|
|
26
|
+
source:
|
|
27
|
+
type: git
|
|
28
|
+
name: ruby/gem_rbs_collection
|
|
29
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
30
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
31
|
+
repo_dir: gems
|
|
32
|
+
- name: concurrent-ruby
|
|
33
|
+
version: '1.1'
|
|
34
|
+
source:
|
|
35
|
+
type: git
|
|
36
|
+
name: ruby/gem_rbs_collection
|
|
37
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
38
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
39
|
+
repo_dir: gems
|
|
40
|
+
- name: connection_pool
|
|
41
|
+
version: '2.4'
|
|
42
|
+
source:
|
|
43
|
+
type: git
|
|
44
|
+
name: ruby/gem_rbs_collection
|
|
45
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
46
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
47
|
+
repo_dir: gems
|
|
48
|
+
- name: csv
|
|
49
|
+
version: '3.3'
|
|
50
|
+
source:
|
|
51
|
+
type: git
|
|
52
|
+
name: ruby/gem_rbs_collection
|
|
53
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
54
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
55
|
+
repo_dir: gems
|
|
56
|
+
- name: date
|
|
57
|
+
version: '0'
|
|
58
|
+
source:
|
|
59
|
+
type: stdlib
|
|
60
|
+
- name: dbm
|
|
61
|
+
version: '0'
|
|
62
|
+
source:
|
|
63
|
+
type: stdlib
|
|
64
|
+
- name: delegate
|
|
65
|
+
version: '0'
|
|
66
|
+
source:
|
|
67
|
+
type: stdlib
|
|
68
|
+
- name: diff-lcs
|
|
69
|
+
version: '1.5'
|
|
70
|
+
source:
|
|
71
|
+
type: git
|
|
72
|
+
name: ruby/gem_rbs_collection
|
|
73
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
74
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
75
|
+
repo_dir: gems
|
|
76
|
+
- name: digest
|
|
77
|
+
version: '0'
|
|
78
|
+
source:
|
|
79
|
+
type: stdlib
|
|
80
|
+
- name: erb
|
|
81
|
+
version: '0'
|
|
82
|
+
source:
|
|
83
|
+
type: stdlib
|
|
84
|
+
- name: ffi
|
|
85
|
+
version: 1.17.3
|
|
86
|
+
source:
|
|
87
|
+
type: rubygems
|
|
88
|
+
- name: fileutils
|
|
89
|
+
version: '0'
|
|
90
|
+
source:
|
|
91
|
+
type: stdlib
|
|
92
|
+
- name: forwardable
|
|
93
|
+
version: '0'
|
|
94
|
+
source:
|
|
95
|
+
type: stdlib
|
|
96
|
+
- name: i18n
|
|
97
|
+
version: '1.10'
|
|
98
|
+
source:
|
|
99
|
+
type: git
|
|
100
|
+
name: ruby/gem_rbs_collection
|
|
101
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
102
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
103
|
+
repo_dir: gems
|
|
104
|
+
- name: io-console
|
|
105
|
+
version: '0'
|
|
106
|
+
source:
|
|
107
|
+
type: stdlib
|
|
108
|
+
- name: json
|
|
109
|
+
version: '0'
|
|
110
|
+
source:
|
|
111
|
+
type: stdlib
|
|
112
|
+
- name: listen
|
|
113
|
+
version: '3.9'
|
|
114
|
+
source:
|
|
115
|
+
type: git
|
|
116
|
+
name: ruby/gem_rbs_collection
|
|
117
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
118
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
119
|
+
repo_dir: gems
|
|
120
|
+
- name: logger
|
|
121
|
+
version: '0'
|
|
122
|
+
source:
|
|
123
|
+
type: stdlib
|
|
124
|
+
- name: mini_mime
|
|
125
|
+
version: '0.1'
|
|
126
|
+
source:
|
|
127
|
+
type: git
|
|
128
|
+
name: ruby/gem_rbs_collection
|
|
129
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
130
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
131
|
+
repo_dir: gems
|
|
132
|
+
- name: minitest
|
|
133
|
+
version: '5.25'
|
|
134
|
+
source:
|
|
135
|
+
type: git
|
|
136
|
+
name: ruby/gem_rbs_collection
|
|
137
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
138
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
139
|
+
repo_dir: gems
|
|
140
|
+
- name: monitor
|
|
141
|
+
version: '0'
|
|
142
|
+
source:
|
|
143
|
+
type: stdlib
|
|
144
|
+
- name: mutex_m
|
|
145
|
+
version: 0.3.0
|
|
146
|
+
source:
|
|
147
|
+
type: rubygems
|
|
148
|
+
- name: openssl
|
|
149
|
+
version: '0'
|
|
150
|
+
source:
|
|
151
|
+
type: stdlib
|
|
152
|
+
- name: optparse
|
|
153
|
+
version: '0'
|
|
154
|
+
source:
|
|
155
|
+
type: stdlib
|
|
156
|
+
- name: parallel
|
|
157
|
+
version: '1.20'
|
|
158
|
+
source:
|
|
159
|
+
type: git
|
|
160
|
+
name: ruby/gem_rbs_collection
|
|
161
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
162
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
163
|
+
repo_dir: gems
|
|
164
|
+
- name: parser
|
|
165
|
+
version: '3.2'
|
|
166
|
+
source:
|
|
167
|
+
type: git
|
|
168
|
+
name: ruby/gem_rbs_collection
|
|
169
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
170
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
171
|
+
repo_dir: gems
|
|
172
|
+
- name: pp
|
|
173
|
+
version: '0'
|
|
174
|
+
source:
|
|
175
|
+
type: stdlib
|
|
176
|
+
- name: prettyprint
|
|
177
|
+
version: '0'
|
|
178
|
+
source:
|
|
179
|
+
type: stdlib
|
|
180
|
+
- name: prism
|
|
181
|
+
version: 1.9.0
|
|
182
|
+
source:
|
|
183
|
+
type: rubygems
|
|
184
|
+
- name: pstore
|
|
185
|
+
version: '0'
|
|
186
|
+
source:
|
|
187
|
+
type: stdlib
|
|
188
|
+
- name: psych
|
|
189
|
+
version: '0'
|
|
190
|
+
source:
|
|
191
|
+
type: stdlib
|
|
192
|
+
- name: rainbow
|
|
193
|
+
version: '3.0'
|
|
194
|
+
source:
|
|
195
|
+
type: git
|
|
196
|
+
name: ruby/gem_rbs_collection
|
|
197
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
198
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
199
|
+
repo_dir: gems
|
|
200
|
+
- name: rake
|
|
201
|
+
version: '13.0'
|
|
202
|
+
source:
|
|
203
|
+
type: git
|
|
204
|
+
name: ruby/gem_rbs_collection
|
|
205
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
206
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
207
|
+
repo_dir: gems
|
|
208
|
+
- name: rbs
|
|
209
|
+
version: 3.10.3
|
|
210
|
+
source:
|
|
211
|
+
type: rubygems
|
|
212
|
+
- name: rdoc
|
|
213
|
+
version: '0'
|
|
214
|
+
source:
|
|
215
|
+
type: stdlib
|
|
216
|
+
- name: regexp_parser
|
|
217
|
+
version: '2.8'
|
|
218
|
+
source:
|
|
219
|
+
type: git
|
|
220
|
+
name: ruby/gem_rbs_collection
|
|
221
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
222
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
223
|
+
repo_dir: gems
|
|
224
|
+
- name: rubocop
|
|
225
|
+
version: '1.57'
|
|
226
|
+
source:
|
|
227
|
+
type: git
|
|
228
|
+
name: ruby/gem_rbs_collection
|
|
229
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
230
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
231
|
+
repo_dir: gems
|
|
232
|
+
- name: rubocop-ast
|
|
233
|
+
version: '1.46'
|
|
234
|
+
source:
|
|
235
|
+
type: git
|
|
236
|
+
name: ruby/gem_rbs_collection
|
|
237
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
238
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
239
|
+
repo_dir: gems
|
|
240
|
+
- name: securerandom
|
|
241
|
+
version: '0'
|
|
242
|
+
source:
|
|
243
|
+
type: stdlib
|
|
244
|
+
- name: simplecov
|
|
245
|
+
version: '0.22'
|
|
246
|
+
source:
|
|
247
|
+
type: git
|
|
248
|
+
name: ruby/gem_rbs_collection
|
|
249
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
250
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
251
|
+
repo_dir: gems
|
|
252
|
+
- name: singleton
|
|
253
|
+
version: '0'
|
|
254
|
+
source:
|
|
255
|
+
type: stdlib
|
|
256
|
+
- name: socket
|
|
257
|
+
version: '0'
|
|
258
|
+
source:
|
|
259
|
+
type: stdlib
|
|
260
|
+
- name: stringio
|
|
261
|
+
version: '0'
|
|
262
|
+
source:
|
|
263
|
+
type: stdlib
|
|
264
|
+
- name: strscan
|
|
265
|
+
version: '0'
|
|
266
|
+
source:
|
|
267
|
+
type: stdlib
|
|
268
|
+
- name: time
|
|
269
|
+
version: '0'
|
|
270
|
+
source:
|
|
271
|
+
type: stdlib
|
|
272
|
+
- name: timeout
|
|
273
|
+
version: '0'
|
|
274
|
+
source:
|
|
275
|
+
type: stdlib
|
|
276
|
+
- name: tsort
|
|
277
|
+
version: '0'
|
|
278
|
+
source:
|
|
279
|
+
type: stdlib
|
|
280
|
+
- name: tzinfo
|
|
281
|
+
version: '2.0'
|
|
282
|
+
source:
|
|
283
|
+
type: git
|
|
284
|
+
name: ruby/gem_rbs_collection
|
|
285
|
+
revision: 9bf2eebb1c54b5d6f23f2acb65d4c36f195b4783
|
|
286
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
287
|
+
repo_dir: gems
|
|
288
|
+
- name: uri
|
|
289
|
+
version: '0'
|
|
290
|
+
source:
|
|
291
|
+
type: stdlib
|
|
292
|
+
gemfile_lock_path: Gemfile.lock
|
data/rbs_collection.yaml
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
sources:
|
|
2
|
+
- type: git
|
|
3
|
+
name: ruby/gem_rbs_collection
|
|
4
|
+
remote: https://github.com/ruby/gem_rbs_collection.git
|
|
5
|
+
revision: main
|
|
6
|
+
repo_dir: gems
|
|
7
|
+
|
|
8
|
+
path: .gem_rbs_collection
|
|
9
|
+
|
|
10
|
+
gems:
|
|
11
|
+
- name: singleton
|
|
12
|
+
- name: forwardable
|
|
13
|
+
- name: delegate
|
|
14
|
+
- name: timeout
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module OpenFeature
|
|
2
|
+
module SDK
|
|
3
|
+
class API
|
|
4
|
+
include Singleton
|
|
5
|
+
extend Forwardable
|
|
6
|
+
|
|
7
|
+
def configuration: () -> Configuration
|
|
8
|
+
|
|
9
|
+
def configure: () { (Configuration) -> void } -> void
|
|
10
|
+
|
|
11
|
+
def build_client: (?domain: String?, ?evaluation_context: EvaluationContext?) -> Client
|
|
12
|
+
|
|
13
|
+
def provider_metadata: (?domain: String?) -> Provider::ProviderMetadata?
|
|
14
|
+
|
|
15
|
+
# Delegated from Configuration
|
|
16
|
+
def provider: (?domain: String?) -> untyped?
|
|
17
|
+
def set_provider: (untyped provider, ?domain: String?) -> void
|
|
18
|
+
def set_provider_and_wait: (untyped provider, ?domain: String?) -> void
|
|
19
|
+
def hooks: () -> Array[untyped]
|
|
20
|
+
def add_hooks: (*Array[untyped] new_hooks) -> void
|
|
21
|
+
def evaluation_context: () -> EvaluationContext?
|
|
22
|
+
|
|
23
|
+
def add_handler: (String event_type, _ToProc handler) -> void
|
|
24
|
+
def remove_handler: (String event_type, _ToProc handler) -> void
|
|
25
|
+
|
|
26
|
+
def logger: () -> untyped?
|
|
27
|
+
def logger=: (untyped? new_logger) -> void
|
|
28
|
+
|
|
29
|
+
def set_transaction_context_propagator: (_TransactionContextPropagator propagator) -> void
|
|
30
|
+
def set_transaction_context: (EvaluationContext evaluation_context) -> void
|
|
31
|
+
|
|
32
|
+
def shutdown: () -> void
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
module OpenFeature
|
|
2
|
+
module SDK
|
|
3
|
+
class Client
|
|
4
|
+
TYPE_CLASS_MAP: Hash[Symbol, Array[Class]]
|
|
5
|
+
RESULT_TYPE: Array[Symbol]
|
|
6
|
+
SUFFIXES: Array[Symbol]
|
|
7
|
+
EMPTY_HINTS: Hooks::Hints
|
|
8
|
+
|
|
9
|
+
attr_reader metadata: ClientMetadata
|
|
10
|
+
attr_reader evaluation_context: EvaluationContext?
|
|
11
|
+
attr_accessor hooks: Array[untyped]
|
|
12
|
+
|
|
13
|
+
def initialize: (provider: untyped, ?domain: String?, ?evaluation_context: EvaluationContext?) -> void
|
|
14
|
+
|
|
15
|
+
def add_hooks: (*Array[untyped] new_hooks) -> void
|
|
16
|
+
|
|
17
|
+
def provider_status: () -> String
|
|
18
|
+
|
|
19
|
+
def add_handler: (String event_type, ?_ToProc? handler) ?{ (Hash[Symbol, untyped]) -> void } -> void
|
|
20
|
+
def remove_handler: (String event_type, ?_ToProc? handler) ?{ (Hash[Symbol, untyped]) -> void } -> void
|
|
21
|
+
|
|
22
|
+
def track: (String tracking_event_name, ?evaluation_context: EvaluationContext?, ?tracking_event_details: TrackingEventDetails?) -> void
|
|
23
|
+
|
|
24
|
+
# Dynamically generated fetch_*_value methods (6 types)
|
|
25
|
+
def fetch_boolean_value: (flag_key: String, default_value: bool, ?evaluation_context: EvaluationContext?, ?hooks: Array[untyped], ?hook_hints: Hooks::Hints?) -> bool
|
|
26
|
+
def fetch_string_value: (flag_key: String, default_value: String, ?evaluation_context: EvaluationContext?, ?hooks: Array[untyped], ?hook_hints: Hooks::Hints?) -> String
|
|
27
|
+
def fetch_number_value: (flag_key: String, default_value: Numeric, ?evaluation_context: EvaluationContext?, ?hooks: Array[untyped], ?hook_hints: Hooks::Hints?) -> Numeric
|
|
28
|
+
def fetch_integer_value: (flag_key: String, default_value: Integer, ?evaluation_context: EvaluationContext?, ?hooks: Array[untyped], ?hook_hints: Hooks::Hints?) -> Integer
|
|
29
|
+
def fetch_float_value: (flag_key: String, default_value: Float, ?evaluation_context: EvaluationContext?, ?hooks: Array[untyped], ?hook_hints: Hooks::Hints?) -> Float
|
|
30
|
+
def fetch_object_value: (flag_key: String, default_value: Array[untyped] | Hash[untyped, untyped], ?evaluation_context: EvaluationContext?, ?hooks: Array[untyped], ?hook_hints: Hooks::Hints?) -> (Array[untyped] | Hash[untyped, untyped])
|
|
31
|
+
|
|
32
|
+
# Dynamically generated fetch_*_details methods (6 types)
|
|
33
|
+
def fetch_boolean_details: (flag_key: String, default_value: bool, ?evaluation_context: EvaluationContext?, ?hooks: Array[untyped], ?hook_hints: Hooks::Hints?) -> EvaluationDetails
|
|
34
|
+
def fetch_string_details: (flag_key: String, default_value: String, ?evaluation_context: EvaluationContext?, ?hooks: Array[untyped], ?hook_hints: Hooks::Hints?) -> EvaluationDetails
|
|
35
|
+
def fetch_number_details: (flag_key: String, default_value: Numeric, ?evaluation_context: EvaluationContext?, ?hooks: Array[untyped], ?hook_hints: Hooks::Hints?) -> EvaluationDetails
|
|
36
|
+
def fetch_integer_details: (flag_key: String, default_value: Integer, ?evaluation_context: EvaluationContext?, ?hooks: Array[untyped], ?hook_hints: Hooks::Hints?) -> EvaluationDetails
|
|
37
|
+
def fetch_float_details: (flag_key: String, default_value: Float, ?evaluation_context: EvaluationContext?, ?hooks: Array[untyped], ?hook_hints: Hooks::Hints?) -> EvaluationDetails
|
|
38
|
+
def fetch_object_details: (flag_key: String, default_value: Array[untyped] | Hash[untyped, untyped], ?evaluation_context: EvaluationContext?, ?hooks: Array[untyped], ?hook_hints: Hooks::Hints?) -> EvaluationDetails
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
def fetch_details: (type: Symbol, flag_key: String, default_value: untyped, ?evaluation_context: EvaluationContext?, ?invocation_hooks: Array[untyped], ?hook_hints: Hooks::Hints?) -> EvaluationDetails?
|
|
43
|
+
def evaluate_flag: (type: Symbol, flag_key: String, default_value: untyped, evaluation_context: EvaluationContext?) -> EvaluationDetails
|
|
44
|
+
def short_circuit_error_code: (String state) -> String?
|
|
45
|
+
def build_evaluation_context: (EvaluationContext? invocation_context) -> EvaluationContext?
|
|
46
|
+
def validate_default_value_type: (Symbol type, untyped default_value) -> void
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module OpenFeature
|
|
2
|
+
module SDK
|
|
3
|
+
class Configuration
|
|
4
|
+
extend Forwardable
|
|
5
|
+
|
|
6
|
+
attr_accessor evaluation_context: EvaluationContext?
|
|
7
|
+
attr_accessor hooks: Array[untyped]
|
|
8
|
+
attr_accessor transaction_context_propagator: _TransactionContextPropagator?
|
|
9
|
+
attr_reader logger: untyped?
|
|
10
|
+
|
|
11
|
+
def initialize: () -> void
|
|
12
|
+
|
|
13
|
+
def add_hooks: (*Array[untyped] new_hooks) -> void
|
|
14
|
+
def provider: (?domain: String?) -> untyped?
|
|
15
|
+
def logger=: (untyped? new_logger) -> void
|
|
16
|
+
|
|
17
|
+
def add_handler: (String event_type, _ToProc handler) -> void
|
|
18
|
+
def remove_handler: (String event_type, _ToProc handler) -> void
|
|
19
|
+
|
|
20
|
+
def add_client_handler: (Client client, String event_type, _ToProc handler) -> void
|
|
21
|
+
def remove_client_handler: (Client client, String event_type, _ToProc handler) -> void
|
|
22
|
+
|
|
23
|
+
def set_provider: (untyped provider, ?domain: String?) -> void
|
|
24
|
+
def set_provider_and_wait: (untyped provider, ?domain: String?) -> void
|
|
25
|
+
|
|
26
|
+
def provider_state: (untyped provider) -> String
|
|
27
|
+
def provider_tracked?: (untyped provider) -> bool
|
|
28
|
+
|
|
29
|
+
def shutdown: () -> void
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def reset: () -> void
|
|
34
|
+
def set_provider_internal: (untyped provider, domain: String?, wait_for_init: bool) -> void
|
|
35
|
+
def init_provider: (untyped provider, EvaluationContext? context, ?raise_on_error: bool) -> void
|
|
36
|
+
def dispatch_provider_event: (untyped provider, String event_type, ?Hash[Symbol, untyped] details) -> void
|
|
37
|
+
def extract_provider_name: (untyped provider) -> String
|
|
38
|
+
def run_handlers_for_provider: (untyped provider, String event_type, Hash[Symbol, untyped] event_details) -> void
|
|
39
|
+
def run_immediate_handler: (String event_type, _ToProc handler, Client? client) -> void
|
|
40
|
+
def build_event_details: (untyped provider) -> Hash[Symbol, untyped]
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module OpenFeature
|
|
2
|
+
module SDK
|
|
3
|
+
class EvaluationContext
|
|
4
|
+
TARGETING_KEY: String
|
|
5
|
+
|
|
6
|
+
attr_reader fields: Hash[String, untyped]
|
|
7
|
+
|
|
8
|
+
def initialize: (**untyped fields) -> void
|
|
9
|
+
|
|
10
|
+
def targeting_key: () -> untyped
|
|
11
|
+
|
|
12
|
+
def field: (String key) -> untyped
|
|
13
|
+
|
|
14
|
+
def merge: (EvaluationContext overriding_context) -> EvaluationContext
|
|
15
|
+
|
|
16
|
+
def ==: (untyped other) -> bool
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
module OpenFeature
|
|
2
|
+
module SDK
|
|
3
|
+
class EvaluationContextBuilder
|
|
4
|
+
def call: (api_context: EvaluationContext?, client_context: EvaluationContext?, invocation_context: EvaluationContext?, ?transaction_context: EvaluationContext?) -> EvaluationContext?
|
|
5
|
+
end
|
|
6
|
+
end
|
|
7
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module OpenFeature
|
|
2
|
+
module SDK
|
|
3
|
+
class EvaluationDetails < Struct[untyped]
|
|
4
|
+
extend Forwardable
|
|
5
|
+
|
|
6
|
+
attr_accessor flag_key: String
|
|
7
|
+
attr_accessor resolution_details: Provider::ResolutionDetails
|
|
8
|
+
|
|
9
|
+
def initialize: (?flag_key: String, ?resolution_details: Provider::ResolutionDetails) -> void
|
|
10
|
+
|
|
11
|
+
def value: () -> untyped
|
|
12
|
+
def reason: () -> String?
|
|
13
|
+
def variant: () -> String?
|
|
14
|
+
def error_code: () -> String?
|
|
15
|
+
def error_message: () -> String?
|
|
16
|
+
def flag_metadata: () -> Hash[String, untyped]
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module OpenFeature
|
|
2
|
+
module SDK
|
|
3
|
+
class EventDispatcher
|
|
4
|
+
attr_writer logger: untyped?
|
|
5
|
+
|
|
6
|
+
def initialize: (?untyped? logger) -> void
|
|
7
|
+
|
|
8
|
+
def add_handler: (String event_type, _ToProc handler) -> void
|
|
9
|
+
def remove_handler: (String event_type, _ToProc handler) -> void
|
|
10
|
+
def remove_all_handlers: (String event_type) -> void
|
|
11
|
+
def trigger_event: (String event_type, ?Hash[Symbol, untyped] event_details) -> void
|
|
12
|
+
def handler_count: (String event_type) -> Integer
|
|
13
|
+
def clear_all_handlers: () -> void
|
|
14
|
+
|
|
15
|
+
private
|
|
16
|
+
|
|
17
|
+
def valid_event?: (String event_type) -> bool
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
interface _ToProc
|
|
21
|
+
def call: (Hash[Symbol, untyped]) -> void
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
module OpenFeature
|
|
2
|
+
module SDK
|
|
3
|
+
module Hooks
|
|
4
|
+
class Hints
|
|
5
|
+
ALLOWED_TYPES: Array[Class]
|
|
6
|
+
|
|
7
|
+
def initialize: (?Hash[String | Symbol, untyped] hash) -> void
|
|
8
|
+
|
|
9
|
+
def []: (String | Symbol key) -> untyped
|
|
10
|
+
def fetch: (String | Symbol key, ?untyped default) -> untyped
|
|
11
|
+
| (String | Symbol key) { (String | Symbol) -> untyped } -> untyped
|
|
12
|
+
def key?: (String | Symbol key) -> bool
|
|
13
|
+
def each: () { (String | Symbol, untyped) -> void } -> Hash[String | Symbol, untyped]
|
|
14
|
+
| () -> Enumerator[[String | Symbol, untyped], Hash[String | Symbol, untyped]]
|
|
15
|
+
def size: () -> Integer
|
|
16
|
+
def empty?: () -> bool
|
|
17
|
+
def keys: () -> Array[String | Symbol]
|
|
18
|
+
def values: () -> Array[untyped]
|
|
19
|
+
def freeze: () -> self
|
|
20
|
+
def frozen?: () -> bool
|
|
21
|
+
def to_hash: () -> Hash[String | Symbol, untyped]
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def assert_allowed_key: (untyped key) -> void
|
|
26
|
+
def assert_allowed_value: (untyped value) -> void
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
module OpenFeature
|
|
2
|
+
module SDK
|
|
3
|
+
module Hooks
|
|
4
|
+
interface _Hook
|
|
5
|
+
def before: (hook_context: HookContext, hints: Hints) -> EvaluationContext?
|
|
6
|
+
def after: (hook_context: HookContext, evaluation_details: EvaluationDetails, hints: Hints) -> void
|
|
7
|
+
def error: (hook_context: HookContext, exception: Exception, hints: Hints) -> void
|
|
8
|
+
def finally: (hook_context: HookContext, evaluation_details: EvaluationDetails?, hints: Hints) -> void
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
module Hook
|
|
12
|
+
def before: (hook_context: HookContext, hints: Hints) -> EvaluationContext?
|
|
13
|
+
def after: (hook_context: HookContext, evaluation_details: EvaluationDetails, hints: Hints) -> nil
|
|
14
|
+
def error: (hook_context: HookContext, exception: Exception, hints: Hints) -> nil
|
|
15
|
+
def finally: (hook_context: HookContext, evaluation_details: EvaluationDetails?, hints: Hints) -> nil
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
module OpenFeature
|
|
2
|
+
module SDK
|
|
3
|
+
module Hooks
|
|
4
|
+
class HookContext
|
|
5
|
+
attr_reader flag_key: String
|
|
6
|
+
attr_reader flag_value_type: Symbol
|
|
7
|
+
attr_reader default_value: untyped
|
|
8
|
+
attr_reader client_metadata: ClientMetadata?
|
|
9
|
+
attr_reader provider_metadata: Provider::ProviderMetadata?
|
|
10
|
+
attr_accessor evaluation_context: EvaluationContext?
|
|
11
|
+
|
|
12
|
+
def initialize: (flag_key: String, flag_value_type: Symbol, default_value: untyped, evaluation_context: EvaluationContext?, ?client_metadata: ClientMetadata?, ?provider_metadata: Provider::ProviderMetadata?) -> void
|
|
13
|
+
|
|
14
|
+
def hook_data_for: (untyped hook) -> Hash[untyped, untyped]
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module OpenFeature
|
|
2
|
+
module SDK
|
|
3
|
+
module Hooks
|
|
4
|
+
class HookExecutor
|
|
5
|
+
def initialize: (?logger: untyped?) -> void
|
|
6
|
+
|
|
7
|
+
def run_short_circuit: (ordered_hooks: Array[untyped], hook_context: HookContext, hints: Hints, evaluation_details: EvaluationDetails) -> void
|
|
8
|
+
|
|
9
|
+
def execute: (ordered_hooks: Array[untyped], hook_context: HookContext, hints: Hints) { (HookContext) -> EvaluationDetails } -> EvaluationDetails?
|
|
10
|
+
|
|
11
|
+
private
|
|
12
|
+
|
|
13
|
+
def run_before_hooks: (Array[untyped] hooks, HookContext hook_context, Hints hints) -> void
|
|
14
|
+
def run_after_hooks: (Array[untyped] hooks, HookContext hook_context, EvaluationDetails evaluation_details, Hints hints) -> void
|
|
15
|
+
def run_error_hooks: (Array[untyped] hooks, HookContext hook_context, Exception exception, Hints hints) -> void
|
|
16
|
+
def run_finally_hooks: (Array[untyped] hooks, HookContext hook_context, EvaluationDetails? evaluation_details, Hints hints) -> void
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module OpenFeature
|
|
2
|
+
module SDK
|
|
3
|
+
module Hooks
|
|
4
|
+
class LoggingHook
|
|
5
|
+
include Hook
|
|
6
|
+
|
|
7
|
+
def initialize: (?logger: untyped?, ?include_evaluation_context: bool) -> void
|
|
8
|
+
|
|
9
|
+
def before: (hook_context: HookContext, hints: Hints) -> nil
|
|
10
|
+
def after: (hook_context: HookContext, evaluation_details: EvaluationDetails, hints: Hints) -> nil
|
|
11
|
+
def error: (hook_context: HookContext, exception: Exception, hints: Hints) -> nil
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
def logger: () -> untyped?
|
|
16
|
+
def build_before_message: (HookContext hook_context) -> String
|
|
17
|
+
def build_after_message: (HookContext hook_context, EvaluationDetails evaluation_details) -> String
|
|
18
|
+
def build_error_message: (HookContext hook_context, Exception exception) -> String
|
|
19
|
+
def base_parts: (String stage, HookContext hook_context) -> Array[String]
|
|
20
|
+
def format_context: (EvaluationContext? evaluation_context) -> String
|
|
21
|
+
def sanitize: (untyped value) -> String
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module OpenFeature
|
|
2
|
+
module SDK
|
|
3
|
+
module Provider
|
|
4
|
+
module ErrorCode
|
|
5
|
+
PROVIDER_NOT_READY: String
|
|
6
|
+
FLAG_NOT_FOUND: String
|
|
7
|
+
PARSE_ERROR: String
|
|
8
|
+
TYPE_MISMATCH: String
|
|
9
|
+
TARGETING_KEY_MISSING: String
|
|
10
|
+
INVALID_CONTEXT: String
|
|
11
|
+
PROVIDER_FATAL: String
|
|
12
|
+
GENERAL: String
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module OpenFeature
|
|
2
|
+
module SDK
|
|
3
|
+
module Provider
|
|
4
|
+
module EventEmitter
|
|
5
|
+
def emit_event: (String event_type, ?Hash[Symbol, untyped] details) -> void
|
|
6
|
+
|
|
7
|
+
def configuration_attached?: () -> bool
|
|
8
|
+
|
|
9
|
+
private
|
|
10
|
+
|
|
11
|
+
def attach: (Configuration configuration) -> void
|
|
12
|
+
def detach: () -> void
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|