openfeature-go-feature-flag-provider 0.1.7 → 0.1.8
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/CHANGELOG.md +7 -0
- data/Gemfile.lock +1 -1
- data/lib/openfeature/go-feature-flag/client/common.rb +25 -7
- data/lib/openfeature/go-feature-flag/client/http_api.rb +2 -5
- data/lib/openfeature/go-feature-flag/client/unix_api.rb +12 -9
- data/lib/openfeature/go-feature-flag/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ddfe59a26f6cb77f15f337d09960c06d01f35465e388c39a3b06603f36c0f573
|
|
4
|
+
data.tar.gz: 7598fabc63d82fa717b8dd388a1ccd4825db1a71e86aa5d92161eb704751616f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ab45b781c719f2f037677808d3fce03e49dbe683f9c33acdc52065e79ccc0b81a428f642bc55310ffef543f54dbea1e530665954f8a0b714df052f8ba6dbcdc2
|
|
7
|
+
data.tar.gz: 1c831f1f4a7015fd811111fc91d6f1055a9feb032771be4b87c467edba901f3d4aff394c22d9dc9966ad3ec0cd18feeafc087d547534946e86fc424810128374
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.1.8](https://github.com/open-feature/ruby-sdk-contrib/compare/openfeature-go-feature-flag-provider/v0.1.7...openfeature-go-feature-flag-provider/v0.1.8) (2026-01-13)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### 🐛 Bug Fixes
|
|
7
|
+
|
|
8
|
+
* Make goff unix socket client thread safe ([#74](https://github.com/open-feature/ruby-sdk-contrib/issues/74)) ([ec25c37](https://github.com/open-feature/ruby-sdk-contrib/commit/ec25c3787b108ed2af8d7f1c9efbd6a258870a21))
|
|
9
|
+
|
|
3
10
|
## [0.1.7](https://github.com/open-feature/ruby-sdk-contrib/compare/openfeature-go-feature-flag-provider/v0.1.6...openfeature-go-feature-flag-provider/v0.1.7) (2025-11-19)
|
|
4
11
|
|
|
5
12
|
|
data/Gemfile.lock
CHANGED
|
@@ -24,8 +24,20 @@ module OpenFeature
|
|
|
24
24
|
{"Content-Type" => "application/json"}.merge(@custom_headers || {})
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
+
def evaluation_request(evaluation_context)
|
|
28
|
+
ctx = evaluation_context || OpenFeature::SDK::EvaluationContext.new
|
|
29
|
+
fields = ctx.fields.dup
|
|
30
|
+
# replace targeting_key by targetingKey without mutating original fields
|
|
31
|
+
fields["targetingKey"] = ctx.targeting_key
|
|
32
|
+
fields.delete("targeting_key")
|
|
33
|
+
|
|
34
|
+
{context: fields}
|
|
35
|
+
end
|
|
36
|
+
|
|
27
37
|
def check_retry_after
|
|
28
|
-
|
|
38
|
+
lock = (@retry_lock ||= Mutex.new)
|
|
39
|
+
lock.synchronize do
|
|
40
|
+
return if @retry_after.nil?
|
|
29
41
|
if Time.now < @retry_after
|
|
30
42
|
raise OpenFeature::GoFeatureFlag::RateLimited.new(nil)
|
|
31
43
|
else
|
|
@@ -109,12 +121,18 @@ module OpenFeature
|
|
|
109
121
|
return nil if retry_after.nil?
|
|
110
122
|
|
|
111
123
|
begin
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
124
|
+
next_retry_time =
|
|
125
|
+
if /^\d+$/.match?(retry_after)
|
|
126
|
+
# Retry-After is in seconds
|
|
127
|
+
Time.now + Integer(retry_after)
|
|
128
|
+
else
|
|
129
|
+
# Retry-After is an HTTP-date
|
|
130
|
+
Time.httpdate(retry_after)
|
|
131
|
+
end
|
|
132
|
+
# Protect updates and never shorten an existing backoff window
|
|
133
|
+
lock = (@retry_lock ||= Mutex.new)
|
|
134
|
+
lock.synchronize do
|
|
135
|
+
@retry_after = [@retry_after, next_retry_time].compact.max
|
|
118
136
|
end
|
|
119
137
|
rescue ArgumentError
|
|
120
138
|
# ignore invalid Retry-After header
|
|
@@ -19,13 +19,10 @@ module OpenFeature
|
|
|
19
19
|
|
|
20
20
|
def evaluate_ofrep_api(flag_key:, evaluation_context:)
|
|
21
21
|
check_retry_after
|
|
22
|
-
|
|
23
|
-
# replace targeting_key by targetingKey
|
|
24
|
-
evaluation_context.fields["targetingKey"] = evaluation_context.targeting_key
|
|
25
|
-
evaluation_context.fields.delete("targeting_key")
|
|
22
|
+
request = evaluation_request(evaluation_context)
|
|
26
23
|
|
|
27
24
|
response = @faraday_connection.post("/ofrep/v1/evaluate/flags/#{flag_key}") do |req|
|
|
28
|
-
req.body =
|
|
25
|
+
req.body = request.to_json
|
|
29
26
|
end
|
|
30
27
|
|
|
31
28
|
case response.status
|
|
@@ -7,21 +7,17 @@ module OpenFeature
|
|
|
7
7
|
module GoFeatureFlag
|
|
8
8
|
module Client
|
|
9
9
|
class UnixApi < Common
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
def initialize(endpoint: nil, custom_headers: nil)
|
|
10
|
+
def initialize(endpoint: nil, custom_headers: nil, unix_socket_client_factory: nil)
|
|
13
11
|
@custom_headers = custom_headers
|
|
14
|
-
@
|
|
12
|
+
@endpoint = endpoint
|
|
13
|
+
@unix_socket_client_factory = unix_socket_client_factory || ->(ep) { HttpUnix.new(ep) }
|
|
15
14
|
end
|
|
16
15
|
|
|
17
16
|
def evaluate_ofrep_api(flag_key:, evaluation_context:)
|
|
18
17
|
check_retry_after
|
|
19
|
-
evaluation_context = OpenFeature::SDK::EvaluationContext.new if evaluation_context.nil?
|
|
20
|
-
# replace targeting_key by targetingKey
|
|
21
|
-
evaluation_context.fields["targetingKey"] = evaluation_context.targeting_key
|
|
22
|
-
evaluation_context.fields.delete("targeting_key")
|
|
23
18
|
|
|
24
|
-
|
|
19
|
+
request = evaluation_request(evaluation_context)
|
|
20
|
+
response = thread_local_socket.post("/ofrep/v1/evaluate/flags/#{flag_key}", request, headers)
|
|
25
21
|
|
|
26
22
|
case response.code
|
|
27
23
|
when "200"
|
|
@@ -39,6 +35,13 @@ module OpenFeature
|
|
|
39
35
|
raise OpenFeature::GoFeatureFlag::InternalServerError.new(response)
|
|
40
36
|
end
|
|
41
37
|
end
|
|
38
|
+
|
|
39
|
+
private
|
|
40
|
+
|
|
41
|
+
def thread_local_socket
|
|
42
|
+
key = "openfeature_goff_unix_socket_#{object_id}"
|
|
43
|
+
Thread.current[key] ||= @unix_socket_client_factory.call(@endpoint)
|
|
44
|
+
end
|
|
42
45
|
end
|
|
43
46
|
end
|
|
44
47
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: openfeature-go-feature-flag-provider
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Thomas Poignant
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-01-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: openfeature-sdk
|