From 16125cf787a2bbf9d8d5c871108ee8b8dfb5e472 Mon Sep 17 00:00:00 2001 From: Bilal Al-Shahwany Date: Wed, 4 Jun 2025 09:45:41 -0700 Subject: [PATCH 1/7] Added matcher --- lib/splitclient-rb.rb | 1 + .../engine/matchers/prerequisites_matcher.rb | 31 +++++++++++++++++++ .../helpers/repository_helper.rb | 12 +++++-- .../matchers/prerequisites_matcher_spec.rb | 26 ++++++++++++++++ spec/repository_helper.rb | 16 ++++++++++ 5 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 lib/splitclient-rb/engine/matchers/prerequisites_matcher.rb create mode 100644 spec/engine/matchers/prerequisites_matcher_spec.rb diff --git a/lib/splitclient-rb.rb b/lib/splitclient-rb.rb index 9a3b6c5a..b4ffcdeb 100644 --- a/lib/splitclient-rb.rb +++ b/lib/splitclient-rb.rb @@ -99,6 +99,7 @@ require 'splitclient-rb/engine/matchers/between_semver_matcher' require 'splitclient-rb/engine/matchers/in_list_semver_matcher' require 'splitclient-rb/engine/matchers/rule_based_segment_matcher' +require 'splitclient-rb/engine/matchers/prerequisites_matcher' require 'splitclient-rb/engine/evaluator/splitter' require 'splitclient-rb/engine/impressions/noop_unique_keys_tracker' require 'splitclient-rb/engine/impressions/unique_keys_tracker' diff --git a/lib/splitclient-rb/engine/matchers/prerequisites_matcher.rb b/lib/splitclient-rb/engine/matchers/prerequisites_matcher.rb new file mode 100644 index 00000000..7970b63a --- /dev/null +++ b/lib/splitclient-rb/engine/matchers/prerequisites_matcher.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +module SplitIoClient + class PrerequisitesMatcher + def initialize(prerequisites, logger) + @prerequisites = prerequisites + @logger = logger + end + + def match?(args) + keys = { matching_key: args[:matching_key], bucketing_key: args[:bucketing_key] } + + match = true + @prerequisites.each do |prerequisite| + evaluate = args[:evaluator].evaluate_feature_flag(keys, prerequisite[:n], args[:attributes]) + next if prerequisite[:ts].include?(evaluate[:treatment]) + + @logger.log_if_debug("[PrerequisitesMatcher] feature flag #{prerequisite[:n]} evaluated to #{evaluate[:treatment]} \ + that does not exist in prerequisited treatments.") + match = false + break + end + + match + end + + def string_type? + false + end + end +end diff --git a/lib/splitclient-rb/helpers/repository_helper.rb b/lib/splitclient-rb/helpers/repository_helper.rb index da72ad22..b21fabba 100644 --- a/lib/splitclient-rb/helpers/repository_helper.rb +++ b/lib/splitclient-rb/helpers/repository_helper.rb @@ -13,7 +13,7 @@ def self.update_feature_flag_repository(feature_flag_repository, feature_flags, next end - feature_flag = check_impressions_disabled(feature_flag, config) + feature_flag = check_missing_elements(feature_flag, config) config.logger.debug("storing feature flag (#{feature_flag[:name]})") if config.debug_enabled to_add.push(feature_flag) @@ -22,13 +22,21 @@ def self.update_feature_flag_repository(feature_flag_repository, feature_flags, feature_flag_repository.update(to_add, to_delete, change_number) end - def self.check_impressions_disabled(feature_flag, config) + def self.check_missing_elements(feature_flag, config) unless feature_flag.key?(:impressionsDisabled) feature_flag[:impressionsDisabled] = false if config.debug_enabled config.logger.debug("feature flag (#{feature_flag[:name]}) does not have impressionsDisabled field, setting it to false") end end + + unless feature_flag.key?(:prerequisites) + feature_flag[:prerequisites] = [] + if config.debug_enabled + config.logger.debug("feature flag (#{feature_flag[:name]}) does not have prerequisites field, setting it to empty array") + end + end + feature_flag end diff --git a/spec/engine/matchers/prerequisites_matcher_spec.rb b/spec/engine/matchers/prerequisites_matcher_spec.rb new file mode 100644 index 00000000..fcb366c6 --- /dev/null +++ b/spec/engine/matchers/prerequisites_matcher_spec.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe SplitIoClient::PrerequisitesMatcher do + let(:evaluator) { double } + + it 'matches with empty prerequisites' do + expect(described_class.new([], @split_logger) + .match?(matching_key: 'foo', bucketing_key: 'bar', evaluator: evaluator)).to eq(true) + end + + it 'matches with prerequisite treatments' do + allow(evaluator).to receive(:evaluate_feature_flag).with({ matching_key: 'foo', bucketing_key: 'bar' }, 'flag1', nil) + .and_return(treatment: 'on') + + expect(described_class.new([:n => 'flag1', :ts => ['on']], @split_logger) + .match?(matching_key: 'foo', bucketing_key: 'bar', evaluator: evaluator)).to eq(true) + expect(described_class.new([:n => 'flag1', :ts => ['off']], @split_logger) + .match?(matching_key: 'foo', bucketing_key: 'bar', evaluator: evaluator)).to eq(false) + end + + it 'is not string type matcher' do + expect(described_class.new([], @split_logger).string_type?).to be false + end +end diff --git a/spec/repository_helper.rb b/spec/repository_helper.rb index d38dff96..37770a76 100644 --- a/spec/repository_helper.rb +++ b/spec/repository_helper.rb @@ -83,5 +83,21 @@ expect(feature_flag_repository.get_split('split2').nil?).to eq(false) expect(feature_flag_repository.get_split('split1').nil?).to eq(true) end + + it 'test prerequisites element' do + config = SplitIoClient::SplitConfig.new(cache_adapter: :memory) + flag_set_filter = SplitIoClient::Cache::Filter::FlagSetsFilter.new([]) + flag_sets_repository = SplitIoClient::Cache::Repositories::MemoryFlagSetsRepository.new([]) + feature_flag_repository = SplitIoClient::Cache::Repositories::SplitsRepository.new( + config, + flag_sets_repository, + flag_set_filter) + + SplitIoClient::Helpers::RepositoryHelper.update_feature_flag_repository(feature_flag_repository, [{:name => 'split1', :status => 'ACTIVE', conditions: [], :sets => []}], -1, config, false) + expect(feature_flag_repository.get_split('split1')[:prerequisites]).to eq([]) + + SplitIoClient::Helpers::RepositoryHelper.update_feature_flag_repository(feature_flag_repository, [{:name => 'split2', :status => 'ACTIVE', conditions: [], :prerequisites => [{:n => 'flag', :ts => ['on']}], :sets => []}], -1, config, false) + expect(feature_flag_repository.get_split('split2')[:prerequisites]).to eq([{:n => 'flag', :ts => ['on']}]) + end end end From e58a513569a8d55f966c63b7796f3d9731843354 Mon Sep 17 00:00:00 2001 From: Bilal Al-Shahwany Date: Wed, 4 Jun 2025 11:00:39 -0700 Subject: [PATCH 2/7] Updated evaluator --- lib/splitclient-rb/engine/models/label.rb | 1 + lib/splitclient-rb/engine/parser/evaluator.rb | 8 ++ spec/engine/parser/evaluator_spec.rb | 26 +++++- .../splits/engine/prerequisites_matcher.json | 79 +++++++++++++++++++ 4 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 spec/test_data/splits/engine/prerequisites_matcher.json diff --git a/lib/splitclient-rb/engine/models/label.rb b/lib/splitclient-rb/engine/models/label.rb index 750ad79d..d55d16b4 100644 --- a/lib/splitclient-rb/engine/models/label.rb +++ b/lib/splitclient-rb/engine/models/label.rb @@ -6,4 +6,5 @@ class SplitIoClient::Engine::Models::Label NOT_IN_SPLIT = 'not in split'.freeze NOT_READY = 'not ready'.freeze NOT_FOUND = 'definition not found'.freeze + PREREQUISITES_NOT_MET = 'prerequisites not met'.freeze end diff --git a/lib/splitclient-rb/engine/parser/evaluator.rb b/lib/splitclient-rb/engine/parser/evaluator.rb index ec7636cd..5e977632 100644 --- a/lib/splitclient-rb/engine/parser/evaluator.rb +++ b/lib/splitclient-rb/engine/parser/evaluator.rb @@ -38,6 +38,14 @@ def split_configurations(treatment, split) end def match(split, keys, attributes) + prerequisites_matcher = SplitIoClient::PrerequisitesMatcher.new(split[:prerequisites], @config.split_logger) + return treatment_hash(Models::Label::PREREQUISITES_NOT_MET, split[:defaultTreatment], split[:changeNumber], split_configurations(split[:defaultTreatment], split)) unless prerequisites_matcher.match?( + matching_key: keys[:matching_key], + bucketing_key: keys[:bucketing_key], + evaluator: self, + attributes: attributes + ) + in_rollout = false key = keys[:bucketing_key] ? keys[:bucketing_key] : keys[:matching_key] legacy_algo = (split[:algo] == 1 || split[:algo] == nil) ? true : false diff --git a/spec/engine/parser/evaluator_spec.rb b/spec/engine/parser/evaluator_spec.rb index a6beabe9..8aa9e2d7 100644 --- a/spec/engine/parser/evaluator_spec.rb +++ b/spec/engine/parser/evaluator_spec.rb @@ -3,12 +3,13 @@ require 'spec_helper' describe SplitIoClient::Engine::Parser::Evaluator do - let(:segments_repository) { SplitIoClient::Cache::Repositories::SegmentsRepository.new(@default_config) } - let(:rule_based_segments_repository) { SplitIoClient::Cache::Repositories::RuleBasedSegmentsRepository.new(@default_config) } + let(:config) { SplitIoClient::SplitConfig.new(logger: Logger.new(StringIO.new)) } + let(:segments_repository) { SplitIoClient::Cache::Repositories::SegmentsRepository.new(config) } + let(:rule_based_segments_repository) { SplitIoClient::Cache::Repositories::RuleBasedSegmentsRepository.new(config) } let(:flag_sets_repository) {SplitIoClient::Cache::Repositories::MemoryFlagSetsRepository.new([])} let(:flag_set_filter) {SplitIoClient::Cache::Filter::FlagSetsFilter.new([])} - let(:splits_repository) { SplitIoClient::Cache::Repositories::SplitsRepository.new(@default_config, flag_sets_repository, flag_set_filter) } - let(:evaluator) { described_class.new(segments_repository, splits_repository, rule_based_segments_repository, true) } + let(:splits_repository) { SplitIoClient::Cache::Repositories::SplitsRepository.new(config, flag_sets_repository, flag_set_filter) } + let(:evaluator) { described_class.new(segments_repository, splits_repository, rule_based_segments_repository, config) } let(:killed_split) { { killed: true, defaultTreatment: 'default' } } let(:archived_split) { { status: 'ARCHIVED' } } @@ -17,6 +18,11 @@ SplitIoClient.root, 'spec/test_data/splits/engine/dependency_matcher.json' )), symbolize_names: true) end + let(:split_data_prereq) do + JSON.parse(File.read(File.join( + SplitIoClient.root, 'spec/test_data/splits/engine/prerequisites_matcher.json' + )), symbolize_names: true) + end it 'returns killed treatment' do expect(evaluator.evaluate_feature_flag({ matching_key: 'foo' }, killed_split)) @@ -40,4 +46,16 @@ evaluator.evaluate_feature_flag({ bucketing_key: nil, matching_key: 'fake_user_id_1' }, split_data[:ff][:d][1]) end end + + context 'prerequisites matcher' do + it 'test match' do + splits_repository.update([split_data_prereq[:ff][:d][0], split_data_prereq[:ff][:d][1]], [], 1234) + + result = evaluator.evaluate_feature_flag({ bucketing_key: nil, matching_key: 'fake_user' }, 'test_prereq') + expect(result[:treatment]).to eq('off_default') + + result = evaluator.evaluate_feature_flag({ bucketing_key: nil, matching_key: 'fake_user_id_1' }, 'test_prereq') + expect(result[:treatment]).to eq('on') + end + end end diff --git a/spec/test_data/splits/engine/prerequisites_matcher.json b/spec/test_data/splits/engine/prerequisites_matcher.json new file mode 100644 index 00000000..78474660 --- /dev/null +++ b/spec/test_data/splits/engine/prerequisites_matcher.json @@ -0,0 +1,79 @@ +{ "ff":{ + "d": [ + { + "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", + "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", + "name":"test_whitelist", + "prerequisites": [], + "trafficTypeId":"u", + "trafficTypeName":"User", + "seed":-1245274114, + "status":"ACTIVE", + "killed":false, + "defaultTreatment":"off", + "conditions":[ + { + "matcherGroup":{ + "combiner":"AND", + "matchers":[ + { + "matcherType":"WHITELIST", + "negate":false, + "userDefinedSegmentMatcherData":null, + "whitelistMatcherData":{ + "whitelist":[ + "fake_user_id_1", + "fake_user_id_3" + ] + } + } + ] + }, + "partitions":[ + { + "treatment":"on", + "size":100 + } + ] + } + ], + "sets": ["set_4"] + }, + { + "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", + "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", + "name":"test_prereq", + "prerequisites": [{"n": "test_whitelist", "ts": ["on"]}], + "trafficTypeId":"u", + "trafficTypeName":"User", + "seed":-1245274114, + "status":"ACTIVE", + "killed":false, + "defaultTreatment":"off_default", + "conditions":[ + { + "matcherGroup":{ + "combiner":"AND", + "matchers":[ + { + "matcherType":"ALL_KEYS", + "negate":false, + "userDefinedSegmentMatcherData":null, + "whitelistMatcherData":null + } + ] + }, + "partitions":[ + { + "treatment":"on", + "size":100 + } + ] + } + ] + } + ], + "s": -1, + "t": -1 +}, "rbs": {"d":[], "s":-1, "t": -1} +} From aa3369981fc1c02551486a575556bcee68cccb82 Mon Sep 17 00:00:00 2001 From: Bilal Al-Shahwany Date: Wed, 4 Jun 2025 21:18:08 -0700 Subject: [PATCH 3/7] Added integration tests --- .../cache/stores/localhost_split_builder.rb | 3 +- spec/integrations/in_memory_client_spec.rb | 24 ++++++ spec/test_data/integrations/splits.json | 83 +++++++++++++++++++ .../datetime_matcher_splits.json | 1 + .../negate_number_matcher_splits.json | 1 + .../negative_number_matcher_splits.json | 1 + .../number_matcher_splits.json | 1 + .../splits/combining_matcher_splits.json | 1 + .../splits/engine/all_keys_matcher.json | 1 + .../splits/engine/configurations.json | 5 ++ .../splits/engine/dependency_matcher.json | 2 + .../splits/engine/equal_to_set_matcher.json | 1 + .../splits/engine/impressions_test.json | 2 + spec/test_data/splits/engine/killed.json | 1 + .../engine/segment_deleted_matcher.json | 1 + .../splits/engine/segment_matcher.json | 1 + .../splits/engine/segment_matcher2.json | 3 + .../splits/engine/whitelist_matcher.json | 1 + .../splits/equal_to_matcher/date_splits.json | 1 + .../equal_to_matcher/negative_splits.json | 1 + .../splits/equal_to_matcher/splits.json | 1 + .../splits/equal_to_matcher/zero_splits.json | 1 + .../date_splits.json | 1 + .../negative_splits.json | 1 + .../splits.json | 1 + spec/test_data/splits/imp-toggle.json | 3 + .../date_splits.json | 1 + .../date_splits2.json | 1 + .../negative_splits.json | 1 + .../less_than_or_equal_to_matcher/splits.json | 1 + .../semver_matchers/semver_between.json | 1 + .../semver_matchers/semver_equalto.json | 1 + .../semver_greater_or_equalto.json | 1 + .../splits/semver_matchers/semver_inlist.json | 1 + .../semver_less_or_equalto.json | 1 + spec/test_data/splits/splits.json | 2 + spec/test_data/splits/splits2.json | 3 + spec/test_data/splits/splits3.json | 2 + spec/test_data/splits/splits4.json | 1 + .../splits/splits_traffic_allocation.json | 5 ++ ...splits_traffic_allocation_one_percent.json | 1 + .../splits/whitelist_matcher_splits.json | 1 + 42 files changed, 166 insertions(+), 1 deletion(-) diff --git a/lib/splitclient-rb/cache/stores/localhost_split_builder.rb b/lib/splitclient-rb/cache/stores/localhost_split_builder.rb index b8f209ab..1fc2f949 100644 --- a/lib/splitclient-rb/cache/stores/localhost_split_builder.rb +++ b/lib/splitclient-rb/cache/stores/localhost_split_builder.rb @@ -22,7 +22,8 @@ def build_split(feature, treatments) seed: 2_089_907_429, defaultTreatment: 'control_treatment', configurations: build_configurations(treatments), - conditions: build_conditions(treatments) + conditions: build_conditions(treatments), + prerequisites: [] } end diff --git a/spec/integrations/in_memory_client_spec.rb b/spec/integrations/in_memory_client_spec.rb index 2f2024b2..209bd3ac 100644 --- a/spec/integrations/in_memory_client_spec.rb +++ b/spec/integrations/in_memory_client_spec.rb @@ -90,6 +90,30 @@ expect(impressions[1][:treatment][:change_number]).to eq(1_506_703_262_916) end + it 'returns treatments with prereq_flag feature and check impressions' do + stub_request(:get, "https://sdk.split.io/api/splitChanges?s=1.3&since=1506703262916&rbSince=-1").to_return(status: 200, body: 'ok') + client.block_until_ready + expect(client.get_treatment('nico_test', 'prereq_flag')).to eq 'on' + expect(client.get_treatment('bla', 'prereq_flag')).to eq 'off_default' + + sleep 0.5 + impressions = custom_impression_listener.queue + + expect(impressions.size).to eq 2 + + expect(impressions[0][:matching_key]).to eq('nico_test') + expect(impressions[0][:split_name]).to eq('prereq_flag') + expect(impressions[0][:treatment][:treatment]).to eq('on') + expect(impressions[0][:treatment][:label]).to eq('in segment all') + expect(impressions[0][:treatment][:change_number]).to eq(1494593336752) + + expect(impressions[1][:matching_key]).to eq('bla') + expect(impressions[1][:split_name]).to eq('prereq_flag') + expect(impressions[1][:treatment][:treatment]).to eq('off_default') + expect(impressions[1][:treatment][:label]).to eq('prerequisites not met') + expect(impressions[1][:treatment][:change_number]).to eq(1494593336752) + end + it 'returns treatments with Test_Save_1 feature and check impressions' do stub_request(:get, "https://sdk.split.io/api/splitChanges?s=1.3&since=1506703262916&rbSince=-1").to_return(status: 200, body: 'ok') client.block_until_ready diff --git a/spec/test_data/integrations/splits.json b/spec/test_data/integrations/splits.json index 9881fda2..2e6054aa 100644 --- a/spec/test_data/integrations/splits.json +++ b/spec/test_data/integrations/splits.json @@ -4,6 +4,7 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "FACUNDO_TEST", + "prerequisites": [], "trafficAllocation": 59, "trafficAllocationSeed": -2108186082, "seed": -1947050785, @@ -124,6 +125,7 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "testing", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 527505678, "seed": -1716462249, @@ -238,6 +240,7 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "testing222", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -397360967, "seed": 1058132210, @@ -292,6 +295,7 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "a_new_split_2", + "prerequisites": [], "trafficAllocation": 99, "trafficAllocationSeed": -1349440646, "seed": -1536389703, @@ -558,6 +562,7 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "test_string_without_attr", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -782597068, "seed": -1682478887, @@ -628,6 +633,7 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "Test", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 217539832, "seed": 52164426, @@ -754,6 +760,7 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "Test_Save_1", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -257595325, "seed": -665945237, @@ -901,6 +908,7 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "TEST", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -673356676, "seed": -511119211, @@ -950,6 +958,7 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "benchmark_jw_1", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 987354894, "seed": 1292874260, @@ -1037,6 +1046,7 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "nico_tests", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1409699192, "seed": -1997241870, @@ -1083,6 +1093,7 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "testo2222", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1164474086, "seed": 1270508512, @@ -1296,6 +1307,7 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "Tagging", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1910132597, "seed": -311493896, @@ -1345,6 +1357,7 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "Welcome_Page_UI", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1848523960, "seed": 1608586361, @@ -1397,6 +1410,7 @@ "impressionsDisabled": false, "trafficTypeName": "test", "name": "pato_test_3", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 458647735, "seed": 95677506, @@ -1446,6 +1460,7 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "testo23", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -689658216, "seed": 1711156051, @@ -1495,6 +1510,7 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "testo909090", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -1196467266, "seed": -1998101827, @@ -1662,6 +1678,7 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "testo22", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1223277820, "seed": -1152948537, @@ -1711,6 +1728,7 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "test-net", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -2038196969, "seed": -862203077, @@ -1760,6 +1778,7 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "test_dep_2", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -806171485, "seed": 922684950, @@ -1853,6 +1872,7 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "Definition_As_Of_Clickable_UI", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -198035199, "seed": -151947071, @@ -1934,6 +1954,7 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "Identify_UI", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -139516103, "seed": 1543172523, @@ -1983,6 +2004,7 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "test_definition_as_of", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1025823325, "seed": -554248124, @@ -2032,6 +2054,7 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "Test-jw-go", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 768122971, "seed": 1539205707, @@ -2111,6 +2134,7 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "benchmark_jw_7", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -1340337178, "seed": -1091938685, @@ -2160,6 +2184,7 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "benchmark_jw_6", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -1202331834, "seed": -48445256, @@ -2209,6 +2234,7 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "benchmark_jw_5", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 2119994290, "seed": -227092192, @@ -2258,6 +2284,7 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "benchmark_jw_4", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1066635158, "seed": -850704283, @@ -2307,6 +2334,7 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "benchmark_jw_3", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1252392550, "seed": 971538037, @@ -2356,6 +2384,7 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "benchmark_jw_2", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -285565213, "seed": -1992295819, @@ -2405,6 +2434,7 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "MAURO_TEST", + "prerequisites": [], "trafficAllocation": 59, "trafficAllocationSeed": -2108186082, "seed": -1947050766, @@ -2521,6 +2551,59 @@ "label": "in segment all" } ] + }, + { + "impressionsDisabled": false, + "trafficTypeName": "account", + "name": "prereq_flag", + "prerequisites": [ + {"n": "MAURO_TEST", "ts": ["off"]}, + {"n": "FACUNDO_TEST", "ts": ["on"]} + ], + "trafficAllocation": 100, + "trafficAllocationSeed": -285565213, + "seed": -1992295819, + "status": "ACTIVE", + "killed": false, + "defaultTreatment": "off_default", + "changeNumber": 1494593336752, + "algo": 2, + "conditions": [ + { + "conditionType": "ROLLOUT", + "matcherGroup": { + "combiner": "AND", + "matchers": [ + { + "keySelector": { + "trafficType": "user", + "attribute": null + }, + "matcherType": "ALL_KEYS", + "negate": false, + "userDefinedSegmentMatcherData": null, + "whitelistMatcherData": null, + "unaryNumericMatcherData": null, + "betweenMatcherData": null, + "booleanMatcherData": null, + "dependencyMatcherData": null, + "stringMatcherData": null + } + ] + }, + "partitions": [ + { + "treatment": "on", + "size": 100 + }, + { + "treatment": "off", + "size": 0 + } + ], + "label": "in segment all" + } + ] } ], "s": -1, diff --git a/spec/test_data/splits/between_matcher/datetime_matcher_splits.json b/spec/test_data/splits/between_matcher/datetime_matcher_splits.json index 73e7ffe2..f6520c55 100644 --- a/spec/test_data/splits/between_matcher/datetime_matcher_splits.json +++ b/spec/test_data/splits/between_matcher/datetime_matcher_splits.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/between_matcher/negate_number_matcher_splits.json b/spec/test_data/splits/between_matcher/negate_number_matcher_splits.json index 9d93d964..688b0c96 100644 --- a/spec/test_data/splits/between_matcher/negate_number_matcher_splits.json +++ b/spec/test_data/splits/between_matcher/negate_number_matcher_splits.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/between_matcher/negative_number_matcher_splits.json b/spec/test_data/splits/between_matcher/negative_number_matcher_splits.json index 105ca471..6738e5ed 100644 --- a/spec/test_data/splits/between_matcher/negative_number_matcher_splits.json +++ b/spec/test_data/splits/between_matcher/negative_number_matcher_splits.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/between_matcher/number_matcher_splits.json b/spec/test_data/splits/between_matcher/number_matcher_splits.json index f5e98ff0..6866a2cc 100644 --- a/spec/test_data/splits/between_matcher/number_matcher_splits.json +++ b/spec/test_data/splits/between_matcher/number_matcher_splits.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/combining_matcher_splits.json b/spec/test_data/splits/combining_matcher_splits.json index 86c258ea..72b65aaf 100644 --- a/spec/test_data/splits/combining_matcher_splits.json +++ b/spec/test_data/splits/combining_matcher_splits.json @@ -3,6 +3,7 @@ { "trafficTypeName": "user", "name": "PASSENGER_anding", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -1740914610, "seed": 1288528654, diff --git a/spec/test_data/splits/engine/all_keys_matcher.json b/spec/test_data/splits/engine/all_keys_matcher.json index 70c425f8..40d57957 100644 --- a/spec/test_data/splits/engine/all_keys_matcher.json +++ b/spec/test_data/splits/engine/all_keys_matcher.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/engine/configurations.json b/spec/test_data/splits/engine/configurations.json index edaecd8d..8ec3babc 100644 --- a/spec/test_data/splits/engine/configurations.json +++ b/spec/test_data/splits/engine/configurations.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, @@ -41,6 +42,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"killed_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, @@ -77,6 +79,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"no_configs_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, @@ -109,6 +112,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"no_configs_for_treatment_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, @@ -144,6 +148,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"no_configs_killed_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/engine/dependency_matcher.json b/spec/test_data/splits/engine/dependency_matcher.json index ba4f1c4d..e64b6edb 100644 --- a/spec/test_data/splits/engine/dependency_matcher.json +++ b/spec/test_data/splits/engine/dependency_matcher.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_whitelist", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1245274114, @@ -42,6 +43,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_dependency", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1245274114, diff --git a/spec/test_data/splits/engine/equal_to_set_matcher.json b/spec/test_data/splits/engine/equal_to_set_matcher.json index 83f7cc6e..1157797c 100644 --- a/spec/test_data/splits/engine/equal_to_set_matcher.json +++ b/spec/test_data/splits/engine/equal_to_set_matcher.json @@ -3,6 +3,7 @@ { "trafficTypeName": "user", "name": "mauro_test", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1683824785, "seed": 1681260525, diff --git a/spec/test_data/splits/engine/impressions_test.json b/spec/test_data/splits/engine/impressions_test.json index 79c1524c..8033e989 100644 --- a/spec/test_data/splits/engine/impressions_test.json +++ b/spec/test_data/splits/engine/impressions_test.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"sample_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1245274114, @@ -47,6 +48,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"beta_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1245274114, diff --git a/spec/test_data/splits/engine/killed.json b/spec/test_data/splits/engine/killed.json index be6f02ba..80408f1f 100644 --- a/spec/test_data/splits/engine/killed.json +++ b/spec/test_data/splits/engine/killed.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_killed", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1245274114, diff --git a/spec/test_data/splits/engine/segment_deleted_matcher.json b/spec/test_data/splits/engine/segment_deleted_matcher.json index e7816f47..c9759d3d 100644 --- a/spec/test_data/splits/engine/segment_deleted_matcher.json +++ b/spec/test_data/splits/engine/segment_deleted_matcher.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"new_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1177551240, diff --git a/spec/test_data/splits/engine/segment_matcher.json b/spec/test_data/splits/engine/segment_matcher.json index 9c7980f1..37c46c13 100644 --- a/spec/test_data/splits/engine/segment_matcher.json +++ b/spec/test_data/splits/engine/segment_matcher.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"new_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1177551240, diff --git a/spec/test_data/splits/engine/segment_matcher2.json b/spec/test_data/splits/engine/segment_matcher2.json index d5e25dfc..8cde76b0 100644 --- a/spec/test_data/splits/engine/segment_matcher2.json +++ b/spec/test_data/splits/engine/segment_matcher2.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"new_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1177551240, @@ -43,6 +44,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"new_feature2", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1177551240, @@ -82,6 +84,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"new_feature3", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1177551240, diff --git a/spec/test_data/splits/engine/whitelist_matcher.json b/spec/test_data/splits/engine/whitelist_matcher.json index 1c491172..d513215a 100644 --- a/spec/test_data/splits/engine/whitelist_matcher.json +++ b/spec/test_data/splits/engine/whitelist_matcher.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_whitelist", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1245274114, diff --git a/spec/test_data/splits/equal_to_matcher/date_splits.json b/spec/test_data/splits/equal_to_matcher/date_splits.json index 5267517b..7e16bd32 100644 --- a/spec/test_data/splits/equal_to_matcher/date_splits.json +++ b/spec/test_data/splits/equal_to_matcher/date_splits.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/equal_to_matcher/negative_splits.json b/spec/test_data/splits/equal_to_matcher/negative_splits.json index 548bcee8..02df1353 100644 --- a/spec/test_data/splits/equal_to_matcher/negative_splits.json +++ b/spec/test_data/splits/equal_to_matcher/negative_splits.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/equal_to_matcher/splits.json b/spec/test_data/splits/equal_to_matcher/splits.json index 5f603999..a2da3d4f 100644 --- a/spec/test_data/splits/equal_to_matcher/splits.json +++ b/spec/test_data/splits/equal_to_matcher/splits.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/equal_to_matcher/zero_splits.json b/spec/test_data/splits/equal_to_matcher/zero_splits.json index da231d90..bac8634a 100644 --- a/spec/test_data/splits/equal_to_matcher/zero_splits.json +++ b/spec/test_data/splits/equal_to_matcher/zero_splits.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/greater_than_or_equal_to_matcher/date_splits.json b/spec/test_data/splits/greater_than_or_equal_to_matcher/date_splits.json index 643e07a9..e0f0ef91 100644 --- a/spec/test_data/splits/greater_than_or_equal_to_matcher/date_splits.json +++ b/spec/test_data/splits/greater_than_or_equal_to_matcher/date_splits.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/greater_than_or_equal_to_matcher/negative_splits.json b/spec/test_data/splits/greater_than_or_equal_to_matcher/negative_splits.json index 0d5ccde7..58e82203 100644 --- a/spec/test_data/splits/greater_than_or_equal_to_matcher/negative_splits.json +++ b/spec/test_data/splits/greater_than_or_equal_to_matcher/negative_splits.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/greater_than_or_equal_to_matcher/splits.json b/spec/test_data/splits/greater_than_or_equal_to_matcher/splits.json index 730aa286..2314d350 100644 --- a/spec/test_data/splits/greater_than_or_equal_to_matcher/splits.json +++ b/spec/test_data/splits/greater_than_or_equal_to_matcher/splits.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/imp-toggle.json b/spec/test_data/splits/imp-toggle.json index b70d6684..06b04ea4 100644 --- a/spec/test_data/splits/imp-toggle.json +++ b/spec/test_data/splits/imp-toggle.json @@ -3,6 +3,7 @@ { "trafficTypeName": "user", "name": "with_track_disabled", + "prerequisites": [], "impressionsDisabled": true, "trafficAllocation": 100, "trafficAllocationSeed": 1068038034, @@ -53,6 +54,7 @@ { "trafficTypeName": "user", "name": "with_track_enabled", + "prerequisites": [], "impressionsDisabled": false, "trafficAllocation": 100, "trafficAllocationSeed": 1068038034, @@ -103,6 +105,7 @@ { "trafficTypeName": "user", "name": "without_track", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1068038034, "seed": -1053389887, diff --git a/spec/test_data/splits/less_than_or_equal_to_matcher/date_splits.json b/spec/test_data/splits/less_than_or_equal_to_matcher/date_splits.json index 0f74fa5b..9e23e85e 100644 --- a/spec/test_data/splits/less_than_or_equal_to_matcher/date_splits.json +++ b/spec/test_data/splits/less_than_or_equal_to_matcher/date_splits.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/less_than_or_equal_to_matcher/date_splits2.json b/spec/test_data/splits/less_than_or_equal_to_matcher/date_splits2.json index eab2e7e2..d251b2b0 100644 --- a/spec/test_data/splits/less_than_or_equal_to_matcher/date_splits2.json +++ b/spec/test_data/splits/less_than_or_equal_to_matcher/date_splits2.json @@ -6,6 +6,7 @@ "trafficTypeId":null, "trafficTypeName":null, "name":"RUBY_isOnOrBeforeDateTimeWithAttributeValueThatDoesNotMatch", + "prerequisites": [], "seed":338948780, "status":"ACTIVE", "killed":false, diff --git a/spec/test_data/splits/less_than_or_equal_to_matcher/negative_splits.json b/spec/test_data/splits/less_than_or_equal_to_matcher/negative_splits.json index db1a51f5..1042dbf8 100644 --- a/spec/test_data/splits/less_than_or_equal_to_matcher/negative_splits.json +++ b/spec/test_data/splits/less_than_or_equal_to_matcher/negative_splits.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/less_than_or_equal_to_matcher/splits.json b/spec/test_data/splits/less_than_or_equal_to_matcher/splits.json index cc2e6dc3..500d6bb8 100644 --- a/spec/test_data/splits/less_than_or_equal_to_matcher/splits.json +++ b/spec/test_data/splits/less_than_or_equal_to_matcher/splits.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/semver_matchers/semver_between.json b/spec/test_data/splits/semver_matchers/semver_between.json index 9a0a3c7b..4a6d71af 100644 --- a/spec/test_data/splits/semver_matchers/semver_between.json +++ b/spec/test_data/splits/semver_matchers/semver_between.json @@ -3,6 +3,7 @@ { "trafficTypeName": "user", "name": "semver_between", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1068038034, "seed": -1053389887, diff --git a/spec/test_data/splits/semver_matchers/semver_equalto.json b/spec/test_data/splits/semver_matchers/semver_equalto.json index e7699e16..b292316a 100644 --- a/spec/test_data/splits/semver_matchers/semver_equalto.json +++ b/spec/test_data/splits/semver_matchers/semver_equalto.json @@ -3,6 +3,7 @@ { "trafficTypeName": "user", "name": "semver_equalto", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1068038034, "seed": -1053389887, diff --git a/spec/test_data/splits/semver_matchers/semver_greater_or_equalto.json b/spec/test_data/splits/semver_matchers/semver_greater_or_equalto.json index 1fde9c28..1e3d39bb 100644 --- a/spec/test_data/splits/semver_matchers/semver_greater_or_equalto.json +++ b/spec/test_data/splits/semver_matchers/semver_greater_or_equalto.json @@ -3,6 +3,7 @@ { "trafficTypeName": "user", "name": "semver_greater_or_equalto", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1068038034, "seed": -1053389887, diff --git a/spec/test_data/splits/semver_matchers/semver_inlist.json b/spec/test_data/splits/semver_matchers/semver_inlist.json index 8feafc58..fb8bd7b5 100644 --- a/spec/test_data/splits/semver_matchers/semver_inlist.json +++ b/spec/test_data/splits/semver_matchers/semver_inlist.json @@ -3,6 +3,7 @@ { "trafficTypeName": "user", "name": "semver_inlist", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1068038034, "seed": -1053389887, diff --git a/spec/test_data/splits/semver_matchers/semver_less_or_equalto.json b/spec/test_data/splits/semver_matchers/semver_less_or_equalto.json index 6704a6c3..ff809a6c 100644 --- a/spec/test_data/splits/semver_matchers/semver_less_or_equalto.json +++ b/spec/test_data/splits/semver_matchers/semver_less_or_equalto.json @@ -3,6 +3,7 @@ { "trafficTypeName": "user", "name": "semver_less_or_equalto", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1068038034, "seed": -1053389887, diff --git a/spec/test_data/splits/splits.json b/spec/test_data/splits/splits.json index 0c08e949..c2d5b3c3 100644 --- a/spec/test_data/splits/splits.json +++ b/spec/test_data/splits/splits.json @@ -3,6 +3,7 @@ { "trafficTypeName":"user", "name":"test_1_ruby", + "prerequisites": [], "seed":2089907429, "status":"ACTIVE", "killed":false, @@ -105,6 +106,7 @@ { "trafficTypeName":"user", "name":"sample_feature", + "prerequisites": [], "seed":-73470340, "status":"ACTIVE", "killed":false, diff --git a/spec/test_data/splits/splits2.json b/spec/test_data/splits/splits2.json index d688a19d..7e7d2aa7 100644 --- a/spec/test_data/splits/splits2.json +++ b/spec/test_data/splits/splits2.json @@ -3,6 +3,7 @@ { "trafficTypeName":"user", "name":"test_1_ruby", + "prerequisites": [], "seed":2089907429, "status":"ARCHIVED", "killed":false, @@ -103,6 +104,7 @@ { "trafficTypeName":"user", "name":"sample_feature", + "prerequisites": [], "seed":-73470340, "status":"ACTIVE", "killed":false, @@ -264,6 +266,7 @@ }, "rbs": {"t": 1457726098069, "s": -1, "d": [{ "changeNumber": 123, "name": "sample_rule_based_segment", + "prerequisites": [], "status": "ACTIVE", "trafficTypeName": "user", "excluded":{ diff --git a/spec/test_data/splits/splits3.json b/spec/test_data/splits/splits3.json index baae0c98..d7f3fb33 100644 --- a/spec/test_data/splits/splits3.json +++ b/spec/test_data/splits/splits3.json @@ -3,6 +3,7 @@ { "trafficTypeName":"user", "name":"test_1_ruby", + "prerequisites": [], "seed":2089907429, "status":"ACTIVE", "killed":false, @@ -105,6 +106,7 @@ { "trafficTypeName":"user", "name":"sample_feature", + "prerequisites": [], "seed":-73470340, "status":"ACTIVE", "killed":false, diff --git a/spec/test_data/splits/splits4.json b/spec/test_data/splits/splits4.json index f9d3f993..4383ac82 100644 --- a/spec/test_data/splits/splits4.json +++ b/spec/test_data/splits/splits4.json @@ -3,6 +3,7 @@ { "trafficTypeName": "user", "name": "uber_feature", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 834650759, "seed": 1165259858, diff --git a/spec/test_data/splits/splits_traffic_allocation.json b/spec/test_data/splits/splits_traffic_allocation.json index e1a58647..e3329b14 100644 --- a/spec/test_data/splits/splits_traffic_allocation.json +++ b/spec/test_data/splits/splits_traffic_allocation.json @@ -3,6 +3,7 @@ { "trafficTypeName": "account", "name": "Traffic_Allocation_UI", + "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1009780522, "seed": -1009780522, @@ -80,6 +81,7 @@ { "trafficTypeName": "account", "name": "Traffic_Allocation_UI2", + "prerequisites": [], "trafficAllocation": 90, "trafficAllocationSeed": null, "seed": -1009780522, @@ -157,6 +159,7 @@ { "trafficTypeName": "account", "name": "Traffic_Allocation_UI3", + "prerequisites": [], "trafficAllocation": 90, "trafficAllocationSeed": 1009780522, "seed": -1009780522, @@ -234,6 +237,7 @@ { "trafficTypeName": "account", "name": "Traffic_Allocation_UI4", + "prerequisites": [], "trafficAllocation": 0, "trafficAllocationSeed": null, "seed": -1009780522, @@ -311,6 +315,7 @@ { "trafficTypeName": "user", "name": "Test_on_off_on", + "prerequisites": [], "seed": 673896442, "status": "ACTIVE", "killed": false, diff --git a/spec/test_data/splits/splits_traffic_allocation_one_percent.json b/spec/test_data/splits/splits_traffic_allocation_one_percent.json index d480a521..2b842578 100644 --- a/spec/test_data/splits/splits_traffic_allocation_one_percent.json +++ b/spec/test_data/splits/splits_traffic_allocation_one_percent.json @@ -2,6 +2,7 @@ "d": [ { "name": "Traffic_Allocation_One_Percent", + "prerequisites": [], "algo": 1, "trafficAllocation": 1, "trafficAllocationSeed": -1, diff --git a/spec/test_data/splits/whitelist_matcher_splits.json b/spec/test_data/splits/whitelist_matcher_splits.json index 81259de9..5a07644d 100644 --- a/spec/test_data/splits/whitelist_matcher_splits.json +++ b/spec/test_data/splits/whitelist_matcher_splits.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, From f4ced370652dc3c969669a7624e8d8d8c0c03546 Mon Sep 17 00:00:00 2001 From: Bilal Al-Shahwany Date: Thu, 5 Jun 2025 13:22:12 -0700 Subject: [PATCH 4/7] polish --- lib/splitclient-rb/engine/parser/evaluator.rb | 16 +++++----- spec/test_data/integrations/splits.json | 30 ------------------- .../datetime_matcher_splits.json | 1 - .../negate_number_matcher_splits.json | 1 - .../negative_number_matcher_splits.json | 1 - .../number_matcher_splits.json | 1 - .../splits/combining_matcher_splits.json | 1 - .../splits/engine/all_keys_matcher.json | 1 - .../splits/engine/configurations.json | 4 --- .../splits/engine/dependency_matcher.json | 2 -- .../splits/engine/equal_to_set_matcher.json | 1 - .../splits/engine/impressions_test.json | 2 -- spec/test_data/splits/engine/killed.json | 1 - .../splits/engine/prerequisites_matcher.json | 1 - .../engine/segment_deleted_matcher.json | 1 - .../splits/engine/segment_matcher.json | 1 - .../splits/engine/segment_matcher2.json | 3 -- .../splits/engine/whitelist_matcher.json | 1 - .../splits/equal_to_matcher/date_splits.json | 1 - .../equal_to_matcher/negative_splits.json | 1 - .../splits/equal_to_matcher/splits.json | 1 - .../splits/equal_to_matcher/zero_splits.json | 1 - .../date_splits.json | 1 - .../negative_splits.json | 1 - .../splits.json | 1 - spec/test_data/splits/imp-toggle.json | 3 -- .../date_splits.json | 1 - .../date_splits2.json | 1 - .../negative_splits.json | 1 - .../less_than_or_equal_to_matcher/splits.json | 1 - .../semver_matchers/semver_between.json | 1 - .../semver_matchers/semver_equalto.json | 1 - .../semver_greater_or_equalto.json | 1 - .../splits/semver_matchers/semver_inlist.json | 1 - .../semver_less_or_equalto.json | 1 - spec/test_data/splits/splits.json | 2 -- spec/test_data/splits/splits2.json | 3 -- spec/test_data/splits/splits3.json | 2 -- spec/test_data/splits/splits4.json | 1 - .../splits/splits_traffic_allocation.json | 5 ---- ...splits_traffic_allocation_one_percent.json | 1 - .../splits/whitelist_matcher_splits.json | 1 - 42 files changed, 9 insertions(+), 94 deletions(-) diff --git a/lib/splitclient-rb/engine/parser/evaluator.rb b/lib/splitclient-rb/engine/parser/evaluator.rb index 5e977632..578e1651 100644 --- a/lib/splitclient-rb/engine/parser/evaluator.rb +++ b/lib/splitclient-rb/engine/parser/evaluator.rb @@ -38,13 +38,15 @@ def split_configurations(treatment, split) end def match(split, keys, attributes) - prerequisites_matcher = SplitIoClient::PrerequisitesMatcher.new(split[:prerequisites], @config.split_logger) - return treatment_hash(Models::Label::PREREQUISITES_NOT_MET, split[:defaultTreatment], split[:changeNumber], split_configurations(split[:defaultTreatment], split)) unless prerequisites_matcher.match?( - matching_key: keys[:matching_key], - bucketing_key: keys[:bucketing_key], - evaluator: self, - attributes: attributes - ) + if split.key?(:prerequisites) && !split[:prerequisites].nil? + prerequisites_matcher = SplitIoClient::PrerequisitesMatcher.new(split[:prerequisites], @config.split_logger) + return treatment_hash(Models::Label::PREREQUISITES_NOT_MET, split[:defaultTreatment], split[:changeNumber], split_configurations(split[:defaultTreatment], split)) unless prerequisites_matcher.match?( + matching_key: keys[:matching_key], + bucketing_key: keys[:bucketing_key], + evaluator: self, + attributes: attributes + ) + end in_rollout = false key = keys[:bucketing_key] ? keys[:bucketing_key] : keys[:matching_key] diff --git a/spec/test_data/integrations/splits.json b/spec/test_data/integrations/splits.json index 2e6054aa..1347a248 100644 --- a/spec/test_data/integrations/splits.json +++ b/spec/test_data/integrations/splits.json @@ -4,7 +4,6 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "FACUNDO_TEST", - "prerequisites": [], "trafficAllocation": 59, "trafficAllocationSeed": -2108186082, "seed": -1947050785, @@ -125,7 +124,6 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "testing", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 527505678, "seed": -1716462249, @@ -240,7 +238,6 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "testing222", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -397360967, "seed": 1058132210, @@ -295,7 +292,6 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "a_new_split_2", - "prerequisites": [], "trafficAllocation": 99, "trafficAllocationSeed": -1349440646, "seed": -1536389703, @@ -562,7 +558,6 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "test_string_without_attr", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -782597068, "seed": -1682478887, @@ -633,7 +628,6 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "Test", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 217539832, "seed": 52164426, @@ -760,7 +754,6 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "Test_Save_1", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -257595325, "seed": -665945237, @@ -908,7 +901,6 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "TEST", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -673356676, "seed": -511119211, @@ -958,7 +950,6 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "benchmark_jw_1", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 987354894, "seed": 1292874260, @@ -1046,7 +1037,6 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "nico_tests", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1409699192, "seed": -1997241870, @@ -1093,7 +1083,6 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "testo2222", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1164474086, "seed": 1270508512, @@ -1307,7 +1296,6 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "Tagging", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1910132597, "seed": -311493896, @@ -1357,7 +1345,6 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "Welcome_Page_UI", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1848523960, "seed": 1608586361, @@ -1410,7 +1397,6 @@ "impressionsDisabled": false, "trafficTypeName": "test", "name": "pato_test_3", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 458647735, "seed": 95677506, @@ -1460,7 +1446,6 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "testo23", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -689658216, "seed": 1711156051, @@ -1510,7 +1495,6 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "testo909090", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -1196467266, "seed": -1998101827, @@ -1678,7 +1662,6 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "testo22", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1223277820, "seed": -1152948537, @@ -1728,7 +1711,6 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "test-net", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -2038196969, "seed": -862203077, @@ -1778,7 +1760,6 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "test_dep_2", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -806171485, "seed": 922684950, @@ -1872,7 +1853,6 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "Definition_As_Of_Clickable_UI", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -198035199, "seed": -151947071, @@ -1954,7 +1934,6 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "Identify_UI", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -139516103, "seed": 1543172523, @@ -2004,7 +1983,6 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "test_definition_as_of", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1025823325, "seed": -554248124, @@ -2054,7 +2032,6 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "Test-jw-go", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 768122971, "seed": 1539205707, @@ -2134,7 +2111,6 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "benchmark_jw_7", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -1340337178, "seed": -1091938685, @@ -2184,7 +2160,6 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "benchmark_jw_6", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -1202331834, "seed": -48445256, @@ -2234,7 +2209,6 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "benchmark_jw_5", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 2119994290, "seed": -227092192, @@ -2284,7 +2258,6 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "benchmark_jw_4", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1066635158, "seed": -850704283, @@ -2334,7 +2307,6 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "benchmark_jw_3", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1252392550, "seed": 971538037, @@ -2384,7 +2356,6 @@ "impressionsDisabled": false, "trafficTypeName": "user", "name": "benchmark_jw_2", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -285565213, "seed": -1992295819, @@ -2434,7 +2405,6 @@ "impressionsDisabled": false, "trafficTypeName": "account", "name": "MAURO_TEST", - "prerequisites": [], "trafficAllocation": 59, "trafficAllocationSeed": -2108186082, "seed": -1947050766, diff --git a/spec/test_data/splits/between_matcher/datetime_matcher_splits.json b/spec/test_data/splits/between_matcher/datetime_matcher_splits.json index f6520c55..73e7ffe2 100644 --- a/spec/test_data/splits/between_matcher/datetime_matcher_splits.json +++ b/spec/test_data/splits/between_matcher/datetime_matcher_splits.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/between_matcher/negate_number_matcher_splits.json b/spec/test_data/splits/between_matcher/negate_number_matcher_splits.json index 688b0c96..9d93d964 100644 --- a/spec/test_data/splits/between_matcher/negate_number_matcher_splits.json +++ b/spec/test_data/splits/between_matcher/negate_number_matcher_splits.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/between_matcher/negative_number_matcher_splits.json b/spec/test_data/splits/between_matcher/negative_number_matcher_splits.json index 6738e5ed..105ca471 100644 --- a/spec/test_data/splits/between_matcher/negative_number_matcher_splits.json +++ b/spec/test_data/splits/between_matcher/negative_number_matcher_splits.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/between_matcher/number_matcher_splits.json b/spec/test_data/splits/between_matcher/number_matcher_splits.json index 6866a2cc..f5e98ff0 100644 --- a/spec/test_data/splits/between_matcher/number_matcher_splits.json +++ b/spec/test_data/splits/between_matcher/number_matcher_splits.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/combining_matcher_splits.json b/spec/test_data/splits/combining_matcher_splits.json index 72b65aaf..86c258ea 100644 --- a/spec/test_data/splits/combining_matcher_splits.json +++ b/spec/test_data/splits/combining_matcher_splits.json @@ -3,7 +3,6 @@ { "trafficTypeName": "user", "name": "PASSENGER_anding", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": -1740914610, "seed": 1288528654, diff --git a/spec/test_data/splits/engine/all_keys_matcher.json b/spec/test_data/splits/engine/all_keys_matcher.json index 40d57957..70c425f8 100644 --- a/spec/test_data/splits/engine/all_keys_matcher.json +++ b/spec/test_data/splits/engine/all_keys_matcher.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/engine/configurations.json b/spec/test_data/splits/engine/configurations.json index 8ec3babc..aedf9b8f 100644 --- a/spec/test_data/splits/engine/configurations.json +++ b/spec/test_data/splits/engine/configurations.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, @@ -42,7 +41,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"killed_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, @@ -79,7 +77,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"no_configs_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, @@ -112,7 +109,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"no_configs_for_treatment_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/engine/dependency_matcher.json b/spec/test_data/splits/engine/dependency_matcher.json index e64b6edb..ba4f1c4d 100644 --- a/spec/test_data/splits/engine/dependency_matcher.json +++ b/spec/test_data/splits/engine/dependency_matcher.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_whitelist", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1245274114, @@ -43,7 +42,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_dependency", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1245274114, diff --git a/spec/test_data/splits/engine/equal_to_set_matcher.json b/spec/test_data/splits/engine/equal_to_set_matcher.json index 1157797c..83f7cc6e 100644 --- a/spec/test_data/splits/engine/equal_to_set_matcher.json +++ b/spec/test_data/splits/engine/equal_to_set_matcher.json @@ -3,7 +3,6 @@ { "trafficTypeName": "user", "name": "mauro_test", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1683824785, "seed": 1681260525, diff --git a/spec/test_data/splits/engine/impressions_test.json b/spec/test_data/splits/engine/impressions_test.json index 8033e989..79c1524c 100644 --- a/spec/test_data/splits/engine/impressions_test.json +++ b/spec/test_data/splits/engine/impressions_test.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"sample_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1245274114, @@ -48,7 +47,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"beta_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1245274114, diff --git a/spec/test_data/splits/engine/killed.json b/spec/test_data/splits/engine/killed.json index 80408f1f..be6f02ba 100644 --- a/spec/test_data/splits/engine/killed.json +++ b/spec/test_data/splits/engine/killed.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_killed", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1245274114, diff --git a/spec/test_data/splits/engine/prerequisites_matcher.json b/spec/test_data/splits/engine/prerequisites_matcher.json index 78474660..783969a8 100644 --- a/spec/test_data/splits/engine/prerequisites_matcher.json +++ b/spec/test_data/splits/engine/prerequisites_matcher.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_whitelist", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1245274114, diff --git a/spec/test_data/splits/engine/segment_deleted_matcher.json b/spec/test_data/splits/engine/segment_deleted_matcher.json index c9759d3d..e7816f47 100644 --- a/spec/test_data/splits/engine/segment_deleted_matcher.json +++ b/spec/test_data/splits/engine/segment_deleted_matcher.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"new_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1177551240, diff --git a/spec/test_data/splits/engine/segment_matcher.json b/spec/test_data/splits/engine/segment_matcher.json index 37c46c13..9c7980f1 100644 --- a/spec/test_data/splits/engine/segment_matcher.json +++ b/spec/test_data/splits/engine/segment_matcher.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"new_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1177551240, diff --git a/spec/test_data/splits/engine/segment_matcher2.json b/spec/test_data/splits/engine/segment_matcher2.json index 8cde76b0..d5e25dfc 100644 --- a/spec/test_data/splits/engine/segment_matcher2.json +++ b/spec/test_data/splits/engine/segment_matcher2.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"new_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1177551240, @@ -44,7 +43,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"new_feature2", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1177551240, @@ -84,7 +82,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"new_feature3", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1177551240, diff --git a/spec/test_data/splits/engine/whitelist_matcher.json b/spec/test_data/splits/engine/whitelist_matcher.json index d513215a..1c491172 100644 --- a/spec/test_data/splits/engine/whitelist_matcher.json +++ b/spec/test_data/splits/engine/whitelist_matcher.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_whitelist", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1245274114, diff --git a/spec/test_data/splits/equal_to_matcher/date_splits.json b/spec/test_data/splits/equal_to_matcher/date_splits.json index 7e16bd32..5267517b 100644 --- a/spec/test_data/splits/equal_to_matcher/date_splits.json +++ b/spec/test_data/splits/equal_to_matcher/date_splits.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/equal_to_matcher/negative_splits.json b/spec/test_data/splits/equal_to_matcher/negative_splits.json index 02df1353..548bcee8 100644 --- a/spec/test_data/splits/equal_to_matcher/negative_splits.json +++ b/spec/test_data/splits/equal_to_matcher/negative_splits.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/equal_to_matcher/splits.json b/spec/test_data/splits/equal_to_matcher/splits.json index a2da3d4f..5f603999 100644 --- a/spec/test_data/splits/equal_to_matcher/splits.json +++ b/spec/test_data/splits/equal_to_matcher/splits.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/equal_to_matcher/zero_splits.json b/spec/test_data/splits/equal_to_matcher/zero_splits.json index bac8634a..da231d90 100644 --- a/spec/test_data/splits/equal_to_matcher/zero_splits.json +++ b/spec/test_data/splits/equal_to_matcher/zero_splits.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/greater_than_or_equal_to_matcher/date_splits.json b/spec/test_data/splits/greater_than_or_equal_to_matcher/date_splits.json index e0f0ef91..643e07a9 100644 --- a/spec/test_data/splits/greater_than_or_equal_to_matcher/date_splits.json +++ b/spec/test_data/splits/greater_than_or_equal_to_matcher/date_splits.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/greater_than_or_equal_to_matcher/negative_splits.json b/spec/test_data/splits/greater_than_or_equal_to_matcher/negative_splits.json index 58e82203..0d5ccde7 100644 --- a/spec/test_data/splits/greater_than_or_equal_to_matcher/negative_splits.json +++ b/spec/test_data/splits/greater_than_or_equal_to_matcher/negative_splits.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/greater_than_or_equal_to_matcher/splits.json b/spec/test_data/splits/greater_than_or_equal_to_matcher/splits.json index 2314d350..730aa286 100644 --- a/spec/test_data/splits/greater_than_or_equal_to_matcher/splits.json +++ b/spec/test_data/splits/greater_than_or_equal_to_matcher/splits.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/imp-toggle.json b/spec/test_data/splits/imp-toggle.json index 06b04ea4..b70d6684 100644 --- a/spec/test_data/splits/imp-toggle.json +++ b/spec/test_data/splits/imp-toggle.json @@ -3,7 +3,6 @@ { "trafficTypeName": "user", "name": "with_track_disabled", - "prerequisites": [], "impressionsDisabled": true, "trafficAllocation": 100, "trafficAllocationSeed": 1068038034, @@ -54,7 +53,6 @@ { "trafficTypeName": "user", "name": "with_track_enabled", - "prerequisites": [], "impressionsDisabled": false, "trafficAllocation": 100, "trafficAllocationSeed": 1068038034, @@ -105,7 +103,6 @@ { "trafficTypeName": "user", "name": "without_track", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1068038034, "seed": -1053389887, diff --git a/spec/test_data/splits/less_than_or_equal_to_matcher/date_splits.json b/spec/test_data/splits/less_than_or_equal_to_matcher/date_splits.json index 9e23e85e..0f74fa5b 100644 --- a/spec/test_data/splits/less_than_or_equal_to_matcher/date_splits.json +++ b/spec/test_data/splits/less_than_or_equal_to_matcher/date_splits.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/less_than_or_equal_to_matcher/date_splits2.json b/spec/test_data/splits/less_than_or_equal_to_matcher/date_splits2.json index d251b2b0..eab2e7e2 100644 --- a/spec/test_data/splits/less_than_or_equal_to_matcher/date_splits2.json +++ b/spec/test_data/splits/less_than_or_equal_to_matcher/date_splits2.json @@ -6,7 +6,6 @@ "trafficTypeId":null, "trafficTypeName":null, "name":"RUBY_isOnOrBeforeDateTimeWithAttributeValueThatDoesNotMatch", - "prerequisites": [], "seed":338948780, "status":"ACTIVE", "killed":false, diff --git a/spec/test_data/splits/less_than_or_equal_to_matcher/negative_splits.json b/spec/test_data/splits/less_than_or_equal_to_matcher/negative_splits.json index 1042dbf8..db1a51f5 100644 --- a/spec/test_data/splits/less_than_or_equal_to_matcher/negative_splits.json +++ b/spec/test_data/splits/less_than_or_equal_to_matcher/negative_splits.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/less_than_or_equal_to_matcher/splits.json b/spec/test_data/splits/less_than_or_equal_to_matcher/splits.json index 500d6bb8..cc2e6dc3 100644 --- a/spec/test_data/splits/less_than_or_equal_to_matcher/splits.json +++ b/spec/test_data/splits/less_than_or_equal_to_matcher/splits.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, diff --git a/spec/test_data/splits/semver_matchers/semver_between.json b/spec/test_data/splits/semver_matchers/semver_between.json index 4a6d71af..9a0a3c7b 100644 --- a/spec/test_data/splits/semver_matchers/semver_between.json +++ b/spec/test_data/splits/semver_matchers/semver_between.json @@ -3,7 +3,6 @@ { "trafficTypeName": "user", "name": "semver_between", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1068038034, "seed": -1053389887, diff --git a/spec/test_data/splits/semver_matchers/semver_equalto.json b/spec/test_data/splits/semver_matchers/semver_equalto.json index b292316a..e7699e16 100644 --- a/spec/test_data/splits/semver_matchers/semver_equalto.json +++ b/spec/test_data/splits/semver_matchers/semver_equalto.json @@ -3,7 +3,6 @@ { "trafficTypeName": "user", "name": "semver_equalto", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1068038034, "seed": -1053389887, diff --git a/spec/test_data/splits/semver_matchers/semver_greater_or_equalto.json b/spec/test_data/splits/semver_matchers/semver_greater_or_equalto.json index 1e3d39bb..1fde9c28 100644 --- a/spec/test_data/splits/semver_matchers/semver_greater_or_equalto.json +++ b/spec/test_data/splits/semver_matchers/semver_greater_or_equalto.json @@ -3,7 +3,6 @@ { "trafficTypeName": "user", "name": "semver_greater_or_equalto", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1068038034, "seed": -1053389887, diff --git a/spec/test_data/splits/semver_matchers/semver_inlist.json b/spec/test_data/splits/semver_matchers/semver_inlist.json index fb8bd7b5..8feafc58 100644 --- a/spec/test_data/splits/semver_matchers/semver_inlist.json +++ b/spec/test_data/splits/semver_matchers/semver_inlist.json @@ -3,7 +3,6 @@ { "trafficTypeName": "user", "name": "semver_inlist", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1068038034, "seed": -1053389887, diff --git a/spec/test_data/splits/semver_matchers/semver_less_or_equalto.json b/spec/test_data/splits/semver_matchers/semver_less_or_equalto.json index ff809a6c..6704a6c3 100644 --- a/spec/test_data/splits/semver_matchers/semver_less_or_equalto.json +++ b/spec/test_data/splits/semver_matchers/semver_less_or_equalto.json @@ -3,7 +3,6 @@ { "trafficTypeName": "user", "name": "semver_less_or_equalto", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1068038034, "seed": -1053389887, diff --git a/spec/test_data/splits/splits.json b/spec/test_data/splits/splits.json index c2d5b3c3..0c08e949 100644 --- a/spec/test_data/splits/splits.json +++ b/spec/test_data/splits/splits.json @@ -3,7 +3,6 @@ { "trafficTypeName":"user", "name":"test_1_ruby", - "prerequisites": [], "seed":2089907429, "status":"ACTIVE", "killed":false, @@ -106,7 +105,6 @@ { "trafficTypeName":"user", "name":"sample_feature", - "prerequisites": [], "seed":-73470340, "status":"ACTIVE", "killed":false, diff --git a/spec/test_data/splits/splits2.json b/spec/test_data/splits/splits2.json index 7e7d2aa7..d688a19d 100644 --- a/spec/test_data/splits/splits2.json +++ b/spec/test_data/splits/splits2.json @@ -3,7 +3,6 @@ { "trafficTypeName":"user", "name":"test_1_ruby", - "prerequisites": [], "seed":2089907429, "status":"ARCHIVED", "killed":false, @@ -104,7 +103,6 @@ { "trafficTypeName":"user", "name":"sample_feature", - "prerequisites": [], "seed":-73470340, "status":"ACTIVE", "killed":false, @@ -266,7 +264,6 @@ }, "rbs": {"t": 1457726098069, "s": -1, "d": [{ "changeNumber": 123, "name": "sample_rule_based_segment", - "prerequisites": [], "status": "ACTIVE", "trafficTypeName": "user", "excluded":{ diff --git a/spec/test_data/splits/splits3.json b/spec/test_data/splits/splits3.json index d7f3fb33..baae0c98 100644 --- a/spec/test_data/splits/splits3.json +++ b/spec/test_data/splits/splits3.json @@ -3,7 +3,6 @@ { "trafficTypeName":"user", "name":"test_1_ruby", - "prerequisites": [], "seed":2089907429, "status":"ACTIVE", "killed":false, @@ -106,7 +105,6 @@ { "trafficTypeName":"user", "name":"sample_feature", - "prerequisites": [], "seed":-73470340, "status":"ACTIVE", "killed":false, diff --git a/spec/test_data/splits/splits4.json b/spec/test_data/splits/splits4.json index 4383ac82..f9d3f993 100644 --- a/spec/test_data/splits/splits4.json +++ b/spec/test_data/splits/splits4.json @@ -3,7 +3,6 @@ { "trafficTypeName": "user", "name": "uber_feature", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 834650759, "seed": 1165259858, diff --git a/spec/test_data/splits/splits_traffic_allocation.json b/spec/test_data/splits/splits_traffic_allocation.json index e3329b14..e1a58647 100644 --- a/spec/test_data/splits/splits_traffic_allocation.json +++ b/spec/test_data/splits/splits_traffic_allocation.json @@ -3,7 +3,6 @@ { "trafficTypeName": "account", "name": "Traffic_Allocation_UI", - "prerequisites": [], "trafficAllocation": 100, "trafficAllocationSeed": 1009780522, "seed": -1009780522, @@ -81,7 +80,6 @@ { "trafficTypeName": "account", "name": "Traffic_Allocation_UI2", - "prerequisites": [], "trafficAllocation": 90, "trafficAllocationSeed": null, "seed": -1009780522, @@ -159,7 +157,6 @@ { "trafficTypeName": "account", "name": "Traffic_Allocation_UI3", - "prerequisites": [], "trafficAllocation": 90, "trafficAllocationSeed": 1009780522, "seed": -1009780522, @@ -237,7 +234,6 @@ { "trafficTypeName": "account", "name": "Traffic_Allocation_UI4", - "prerequisites": [], "trafficAllocation": 0, "trafficAllocationSeed": null, "seed": -1009780522, @@ -315,7 +311,6 @@ { "trafficTypeName": "user", "name": "Test_on_off_on", - "prerequisites": [], "seed": 673896442, "status": "ACTIVE", "killed": false, diff --git a/spec/test_data/splits/splits_traffic_allocation_one_percent.json b/spec/test_data/splits/splits_traffic_allocation_one_percent.json index 2b842578..d480a521 100644 --- a/spec/test_data/splits/splits_traffic_allocation_one_percent.json +++ b/spec/test_data/splits/splits_traffic_allocation_one_percent.json @@ -2,7 +2,6 @@ "d": [ { "name": "Traffic_Allocation_One_Percent", - "prerequisites": [], "algo": 1, "trafficAllocation": 1, "trafficAllocationSeed": -1, diff --git a/spec/test_data/splits/whitelist_matcher_splits.json b/spec/test_data/splits/whitelist_matcher_splits.json index 5a07644d..81259de9 100644 --- a/spec/test_data/splits/whitelist_matcher_splits.json +++ b/spec/test_data/splits/whitelist_matcher_splits.json @@ -4,7 +4,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, From 0a8d1bdb855ef9aec46db81f6029a8501aeb0db7 Mon Sep 17 00:00:00 2001 From: Bilal Al-Shahwany Date: Thu, 5 Jun 2025 13:23:35 -0700 Subject: [PATCH 5/7] polish --- spec/test_data/splits/engine/configurations.json | 1 - 1 file changed, 1 deletion(-) diff --git a/spec/test_data/splits/engine/configurations.json b/spec/test_data/splits/engine/configurations.json index aedf9b8f..edaecd8d 100644 --- a/spec/test_data/splits/engine/configurations.json +++ b/spec/test_data/splits/engine/configurations.json @@ -144,7 +144,6 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"no_configs_killed_feature", - "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-195840228, From 117a96278a6e06e7967c1767e2fd5aa55eb37cef Mon Sep 17 00:00:00 2001 From: Bilal Al-Shahwany <41021307+chillaq@users.noreply.github.com> Date: Thu, 5 Jun 2025 14:11:59 -0700 Subject: [PATCH 6/7] Revert "Updated evaluator" --- lib/splitclient-rb/engine/models/label.rb | 1 - lib/splitclient-rb/engine/parser/evaluator.rb | 8 -- spec/engine/parser/evaluator_spec.rb | 26 +----- .../splits/engine/prerequisites_matcher.json | 79 ------------------- 4 files changed, 4 insertions(+), 110 deletions(-) delete mode 100644 spec/test_data/splits/engine/prerequisites_matcher.json diff --git a/lib/splitclient-rb/engine/models/label.rb b/lib/splitclient-rb/engine/models/label.rb index d55d16b4..750ad79d 100644 --- a/lib/splitclient-rb/engine/models/label.rb +++ b/lib/splitclient-rb/engine/models/label.rb @@ -6,5 +6,4 @@ class SplitIoClient::Engine::Models::Label NOT_IN_SPLIT = 'not in split'.freeze NOT_READY = 'not ready'.freeze NOT_FOUND = 'definition not found'.freeze - PREREQUISITES_NOT_MET = 'prerequisites not met'.freeze end diff --git a/lib/splitclient-rb/engine/parser/evaluator.rb b/lib/splitclient-rb/engine/parser/evaluator.rb index 5e977632..ec7636cd 100644 --- a/lib/splitclient-rb/engine/parser/evaluator.rb +++ b/lib/splitclient-rb/engine/parser/evaluator.rb @@ -38,14 +38,6 @@ def split_configurations(treatment, split) end def match(split, keys, attributes) - prerequisites_matcher = SplitIoClient::PrerequisitesMatcher.new(split[:prerequisites], @config.split_logger) - return treatment_hash(Models::Label::PREREQUISITES_NOT_MET, split[:defaultTreatment], split[:changeNumber], split_configurations(split[:defaultTreatment], split)) unless prerequisites_matcher.match?( - matching_key: keys[:matching_key], - bucketing_key: keys[:bucketing_key], - evaluator: self, - attributes: attributes - ) - in_rollout = false key = keys[:bucketing_key] ? keys[:bucketing_key] : keys[:matching_key] legacy_algo = (split[:algo] == 1 || split[:algo] == nil) ? true : false diff --git a/spec/engine/parser/evaluator_spec.rb b/spec/engine/parser/evaluator_spec.rb index 8aa9e2d7..a6beabe9 100644 --- a/spec/engine/parser/evaluator_spec.rb +++ b/spec/engine/parser/evaluator_spec.rb @@ -3,13 +3,12 @@ require 'spec_helper' describe SplitIoClient::Engine::Parser::Evaluator do - let(:config) { SplitIoClient::SplitConfig.new(logger: Logger.new(StringIO.new)) } - let(:segments_repository) { SplitIoClient::Cache::Repositories::SegmentsRepository.new(config) } - let(:rule_based_segments_repository) { SplitIoClient::Cache::Repositories::RuleBasedSegmentsRepository.new(config) } + let(:segments_repository) { SplitIoClient::Cache::Repositories::SegmentsRepository.new(@default_config) } + let(:rule_based_segments_repository) { SplitIoClient::Cache::Repositories::RuleBasedSegmentsRepository.new(@default_config) } let(:flag_sets_repository) {SplitIoClient::Cache::Repositories::MemoryFlagSetsRepository.new([])} let(:flag_set_filter) {SplitIoClient::Cache::Filter::FlagSetsFilter.new([])} - let(:splits_repository) { SplitIoClient::Cache::Repositories::SplitsRepository.new(config, flag_sets_repository, flag_set_filter) } - let(:evaluator) { described_class.new(segments_repository, splits_repository, rule_based_segments_repository, config) } + let(:splits_repository) { SplitIoClient::Cache::Repositories::SplitsRepository.new(@default_config, flag_sets_repository, flag_set_filter) } + let(:evaluator) { described_class.new(segments_repository, splits_repository, rule_based_segments_repository, true) } let(:killed_split) { { killed: true, defaultTreatment: 'default' } } let(:archived_split) { { status: 'ARCHIVED' } } @@ -18,11 +17,6 @@ SplitIoClient.root, 'spec/test_data/splits/engine/dependency_matcher.json' )), symbolize_names: true) end - let(:split_data_prereq) do - JSON.parse(File.read(File.join( - SplitIoClient.root, 'spec/test_data/splits/engine/prerequisites_matcher.json' - )), symbolize_names: true) - end it 'returns killed treatment' do expect(evaluator.evaluate_feature_flag({ matching_key: 'foo' }, killed_split)) @@ -46,16 +40,4 @@ evaluator.evaluate_feature_flag({ bucketing_key: nil, matching_key: 'fake_user_id_1' }, split_data[:ff][:d][1]) end end - - context 'prerequisites matcher' do - it 'test match' do - splits_repository.update([split_data_prereq[:ff][:d][0], split_data_prereq[:ff][:d][1]], [], 1234) - - result = evaluator.evaluate_feature_flag({ bucketing_key: nil, matching_key: 'fake_user' }, 'test_prereq') - expect(result[:treatment]).to eq('off_default') - - result = evaluator.evaluate_feature_flag({ bucketing_key: nil, matching_key: 'fake_user_id_1' }, 'test_prereq') - expect(result[:treatment]).to eq('on') - end - end end diff --git a/spec/test_data/splits/engine/prerequisites_matcher.json b/spec/test_data/splits/engine/prerequisites_matcher.json deleted file mode 100644 index 78474660..00000000 --- a/spec/test_data/splits/engine/prerequisites_matcher.json +++ /dev/null @@ -1,79 +0,0 @@ -{ "ff":{ - "d": [ - { - "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", - "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", - "name":"test_whitelist", - "prerequisites": [], - "trafficTypeId":"u", - "trafficTypeName":"User", - "seed":-1245274114, - "status":"ACTIVE", - "killed":false, - "defaultTreatment":"off", - "conditions":[ - { - "matcherGroup":{ - "combiner":"AND", - "matchers":[ - { - "matcherType":"WHITELIST", - "negate":false, - "userDefinedSegmentMatcherData":null, - "whitelistMatcherData":{ - "whitelist":[ - "fake_user_id_1", - "fake_user_id_3" - ] - } - } - ] - }, - "partitions":[ - { - "treatment":"on", - "size":100 - } - ] - } - ], - "sets": ["set_4"] - }, - { - "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", - "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", - "name":"test_prereq", - "prerequisites": [{"n": "test_whitelist", "ts": ["on"]}], - "trafficTypeId":"u", - "trafficTypeName":"User", - "seed":-1245274114, - "status":"ACTIVE", - "killed":false, - "defaultTreatment":"off_default", - "conditions":[ - { - "matcherGroup":{ - "combiner":"AND", - "matchers":[ - { - "matcherType":"ALL_KEYS", - "negate":false, - "userDefinedSegmentMatcherData":null, - "whitelistMatcherData":null - } - ] - }, - "partitions":[ - { - "treatment":"on", - "size":100 - } - ] - } - ] - } - ], - "s": -1, - "t": -1 -}, "rbs": {"d":[], "s":-1, "t": -1} -} From 3c987da57b3e43de0041ad8a09cee288854c62d2 Mon Sep 17 00:00:00 2001 From: Bilal Al-Shahwany Date: Thu, 5 Jun 2025 14:29:44 -0700 Subject: [PATCH 7/7] polish --- spec/test_data/splits/engine/prerequisites_matcher.json | 1 + 1 file changed, 1 insertion(+) diff --git a/spec/test_data/splits/engine/prerequisites_matcher.json b/spec/test_data/splits/engine/prerequisites_matcher.json index 783969a8..78474660 100644 --- a/spec/test_data/splits/engine/prerequisites_matcher.json +++ b/spec/test_data/splits/engine/prerequisites_matcher.json @@ -4,6 +4,7 @@ "orgId":"cee838c0-b3eb-11e5-855f-4eacec19f7bf", "environment":"cf2d09f0-b3eb-11e5-855f-4eacec19f7bf", "name":"test_whitelist", + "prerequisites": [], "trafficTypeId":"u", "trafficTypeName":"User", "seed":-1245274114,