Class: SplitIoClient::Cache::Repositories::SplitsRepository
- Inherits:
-
SplitIoClient::Cache::Repository
- Object
- SplitIoClient::Cache::Repository
- SplitIoClient::Cache::Repositories::SplitsRepository
- Defined in:
- lib/cache/repositories/splits_repository.rb
Constant Summary collapse
- SPLITS_SLICE =
10
Instance Attribute Summary collapse
-
#adapter ⇒ Object
readonly
Returns the value of attribute adapter.
Instance Method Summary collapse
- #add_split(split) ⇒ Object
- #exists?(name) ⇒ Boolean
- #get_change_number ⇒ Object
- #get_split(name) ⇒ Object
- #get_splits(names, slice = SPLITS_SLICE) ⇒ Object
-
#initialize(adapter, config) ⇒ 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, config) ⇒ SplitsRepository
Returns a new instance of SplitsRepository.
11 12 13 14 15 16 17 |
# File 'lib/cache/repositories/splits_repository.rb', line 11 def initialize(adapter, config) @adapter = adapter @config = config @adapter.set_string(namespace_key('.splits.till'), '-1') @adapter.initialize_map(namespace_key('.segments.registered')) end |
Instance Attribute Details
#adapter ⇒ Object (readonly)
Returns the value of attribute adapter.
9 10 11 |
# File 'lib/cache/repositories/splits_repository.rb', line 9 def adapter @adapter end |
Instance Method Details
#add_split(split) ⇒ Object
19 20 21 22 23 |
# File 'lib/cache/repositories/splits_repository.rb', line 19 def add_split(split) return unless split[:name] @adapter.set_string(namespace_key(".split.#{split[:name]}"), split.to_json) end |
#exists?(name) ⇒ Boolean
84 85 86 |
# File 'lib/cache/repositories/splits_repository.rb', line 84 def exists?(name) @adapter.exists?(namespace_key(".split.#{name}")) end |
#get_change_number ⇒ Object
72 73 74 |
# File 'lib/cache/repositories/splits_repository.rb', line 72 def get_change_number @adapter.string(namespace_key('.splits.till')) end |
#get_split(name) ⇒ Object
46 47 48 49 50 |
# File 'lib/cache/repositories/splits_repository.rb', line 46 def get_split(name) split = @adapter.string(namespace_key(".split.#{name}")) JSON.parse(split, symbolize_names: true) if split end |
#get_splits(names, slice = SPLITS_SLICE) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/cache/repositories/splits_repository.rb', line 29 def get_splits(names, slice = SPLITS_SLICE) splits = {} names.each_slice(slice) do |splits_slice| splits.merge!( @adapter .multiple_strings(splits_slice.map { |name| namespace_key(".split.#{name}") }) .map { |name, data| [name.gsub(namespace_key('.split.'), ''), data] }.to_h ) end 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
92 93 94 |
# File 'lib/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/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/cache/repositories/splits_repository.rb', line 88 def ready? @adapter.string(namespace_key('.splits.ready')).to_i != -1 end |
#remove_split(name) ⇒ Object
25 26 27 |
# File 'lib/cache/repositories/splits_repository.rb', line 25 def remove_split(name) @adapter.delete(namespace_key(".split.#{name}")) end |
#set_change_number(since) ⇒ Object
68 69 70 |
# File 'lib/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/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/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 ⇒ Object
52 53 54 55 56 57 58 59 60 |
# File 'lib/cache/repositories/splits_repository.rb', line 52 def splits splits_hash = {} split_names.each do |name| splits_hash[name] = get_split(name) end splits_hash end |