Class: SplitIoClient::Cache::Repositories::SegmentsRepository

Inherits:
SplitIoClient::Cache::Repository show all
Defined in:
lib/splitclient-rb/cache/repositories/segments_repository.rb

Constant Summary collapse

KEYS_SLICE =
3000

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from SplitIoClient::Cache::Repository

#set_string, #string

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

#adapterObject (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

#clearObject



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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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_countObject



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_countObject



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_namesObject



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