Skip to content

Commit bf1fbb4

Browse files
committed
Clarify UFC acronym throughout codebase for better developer understanding
- Add class documentation to InternalEvaluator explaining UFC format - Spell out "Universal Flag Configuration" in comments and variable definitions - Create README in spec/fixtures/ufc/ directory explaining UFC purpose - Enhance parameter documentation for UFC-related methods
1 parent 94c24c2 commit bf1fbb4

File tree

5 files changed

+36
-5
lines changed

5 files changed

+36
-5
lines changed

lib/datadog/open_feature/binding/configuration.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
module Datadog
44
module OpenFeature
55
module Binding
6-
# Variation types supported by UFC
6+
# Variation types supported by UFC (Universal Flag Configuration)
77
module VariationType
88
STRING = 'STRING'
99
INTEGER = 'INTEGER'

lib/datadog/open_feature/binding/internal_evaluator.rb

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ def initialize(code, message)
3333
end
3434
end
3535

36+
# Internal evaluator for UFC (Universal Flag Configuration) format.
37+
# UFC is a flexible format for representing feature flag targeting rules
38+
# using splits with shard ranges and salts, accommodating most targeting use cases.
3639
class InternalEvaluator
3740
# NativeEvaluator-aligned error code mapping
3841
ERROR_CODE_MAPPING = {
@@ -60,6 +63,8 @@ class InternalEvaluator
6063
'JSON' => 'object'
6164
}.freeze
6265

66+
# Initialize evaluator with UFC (Universal Flag Configuration) JSON string.
67+
# @param ufc_json [String] JSON string containing feature flag configuration in UFC format
6368
def initialize(ufc_json)
6469
@ufc_json = ufc_json
6570
@parsed_config = parse_and_validate_json(ufc_json)
@@ -132,12 +137,12 @@ def parse_and_validate_json(ufc_json)
132137
return create_parse_error(Ext::CONFIGURATION_PARSE_ERROR, 'failed to parse configuration')
133138
end
134139

135-
# Handle both UFC format and libdatadog format
140+
# Handle both UFC (Universal Flag Configuration) format and libdatadog format
136141
config_to_parse = if has_libdatadog_format?(parsed_json)
137142
# Extract flags from libdatadog format
138143
extract_flags_from_libdatadog_format(parsed_json)
139144
else
140-
# Use UFC format directly
145+
# Use UFC (Universal Flag Configuration) format directly
141146
parsed_json
142147
end
143148

spec/datadog/open_feature/binding/internal_evaluator_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
RSpec.describe Datadog::OpenFeature::Binding::InternalEvaluator do
88
let(:flags_v1_path) { File.join(__dir__, '../../../fixtures/ufc/flags-v1.json') }
99
let(:flags_v1_json) { JSON.parse(File.read(flags_v1_path)) }
10-
let(:ufc_attributes) { flags_v1_json['data']['attributes'] }
10+
let(:ufc_attributes) { flags_v1_json['data']['attributes'] } # UFC = Universal Flag Configuration
1111
let(:valid_ufc_json) { ufc_attributes.to_json }
1212

1313
describe '#initialize' do

spec/datadog/open_feature/evaluation_engine_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
let(:reporter) { instance_double(Datadog::OpenFeature::Exposures::Reporter) }
99
let(:telemetry) { instance_double(Datadog::Core::Telemetry::Component) }
1010
let(:logger) { instance_double(Datadog::Core::Logger) }
11-
let(:ufc) do
11+
let(:ufc) do # UFC = Universal Flag Configuration
1212
<<~JSON
1313
{
1414
"data": {

spec/fixtures/ufc/README.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# UFC (Universal Flag Configuration) Test Fixtures
2+
3+
This directory contains test fixtures in UFC (Universal Flag Configuration) format.
4+
5+
## What is UFC?
6+
7+
UFC stands for **Universal Flag Configuration**. It's a flexible format for representing feature flag targeting rules using splits with shard ranges and salts. This approach accommodates most targeting use cases and provides a universal way to configure feature flags across different SDKs and platforms.
8+
9+
## Directory Contents
10+
11+
- `flags-v1.json` - Main UFC configuration fixture used across multiple test suites
12+
- `test_cases/` - Individual test cases demonstrating various UFC scenarios including:
13+
- Boolean, integer, numeric, and string flag variations
14+
- Targeting rules with different operators (ONE_OF, MATCHES, GTE, etc.)
15+
- Traffic splitting with shard ranges
16+
- Edge cases like disabled flags and empty configurations
17+
18+
## Format Overview
19+
20+
The UFC format typically includes:
21+
- **flags**: Feature flag definitions with variations and targeting rules
22+
- **allocations**: Traffic splitting rules with shard-based distribution
23+
- **variations**: Different values a flag can return
24+
- **rules**: Targeting conditions based on user attributes
25+
26+
This format is used consistently across DataDog SDKs to ensure compatible feature flag behavior.

0 commit comments

Comments
 (0)