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) ⇒ Object
-
#initialize(adapter) ⇒ SplitsRepository
constructor
A new instance of SplitsRepository.
- #not_ready! ⇒ Object
- #ready! ⇒ Object
- #ready? ⇒ Boolean
- #remove_split(name) ⇒ 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
Methods inherited from SplitIoClient::Cache::Repository
Constructor Details
#initialize(adapter) ⇒ SplitsRepository
Returns a new instance of SplitsRepository.
9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 9 def initialize(adapter) @adapter = case adapter.class.to_s when 'SplitIoClient::Cache::Adapters::RedisAdapter' SplitIoClient::Cache::Adapters::CacheAdapter.new(adapter) else adapter end unless SplitIoClient.configuration.mode == :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
22 23 24 25 26 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 22 def add_split(split) return unless split[:name] @adapter.set_string(namespace_key(".split.#{split[:name]}"), split.to_json) end |
#clear ⇒ Object
101 102 103 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 101 def clear @adapter.clear(namespace_key) end |
#exists?(name) ⇒ Boolean
85 86 87 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 85 def exists?(name) @adapter.exists?(namespace_key(".split.#{name}")) end |
#get_change_number ⇒ Object
73 74 75 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 73 def get_change_number @adapter.string(namespace_key('.splits.till')) end |
#get_split(name) ⇒ Object
47 48 49 50 51 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 47 def get_split(name) split = @adapter.string(namespace_key(".split.#{name}")) JSON.parse(split, symbolize_names: true) if split end |
#get_splits(names) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 32 def get_splits(names) 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 [name.to_sym, parsed_data] end.to_h end |
#not_ready! ⇒ Object
93 94 95 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 93 def not_ready! @adapter.set_string(namespace_key('.splits.ready'), -1) end |
#ready! ⇒ Object
97 98 99 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 97 def ready! @adapter.set_string(namespace_key('.splits.ready'), Time.now.utc.to_i) end |
#ready? ⇒ Boolean
89 90 91 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 89 def ready? @adapter.string(namespace_key('.splits.ready')).to_i != -1 end |
#remove_split(name) ⇒ Object
28 29 30 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 28 def remove_split(name) @adapter.delete(namespace_key(".split.#{name}")) end |
#set_change_number(since) ⇒ Object
69 70 71 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 69 def set_change_number(since) @adapter.set_string(namespace_key('.splits.till'), since) end |
#set_segment_names(names) ⇒ Object
77 78 79 80 81 82 83 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 77 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
64 65 66 67 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 64 def split_names @adapter.find_strings_by_prefix(namespace_key('.split.')) .map { |split| split.gsub(namespace_key('.split.'), '') } end |
#splits ⇒ Object
53 54 55 56 57 58 59 60 61 |
# File 'lib/splitclient-rb/cache/repositories/splits_repository.rb', line 53 def splits splits_hash = {} split_names.each do |name| splits_hash[name] = get_split(name) end splits_hash end |