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
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.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 9 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
100 101 102 103 104 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 100 def clear @tt_cache.clear @adapter.clear(namespace_key) end |
#exists?(name) ⇒ Boolean
84 85 86 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 84 def exists?(name) @adapter.exists?(namespace_key(".split.#{name}")) end |
#flag_set_filter ⇒ Object
138 139 140 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 138 def flag_set_filter @flag_set_filter end |
#get_change_number ⇒ Object
72 73 74 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 72 def get_change_number @adapter.string(namespace_key('.splits.till')) end |
#get_feature_flags_by_sets(flag_sets) ⇒ Object
122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 122 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
32 33 34 35 36 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 32 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
134 135 136 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 134 def is_flag_set_exist(flag_set) @flag_sets.flag_set_exist?(flag_set) end |
#kill(change_number, split_name, default_treatment) ⇒ Object
106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 106 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
92 93 94 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 92 def not_ready! @adapter.set_string(namespace_key('.splits.ready'), -1) end |
#ready! ⇒ Object
96 97 98 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 96 def ready! @adapter.set_string(namespace_key('.splits.ready'), Time.now.utc.to_i) end |
#ready? ⇒ Boolean
88 89 90 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 88 def ready? @adapter.string(namespace_key('.splits.ready')).to_i != -1 end |
#set_change_number(since) ⇒ Object
68 69 70 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 68 def set_change_number(since) @adapter.set_string(namespace_key('.splits.till'), since) end |
#set_segment_names(names) ⇒ Object
76 77 78 79 80 81 82 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 76 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
63 64 65 66 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 63 def split_names @adapter.find_strings_by_prefix(namespace_key('.split.')) .map { |split| split.gsub(namespace_key('.split.'), '') } end |
#splits(filtered_names = nil) ⇒ Object
38 39 40 41 42 43 44 45 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 38 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
118 119 120 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 118 def splits_count split_names.length end |
#traffic_type_exists(tt_name) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 47 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
26 27 28 29 30 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 26 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 |