Skip to content

Commit aac74b1

Browse files
authored
feat: Flag Evaluation Requirement 1.1.4 and 1.1.5 and Provider Requirement 2.1.1 (#112)
1 parent 3fe0123 commit aac74b1

File tree

5 files changed

+50
-5
lines changed

5 files changed

+50
-5
lines changed

lib/open_feature/sdk/configuration.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def initialize
2323
end
2424

2525
def provider(domain: nil)
26-
@providers[domain]
26+
@providers[domain] || @providers[nil]
2727
end
2828

2929
# When switching providers, there are a few lifecycle methods that need to be taken care of.

lib/open_feature/sdk/provider/in_memory_provider.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ module Provider
55
class InMemoryProvider
66
NAME = "In-memory Provider"
77

8+
attr_reader :metadata
9+
810
def initialize(flags = {})
911
@metadata = Metadata.new(name: NAME).freeze
1012
@flags = flags

spec/open_feature/sdk/configuration_spec.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828
end
2929
end
3030

31-
context "when name is given" do
32-
it "binds the provider to that name" do
31+
context "when domain is given" do
32+
it "binds the provider to that domain" do
3333
provider = OpenFeature::SDK::Provider::InMemoryProvider.new
3434
expect(provider).to receive(:init)
3535

spec/specification/flag_evaluation_api_spec.rb

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
end
4444

4545
context "Requirement 1.1.3" do
46-
specify "the API must provide a function to bind a given provider to one or more client names" do
46+
specify "the API must provide a function to bind a given provider to one or more client domains" do
4747
first_provider = OpenFeature::SDK::Provider::InMemoryProvider.new
4848
second_provider = OpenFeature::SDK::Provider::InMemoryProvider.new
4949

@@ -54,7 +54,7 @@
5454
expect(OpenFeature::SDK.provider(domain: "second")).to be(second_provider)
5555
end
5656

57-
specify "if client name is already bound, it is overwritten" do
57+
specify "if client domain is already bound, it is overwritten" do
5858
previous_provider = OpenFeature::SDK::Provider::InMemoryProvider.new
5959
new_provider = OpenFeature::SDK::Provider::InMemoryProvider.new
6060

@@ -65,5 +65,33 @@
6565
expect(OpenFeature::SDK.provider(domain: "testing")).to be(new_provider)
6666
end
6767
end
68+
69+
context "Requirement 1.1.4" do
70+
pending "The API must provide a function to add hooks which accepts one or more API-conformant hooks, and appends them to the collection of any previously added hooks."
71+
72+
pending "When new hooks are added, previously added hooks are not removed."
73+
end
74+
75+
context "Requirement 1.1.5" do
76+
before do
77+
default_provider = OpenFeature::SDK::Provider::InMemoryProvider.new
78+
OpenFeature::SDK.set_provider(default_provider)
79+
80+
domain_1_provider = OpenFeature::SDK::Provider::NoOpProvider.new
81+
OpenFeature::SDK.set_provider(domain_1_provider, domain: "domain_1")
82+
end
83+
84+
specify "The API MUST provide a function for retrieving the metadata field of the configured provider." do
85+
expect(OpenFeature::SDK.provider.metadata.name).to eq("In-memory Provider")
86+
end
87+
88+
specify "It's possible to access provider metadata using a domain." do
89+
expect(OpenFeature::SDK.provider(domain: "domain_1").metadata.name).to eq("No-op Provider")
90+
end
91+
92+
specify "If a provider has not be registered under the requested domain, the default provider metadata is returned." do
93+
expect(OpenFeature::SDK.provider(domain: "not_here").metadata.name).to eq("In-memory Provider")
94+
end
95+
end
6896
end
6997
end
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# frozen_string_literal: true
2+
3+
require "spec_helper"
4+
5+
RSpec.describe "Provider" do
6+
context "2.1 - Feature Provider Interface" do
7+
context "Requirement 2.1.1" do
8+
specify "The provider interface MUST define a metadata member or accessor, containing a name field or accessor of type string, which identifies the provider implementation." do
9+
provider = OpenFeature::SDK::Provider::NoOpProvider.new
10+
11+
expect(provider.metadata.name).to eq("No-op Provider")
12+
end
13+
end
14+
end
15+
end

0 commit comments

Comments
 (0)