Class: SplitIoClient::Cache::Repositories::SplitsRepository
- Inherits:
-
SplitIoClient::Cache::Repository
- Object
- SplitIoClient::Cache::Repository
- SplitIoClient::Cache::Repositories::SplitsRepository
- Defined in:
- lib/splitclient-rb/cache/repositories/splits_repository.rb
Constant Summary collapse
- DEFAULT_CONDITIONS_TEMPLATE =
[{ conditionType: "ROLLOUT", matcherGroup: { combiner: "AND", matchers: [ { keySelector: nil, matcherType: "ALL_KEYS", negate: false, userDefinedSegmentMatcherData: nil, whitelistMatcherData: nil, unaryNumericMatcherData: nil, betweenMatcherData: nil, dependencyMatcherData: nil, booleanMatcherData: nil, stringMatcherData: nil }] }, partitions: [ { treatment: "control", size: 100 } ], label: "targeting rule type unsupported by sdk" }]
Instance Attribute Summary collapse
-
#adapter ⇒ Object
readonly
Returns the value of attribute adapter.
Instance Method Summary collapse
- #clear ⇒ Object
- #exists?(name) ⇒ Boolean
- #flag_set_filter ⇒ Object
- #get_change_number ⇒ Object
- #get_feature_flags_by_sets(flag_sets) ⇒ Object
- #get_split(name) ⇒ Object
-
#initialize(config, flag_sets_repository, flag_set_filter) ⇒ SplitsRepository
constructor
A new instance of SplitsRepository.
- #is_flag_set_exist(flag_set) ⇒ Object
- #kill(change_number, split_name, default_treatment) ⇒ Object
- #not_ready! ⇒ Object
- #ready! ⇒ Object
- #ready? ⇒ Boolean
- #set_change_number(since) ⇒ Object
- #set_segment_names(names) ⇒ Object
-
#split_names ⇒ Object
Return an array of Split Names excluding control keys like splits.till.
- #splits(filtered_names = nil) ⇒ Object
- #splits_count ⇒ Object
- #traffic_type_exists(tt_name) ⇒ Object
- #update(to_add, to_delete, new_change_number) ⇒ Object
Methods inherited from SplitIoClient::Cache::Repository
Constructor Details
#initialize(config, flag_sets_repository, flag_set_filter) ⇒ SplitsRepository
Returns a new instance of SplitsRepository.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 35 def initialize(config, flag_sets_repository, flag_set_filter) super(config) @tt_cache = {} @adapter = case @config.cache_adapter.class.to_s when 'SplitIoClient::Cache::Adapters::RedisAdapter' SplitIoClient::Cache::Adapters::CacheAdapter.new(@config) else @config.cache_adapter end @flag_sets = flag_sets_repository @flag_set_filter = flag_set_filter unless @config.mode.equal?(:consumer) @adapter.set_string(namespace_key('.splits.till'), '-1') @adapter.initialize_map(namespace_key('.segments.registered')) end end |
Instance Attribute Details
#adapter ⇒ Object (readonly)
Returns the value of attribute adapter.
7 8 9 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 7 def adapter @adapter end |
Instance Method Details
#clear ⇒ Object
126 127 128 129 130 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 126 def clear @tt_cache.clear @adapter.clear(namespace_key) end |
#exists?(name) ⇒ Boolean
110 111 112 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 110 def exists?(name) @adapter.exists?(namespace_key(".split.#{name}")) end |
#flag_set_filter ⇒ Object
164 165 166 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 164 def flag_set_filter @flag_set_filter end |
#get_change_number ⇒ Object
98 99 100 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 98 def get_change_number @adapter.string(namespace_key('.splits.till')) end |
#get_feature_flags_by_sets(flag_sets) ⇒ Object
148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 148 def get_feature_flags_by_sets(flag_sets) sets_to_fetch = Array.new flag_sets.each do |flag_set| unless @flag_sets.flag_set_exist?(flag_set) @config.logger.warn("Flag set #{flag_set} is not part of the configured flag set list, ignoring it.") next end sets_to_fetch.push(flag_set) end @flag_sets.get_flag_sets(flag_sets) end |
#get_split(name) ⇒ Object
58 59 60 61 62 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 58 def get_split(name) split = @adapter.string(namespace_key(".split.#{name}")) JSON.parse(split, symbolize_names: true) if split end |
#is_flag_set_exist(flag_set) ⇒ Object
160 161 162 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 160 def is_flag_set_exist(flag_set) @flag_sets.flag_set_exist?(flag_set) end |
#kill(change_number, split_name, default_treatment) ⇒ Object
132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 132 def kill(change_number, split_name, default_treatment) split = get_split(split_name) return if split.nil? split[:killed] = true split[:defaultTreatment] = default_treatment split[:changeNumber] = change_number @adapter.set_string(namespace_key(".split.#{split_name}"), split.to_json) end |
#not_ready! ⇒ Object
118 119 120 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 118 def not_ready! @adapter.set_string(namespace_key('.splits.ready'), -1) end |
#ready! ⇒ Object
122 123 124 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 122 def ready! @adapter.set_string(namespace_key('.splits.ready'), Time.now.utc.to_i) end |
#ready? ⇒ Boolean
114 115 116 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 114 def ready? @adapter.string(namespace_key('.splits.ready')).to_i != -1 end |
#set_change_number(since) ⇒ Object
94 95 96 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 94 def set_change_number(since) @adapter.set_string(namespace_key('.splits.till'), since) end |
#set_segment_names(names) ⇒ Object
102 103 104 105 106 107 108 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 102 def set_segment_names(names) return if names.nil? || names.empty? names.each do |name| @adapter.add_to_set(namespace_key('.segments.registered'), name) end end |
#split_names ⇒ Object
Return an array of Split Names excluding control keys like splits.till
89 90 91 92 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 89 def split_names @adapter.find_strings_by_prefix(namespace_key('.split.')) .map { |split| split.gsub(namespace_key('.split.'), '') } end |
#splits(filtered_names = nil) ⇒ Object
64 65 66 67 68 69 70 71 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 64 def splits(filtered_names=nil) symbolize = true if filtered_names.nil? filtered_names = split_names symbolize = false end get_splits(filtered_names, symbolize) end |
#splits_count ⇒ Object
144 145 146 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 144 def splits_count split_names.length end |
#traffic_type_exists(tt_name) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 73 def traffic_type_exists(tt_name) case @adapter when SplitIoClient::Cache::Adapters::CacheAdapter tt_count = @adapter.string(namespace_key(".trafficType.#{tt_name}")) begin !tt_count.nil? && Integer(tt_count, 10) > 0 rescue StandardError => e @config.logger.error("Error while parsing Traffic Type count: #{e.}") false end else @tt_cache.key?(tt_name) && @tt_cache[tt_name] > 0 end end |
#update(to_add, to_delete, new_change_number) ⇒ Object
52 53 54 55 56 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 52 def update(to_add, to_delete, new_change_number) to_add.each{ |feature_flag| add_feature_flag(feature_flag) } to_delete.each{ |feature_flag| remove_feature_flag(feature_flag) } set_change_number(new_change_number) end |