Skip to content

Commit 2d89570

Browse files
authored
feat: Updates to Provider module in preparation for InMemoryProvider (#99)
Signed-off-by: Max VelDink <[email protected]>
1 parent 8bfe176 commit 2d89570

File tree

10 files changed

+71
-14
lines changed

10 files changed

+71
-14
lines changed

bin/console

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# frozen_string_literal: true
33

44
require "bundler/setup"
5-
require "openfeature/sdk"
5+
require "open_feature/sdk"
66

77
# You can add fixtures and/or initialization code here to make experimenting
88
# with your gem easier. You can also use a different console, if you like.

lib/open_feature/sdk/api.rb

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
require "singleton"
55

66
require_relative "configuration"
7+
require_relative "evaluation_details"
78
require_relative "client"
89
require_relative "metadata"
9-
require_relative "provider/no_op_provider"
10+
require_relative "provider"
1011

1112
module OpenFeature
1213
module SDK
@@ -29,9 +30,7 @@ class API
2930
include Singleton
3031
extend Forwardable
3132

32-
def_delegator :@configuration, :provider
33-
def_delegator :@configuration, :hooks
34-
def_delegator :@configuration, :context
33+
def_delegators :configuration, :provider, :hooks, :context
3534

3635
def configuration
3736
@configuration ||= Configuration.new

lib/open_feature/sdk/client.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ def initialize(provider:, client_options: nil, context: nil)
2626
# result = @provider.fetch_boolean_value(flag_key: flag_key, default_value: default_value, evaluation_context: evaluation_context)
2727
# end
2828
def fetch_#{result_type}_#{suffix}(flag_key:, default_value:, evaluation_context: nil)
29-
result = @provider.fetch_#{result_type}_value(flag_key: flag_key, default_value: default_value, evaluation_context: evaluation_context)
30-
#{"result.value" if suffix == :value}
29+
resolution_details = @provider.fetch_#{result_type}_value(flag_key:, default_value:, evaluation_context:)
30+
evaluation_details = EvaluationDetails.new(flag_key:, resolution_details:)
31+
#{"evaluation_details.value" if suffix == :value}
3132
end
3233
RUBY
3334
end
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module OpenFeature
2+
module SDK
3+
EvaluationDetails = Struct.new(:flag_key, :resolution_details, keyword_init: true) do
4+
extend Forwardable
5+
6+
def_delegators :resolution_details, :value, :reason, :variant, :error_code, :error_message, :flag_metadata
7+
end
8+
end
9+
end

lib/open_feature/sdk/provider.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
require_relative "provider/error_code"
2+
require_relative "provider/reason"
3+
require_relative "provider/resolution_details"
4+
require_relative "provider/no_op_provider"
5+
6+
module OpenFeature
7+
module SDK
8+
module Provider
9+
end
10+
end
11+
end
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module OpenFeature
2+
module SDK
3+
module Provider
4+
module ErrorCode
5+
PROVIDER_NOT_READY = "Provider Not Ready"
6+
FLAG_NOT_FOUND = "Flag Not Found"
7+
PARSE_ERROR = "Parse Error"
8+
TYPE_MISMATCH = "Type Mismatch"
9+
TARGETING_KEY_MISSING = "Targeting Key Missing"
10+
INVALID_CONTEXT = "Invalid Context"
11+
GENERAL = "General"
12+
end
13+
end
14+
end
15+
end

lib/open_feature/sdk/provider/no_op_provider.rb

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ class NoOpProvider
3030

3131
attr_reader :metadata
3232

33-
ResolutionDetails = Struct.new(:value, :reason, :variant, :error_code, :error_message)
34-
3533
def initialize
3634
@metadata = Metadata.new(name: NAME).freeze
3735
end
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
module OpenFeature
2+
module SDK
3+
module Provider
4+
module Reason
5+
STATIC = "Static"
6+
DEFAULT = "Default"
7+
TARGETING_MATCH = "Targeting Match"
8+
SPLIT = "Split"
9+
CACHED = "Cached"
10+
DISABLED = "Disabled"
11+
UNKNOWN = "Unknown"
12+
STALE = "Stale"
13+
ERROR = "Error"
14+
end
15+
end
16+
end
17+
end
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
module OpenFeature
2+
module SDK
3+
module Provider
4+
ResolutionDetails = Struct.new(:value, :reason, :variant, :error_code, :error_message, :flag_metadata, keyword_init: true)
5+
end
6+
end
7+
end

spec/open_feature/sdk/client_spec.rb

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@
103103
end
104104

105105
it do
106-
expect(client.fetch_boolean_details(flag_key: flag_key, default_value: false)).is_a?(OpenFeature::SDK::Provider::NoOpProvider::ResolutionDetails)
106+
expect(client.fetch_boolean_details(flag_key: flag_key, default_value: false)).is_a?(OpenFeature::SDK::Provider::ResolutionDetails)
107107
end
108108
end
109109

@@ -136,8 +136,8 @@
136136
end
137137

138138
it do
139-
expect(client.fetch_number_details(flag_key: flag_key, default_value: 1.2)).is_a?(OpenFeature::SDK::Provider::NoOpProvider::ResolutionDetails)
140-
expect(client.fetch_number_details(flag_key: flag_key, default_value: 1)).is_a?(OpenFeature::SDK::Provider::NoOpProvider::ResolutionDetails)
139+
expect(client.fetch_number_details(flag_key: flag_key, default_value: 1.2)).is_a?(OpenFeature::SDK::Provider::ResolutionDetails)
140+
expect(client.fetch_number_details(flag_key: flag_key, default_value: 1)).is_a?(OpenFeature::SDK::Provider::ResolutionDetails)
141141
end
142142
end
143143

@@ -166,7 +166,7 @@
166166
end
167167

168168
it do
169-
expect(client.fetch_string_details(flag_key: flag_key, default_value: "some-string")).is_a?(OpenFeature::SDK::Provider::NoOpProvider::ResolutionDetails)
169+
expect(client.fetch_string_details(flag_key: flag_key, default_value: "some-string")).is_a?(OpenFeature::SDK::Provider::ResolutionDetails)
170170
end
171171
end
172172

@@ -195,7 +195,7 @@
195195

196196
it do
197197
expect(client.fetch_object_details(flag_key: flag_key,
198-
default_value: {name: "some-name"})).is_a?(OpenFeature::SDK::Provider::NoOpProvider::ResolutionDetails)
198+
default_value: {name: "some-name"})).is_a?(OpenFeature::SDK::Provider::ResolutionDetails)
199199
end
200200
end
201201

0 commit comments

Comments
 (0)