Skip to content

Commit aa098db

Browse files
committed
refactor: changed client metaprogramming to send with real methods
Signed-off-by: Max VelDink <[email protected]>
1 parent 3ca368d commit aa098db

File tree

1 file changed

+57
-17
lines changed

1 file changed

+57
-17
lines changed

lib/open_feature/sdk/client.rb

+57-17
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@ module SDK
55
# TODO: Write documentation
66
#
77
class Client
8-
RESULT_TYPE = %i[boolean string number integer float object].freeze
9-
SUFFIXES = %i[value details].freeze
10-
118
attr_reader :metadata, :evaluation_context
129

1310
attr_accessor :hooks
@@ -19,20 +16,63 @@ def initialize(provider:, domain: nil, evaluation_context: nil)
1916
@hooks = []
2017
end
2118

22-
RESULT_TYPE.each do |result_type|
23-
SUFFIXES.each do |suffix|
24-
class_eval <<-RUBY, __FILE__, __LINE__ + 1
25-
# def fetch_boolean_details(flag_key:, default_value:, evaluation_context: nil)
26-
# result = @provider.fetch_boolean_value(flag_key: flag_key, default_value: default_value, evaluation_context: evaluation_context)
27-
# end
28-
def fetch_#{result_type}_#{suffix}(flag_key:, default_value:, evaluation_context: nil)
29-
built_context = EvaluationContextBuilder.new.call(api_context: OpenFeature::SDK.evaluation_context, client_context: self.evaluation_context, invocation_context: evaluation_context)
30-
resolution_details = @provider.fetch_#{result_type}_value(flag_key:, default_value:, evaluation_context: built_context)
31-
evaluation_details = EvaluationDetails.new(flag_key:, resolution_details:)
32-
#{"evaluation_details.value" if suffix == :value}
33-
end
34-
RUBY
35-
end
19+
def fetch_boolean_details(flag_key:, default_value:, evaluation_context: nil)
20+
fetch_details(type: :boolean, flag_key:, default_value:, evaluation_context:)
21+
end
22+
23+
def fetch_boolean_value(flag_key:, default_value:, evaluation_context: nil)
24+
fetch_details(type: :boolean, flag_key:, default_value:, evaluation_context:).value
25+
end
26+
27+
def fetch_string_details(flag_key:, default_value:, evaluation_context: nil)
28+
fetch_details(type: :string, flag_key:, default_value:, evaluation_context:)
29+
end
30+
31+
def fetch_string_value(flag_key:, default_value:, evaluation_context: nil)
32+
fetch_details(type: :string, flag_key:, default_value:, evaluation_context:).value
33+
end
34+
35+
def fetch_number_details(flag_key:, default_value:, evaluation_context: nil)
36+
fetch_details(type: :number, flag_key:, default_value:, evaluation_context:)
37+
end
38+
39+
def fetch_number_value(flag_key:, default_value:, evaluation_context: nil)
40+
fetch_details(type: :number, flag_key:, default_value:, evaluation_context:).value
41+
end
42+
43+
def fetch_integer_details(flag_key:, default_value:, evaluation_context: nil)
44+
fetch_details(type: :integer, flag_key:, default_value:, evaluation_context:)
45+
end
46+
47+
def fetch_integer_value(flag_key:, default_value:, evaluation_context: nil)
48+
fetch_details(type: :integer, flag_key:, default_value:, evaluation_context:).value
49+
end
50+
51+
def fetch_float_details(flag_key:, default_value:, evaluation_context: nil)
52+
fetch_details(type: :float, flag_key:, default_value:, evaluation_context:)
53+
end
54+
55+
def fetch_float_value(flag_key:, default_value:, evaluation_context: nil)
56+
fetch_details(type: :float, flag_key:, default_value:, evaluation_context:).value
57+
end
58+
59+
def fetch_object_details(flag_key:, default_value:, evaluation_context: nil)
60+
fetch_details(type: :object, flag_key:, default_value:, evaluation_context:)
61+
end
62+
63+
def fetch_object_value(flag_key:, default_value:, evaluation_context: nil)
64+
fetch_details(type: :object, flag_key:, default_value:, evaluation_context:).value
65+
end
66+
67+
private
68+
69+
def fetch_details(type:, flag_key:, default_value:, evaluation_context: nil)
70+
built_context = EvaluationContextBuilder.new.call(api_context: OpenFeature::SDK.evaluation_context, client_context: self.evaluation_context, invocation_context: evaluation_context)
71+
72+
EvaluationDetails.new(
73+
flag_key:,
74+
resolution_details: @provider.send(:"fetch_#{type}_value", flag_key:, default_value:, evaluation_context: built_context)
75+
)
3676
end
3777
end
3878
end

0 commit comments

Comments
 (0)