Class: Flipper::Adapters::Memoizable

Inherits:
Decorator show all
Defined in:
lib/flipper/adapters/memoizable.rb

Constant Summary collapse

FeaturesKey =
:flipper_features

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(adapter) ⇒ Memoizable

Public



25
26
27
# File 'lib/flipper/adapters/memoizable.rb', line 25

def initialize(adapter)
  super(adapter)
end

Class Method Details

.cacheObject

Internal



9
10
11
# File 'lib/flipper/adapters/memoizable.rb', line 9

def self.cache
  Thread.current[:flipper_memoize_cache] ||= {}
end

.memoize=(value) ⇒ Object

Internal



19
20
21
22
# File 'lib/flipper/adapters/memoizable.rb', line 19

def self.memoize=(value)
  cache.clear
  Thread.current[:flipper_memoize] = value
end

.memoizing?Boolean

Internal

Returns:

  • (Boolean)


14
15
16
# File 'lib/flipper/adapters/memoizable.rb', line 14

def self.memoizing?
  !!Thread.current[:flipper_memoize]
end

Instance Method Details

#add(feature) ⇒ Object

Public



41
42
43
44
45
# File 'lib/flipper/adapters/memoizable.rb', line 41

def add(feature)
  result = super
  cache.delete(FeaturesKey) if memoizing?
  result
end

#cacheObject

Internal



88
89
90
# File 'lib/flipper/adapters/memoizable.rb', line 88

def cache
  self.class.cache
end

#clear(feature) ⇒ Object

Public



58
59
60
61
62
# File 'lib/flipper/adapters/memoizable.rb', line 58

def clear(feature)
  result = super
  cache.delete(feature) if memoizing?
  result
end

#disable(feature, gate, thing) ⇒ Object

Public



81
82
83
84
85
# File 'lib/flipper/adapters/memoizable.rb', line 81

def disable(feature, gate, thing)
  result = super
  cache.delete(feature) if memoizing?
  result
end

#enable(feature, gate, thing) ⇒ Object

Public



74
75
76
77
78
# File 'lib/flipper/adapters/memoizable.rb', line 74

def enable(feature, gate, thing)
  result = super
  cache.delete(feature) if memoizing?
  result
end

#featuresObject

Public



30
31
32
33
34
35
36
37
38
# File 'lib/flipper/adapters/memoizable.rb', line 30

def features
  if memoizing?
    cache.fetch(FeaturesKey) {
      cache[FeaturesKey] = super
    }
  else
    super
  end
end

#get(feature) ⇒ Object

Public



65
66
67
68
69
70
71
# File 'lib/flipper/adapters/memoizable.rb', line 65

def get(feature)
  if memoizing?
    cache.fetch(feature) { cache[feature] = super }
  else
    super
  end
end

#memoize=(value) ⇒ Object

Internal: Turns local caching on/off.

value - The Boolean that decides if local caching is on.



95
96
97
# File 'lib/flipper/adapters/memoizable.rb', line 95

def memoize=(value)
  self.class.memoize = value
end

#memoizing?Boolean

Internal: Returns true for using local cache, false for not.

Returns:

  • (Boolean)


100
101
102
# File 'lib/flipper/adapters/memoizable.rb', line 100

def memoizing?
  self.class.memoizing?
end

#remove(feature) ⇒ Object

Public



48
49
50
51
52
53
54
55
# File 'lib/flipper/adapters/memoizable.rb', line 48

def remove(feature)
  result = super
  if memoizing?
    cache.delete(FeaturesKey)
    cache.delete(feature)
  end
  result
end