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
- #add_split(split) ⇒ Object
- #clear ⇒ Object
- #exists?(name) ⇒ Boolean
- #get_change_number ⇒ Object
- #get_split(name) ⇒ Object
- #get_splits(names, symbolize_names = true) ⇒ Object
-
#initialize(config) ⇒ SplitsRepository
constructor
A new instance of SplitsRepository.
- #kill(change_number, split_name, default_treatment) ⇒ Object
- #not_ready! ⇒ Object
- #ready! ⇒ Object
- #ready? ⇒ Boolean
- #remove_split(split) ⇒ Object
- #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 ⇒ Object
- #splits_count ⇒ Object
- #traffic_type_exists(tt_name) ⇒ Object
Methods inherited from SplitIoClient::Cache::Repository
Constructor Details
#initialize(config) ⇒ SplitsRepository
Returns a new instance of SplitsRepository.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 9 def initialize(config) 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 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
#add_split(split) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 24 def add_split(split) return unless split[:name] existing_split = get_split(split[:name]) if(!existing_split) increase_tt_name_count(split[:trafficTypeName]) elsif(existing_split[:trafficTypeName] != split[:trafficTypeName]) increase_tt_name_count(split[:trafficTypeName]) decrease_tt_name_count(existing_split[:trafficTypeName]) end @adapter.set_string(namespace_key(".split.#{split[:name]}"), split.to_json) end |
#clear ⇒ Object
125 126 127 128 129 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 125 def clear @tt_cache.clear @adapter.clear(namespace_key) end |
#exists?(name) ⇒ Boolean
109 110 111 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 109 def exists?(name) @adapter.exists?(namespace_key(".split.#{name}")) end |
#get_change_number ⇒ Object
97 98 99 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 97 def get_change_number @adapter.string(namespace_key('.splits.till')) end |
#get_split(name) ⇒ Object
62 63 64 65 66 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 62 def get_split(name) split = @adapter.string(namespace_key(".split.#{name}")) JSON.parse(split, symbolize_names: true) if split end |
#get_splits(names, symbolize_names = true) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 46 def get_splits(names, symbolize_names = true) splits = {} split_names = names.map { |name| namespace_key(".split.#{name}") } splits.merge!( @adapter .multiple_strings(split_names) .map { |name, data| [name.gsub(namespace_key('.split.'), ''), data] }.to_h ) splits.map do |name, data| parsed_data = data ? JSON.parse(data, symbolize_names: true) : nil split_name = symbolize_names ? name.to_sym : name [split_name, parsed_data] end.to_h end |
#kill(change_number, split_name, default_treatment) ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 131 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
117 118 119 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 117 def not_ready! @adapter.set_string(namespace_key('.splits.ready'), -1) end |
#ready! ⇒ Object
121 122 123 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 121 def ready! @adapter.set_string(namespace_key('.splits.ready'), Time.now.utc.to_i) end |
#ready? ⇒ Boolean
113 114 115 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 113 def ready? @adapter.string(namespace_key('.splits.ready')).to_i != -1 end |
#remove_split(split) ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 38 def remove_split(split) tt_name = split[:trafficTypeName] decrease_tt_name_count(split[:trafficTypeName]) @adapter.delete(namespace_key(".split.#{split[:name]}")) end |
#set_change_number(since) ⇒ Object
93 94 95 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 93 def set_change_number(since) @adapter.set_string(namespace_key('.splits.till'), since) end |
#set_segment_names(names) ⇒ Object
101 102 103 104 105 106 107 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 101 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
88 89 90 91 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 88 def split_names @adapter.find_strings_by_prefix(namespace_key('.split.')) .map { |split| split.gsub(namespace_key('.split.'), '') } end |
#splits ⇒ Object
68 69 70 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 68 def splits get_splits(split_names, false) end |
#splits_count ⇒ Object
143 144 145 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 143 def splits_count split_names.length end |
#traffic_type_exists(tt_name) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 72 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 |