Class: SplitIoClient::Cache::Repositories::SegmentsRepository
- Inherits:
-
SplitIoClient::Cache::Repository
- Object
- SplitIoClient::Cache::Repository
- SplitIoClient::Cache::Repositories::SegmentsRepository
- Defined in:
- lib/splitclient-rb/cache/repositories/segments_repository.rb
Constant Summary collapse
- KEYS_SLICE =
3000
Instance Attribute Summary collapse
-
#adapter ⇒ Object
readonly
Returns the value of attribute adapter.
Instance Method Summary collapse
-
#add_to_segment(segment) ⇒ Object
Receives segment data, adds and removes segements from the store.
- #clear ⇒ Object
- #contains?(segment_names) ⇒ Boolean
- #get_change_number(name) ⇒ Object
- #get_segment_keys(name) ⇒ Object
- #in_segment?(name, key) ⇒ Boolean
-
#initialize(config, internal_events_queue) ⇒ SegmentsRepository
constructor
A new instance of SegmentsRepository.
- #not_ready! ⇒ Object
- #ready! ⇒ Object
- #ready? ⇒ Boolean
- #segment_keys_count ⇒ Object
- #segments_count ⇒ Object
- #set_change_number(name, last_change) ⇒ Object
- #used_segment_names ⇒ Object
Methods inherited from SplitIoClient::Cache::Repository
Constructor Details
#initialize(config, internal_events_queue) ⇒ SegmentsRepository
Returns a new instance of SegmentsRepository.
9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/splitclient-rb/cache/repositories/segments_repository.rb', line 9 def initialize(config, internal_events_queue) super(config) @adapter = case @config.cache_adapter.class.to_s when 'SplitIoClient::Cache::Adapters::RedisAdapter' SplitIoClient::Cache::Adapters::CacheAdapter.new(@config) else @config.cache_adapter end @adapter.set_bool(namespace_key('.ready'), false) unless @config.mode.equal?(:consumer) @internal_events_queue = internal_events_queue end |
Instance Attribute Details
#adapter ⇒ Object (readonly)
Returns the value of attribute adapter.
7 8 9 |
# File 'lib/splitclient-rb/cache/repositories/segments_repository.rb', line 7 def adapter @adapter end |
Instance Method Details
#add_to_segment(segment) ⇒ Object
Receives segment data, adds and removes segements from the store
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/splitclient-rb/cache/repositories/segments_repository.rb', line 22 def add_to_segment(segment) name = segment[:name] @adapter.initialize_set(segment_data(name)) unless @adapter.exists?(segment_data(name)) add_keys(name, segment[:added]) remove_keys(name, segment[:removed]) if segment[:added].length > 0 || segment[:removed].length > 0 @internal_events_queue.push( SplitIoClient::Engine::Models::SdkInternalEventNotification.new( SplitIoClient::Engine::Models::SdkInternalEvent::SEGMENTS_UPDATED, SplitIoClient::Engine::Models::EventsMetadata.new( SplitIoClient::Engine::Models::SdkEventType::SEGMENTS_UPDATE, [] ) ) ) end end |
#clear ⇒ Object
73 74 75 |
# File 'lib/splitclient-rb/cache/repositories/segments_repository.rb', line 73 def clear @adapter.clear(namespace_key) end |
#contains?(segment_names) ⇒ Boolean
97 98 99 100 101 102 |
# File 'lib/splitclient-rb/cache/repositories/segments_repository.rb', line 97 def contains?(segment_names) if segment_names.empty? return false end return segment_names.to_set.subset?(used_segment_names.to_set) end |
#get_change_number(name) ⇒ Object
57 58 59 |
# File 'lib/splitclient-rb/cache/repositories/segments_repository.rb', line 57 def get_change_number(name) @adapter.string(namespace_key(".segment.#{name}.till")) || -1 end |
#get_segment_keys(name) ⇒ Object
41 42 43 |
# File 'lib/splitclient-rb/cache/repositories/segments_repository.rb', line 41 def get_segment_keys(name) @adapter.get_set(segment_data(name)) end |
#in_segment?(name, key) ⇒ Boolean
45 46 47 |
# File 'lib/splitclient-rb/cache/repositories/segments_repository.rb', line 45 def in_segment?(name, key) @adapter.in_set?(segment_data(name), key) end |
#not_ready! ⇒ Object
65 66 67 |
# File 'lib/splitclient-rb/cache/repositories/segments_repository.rb', line 65 def not_ready! @adapter.set_string(namespace_key('.segments.ready'), -1) end |
#ready! ⇒ Object
69 70 71 |
# File 'lib/splitclient-rb/cache/repositories/segments_repository.rb', line 69 def ready! @adapter.set_string(namespace_key('.segments.ready'), Time.now.utc.to_i) end |
#ready? ⇒ Boolean
61 62 63 |
# File 'lib/splitclient-rb/cache/repositories/segments_repository.rb', line 61 def ready? @adapter.string(namespace_key('.segments.ready')).to_i != -1 end |
#segment_keys_count ⇒ Object
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/splitclient-rb/cache/repositories/segments_repository.rb', line 81 def segment_keys_count names = used_segment_names keys = 0 names.each do |name| segment_keys = get_segment_keys(name) keys += segment_keys.length end keys rescue StandardError => e @config.log_found_exception(__method__.to_s, e) 0 end |
#segments_count ⇒ Object
77 78 79 |
# File 'lib/splitclient-rb/cache/repositories/segments_repository.rb', line 77 def segments_count used_segment_names.length end |
#set_change_number(name, last_change) ⇒ Object
53 54 55 |
# File 'lib/splitclient-rb/cache/repositories/segments_repository.rb', line 53 def set_change_number(name, last_change) @adapter.set_string(namespace_key(".segment.#{name}.till"), last_change) end |
#used_segment_names ⇒ Object
49 50 51 |
# File 'lib/splitclient-rb/cache/repositories/segments_repository.rb', line 49 def used_segment_names @adapter.get_set(namespace_key('.segments.registered')) end |