Class: LaunchDarkly::InMemoryFeatureStore

Inherits:
Object
  • Object
show all
Defined in:
lib/ldclient-rb/in_memory_store.rb

Overview

Default implementation of the LaunchDarkly client’s feature store, using an in-memory cache. This object holds feature flags and related data received from the streaming API.

Instance Method Summary collapse

Constructor Details

#initializeInMemoryFeatureStore

Returns a new instance of InMemoryFeatureStore.



23
24
25
26
27
# File 'lib/ldclient-rb/in_memory_store.rb', line 23

def initialize
  @items = Hash.new
  @lock = Concurrent::ReadWriteLock.new
  @initialized = Concurrent::AtomicBoolean.new(false)
end

Instance Method Details

#all(kind) ⇒ Object



37
38
39
40
41
42
# File 'lib/ldclient-rb/in_memory_store.rb', line 37

def all(kind)
  @lock.with_read_lock do
    coll = @items[kind]
    (coll.nil? ? Hash.new : coll).select { |_k, f| not f[:deleted] }
  end
end

#delete(kind, key, version) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/ldclient-rb/in_memory_store.rb', line 44

def delete(kind, key, version)
  @lock.with_write_lock do
    coll = @items[kind]
    if coll.nil?
      coll = Hash.new
      @items[kind] = coll
    end
    old = coll[key.to_sym]

    if old.nil? || old[:version] < version
      coll[key.to_sym] = { deleted: true, version: version }
    end
  end
end

#get(kind, key) ⇒ Object



29
30
31
32
33
34
35
# File 'lib/ldclient-rb/in_memory_store.rb', line 29

def get(kind, key)
  @lock.with_read_lock do
    coll = @items[kind]
    f = coll.nil? ? nil : coll[key.to_sym]
    (f.nil? || f[:deleted]) ? nil : f
  end
end

#init(all_data) ⇒ Object



59
60
61
62
63
64
# File 'lib/ldclient-rb/in_memory_store.rb', line 59

def init(all_data)
  @lock.with_write_lock do
    @items.replace(all_data)
    @initialized.make_true
  end
end

#initialized?Boolean

Returns:

  • (Boolean)


81
82
83
# File 'lib/ldclient-rb/in_memory_store.rb', line 81

def initialized?
  @initialized.value
end

#stopObject



85
86
87
# File 'lib/ldclient-rb/in_memory_store.rb', line 85

def stop
  # nothing to do
end

#upsert(kind, item) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'lib/ldclient-rb/in_memory_store.rb', line 66

def upsert(kind, item)
  @lock.with_write_lock do
    coll = @items[kind]
    if coll.nil?
      coll = Hash.new
      @items[kind] = coll
    end
    old = coll[item[:key].to_sym]

    if old.nil? || old[:version] < item[:version]
      coll[item[:key].to_sym] = item
    end
  end
end