Class: Kickplan::Adapters::Memory
Instance Attribute Summary
#config
Instance Method Summary
collapse
for, #initialize
included, #memoize, #synchronize, #unset
Instance Method Details
#accounts ⇒ Object
This method is part of a private API.
You should avoid using this method if possible, as it may be removed or be changed in the future.
59
60
61
|
# File 'lib/kickplan/adapters/memory.rb', line 59
def accounts
memoize { Concurrent::Map.new }
end
|
6
7
8
9
10
11
|
# File 'lib/kickplan/adapters/memory.rb', line 6
def configure_account(params)
accounts.merge_pair(params.key, params) do |existing|
existing.merge(params)
end
true
end
|
13
14
15
16
|
# File 'lib/kickplan/adapters/memory.rb', line 13
def configure_feature(params)
features.put(params.key, params)
true
end
|
#features ⇒ Object
This method is part of a private API.
You should avoid using this method if possible, as it may be removed or be changed in the future.
64
65
66
|
# File 'lib/kickplan/adapters/memory.rb', line 64
def features
memoize { Concurrent::Map.new }
end
|
#metrics ⇒ Object
This method is part of a private API.
You should avoid using this method if possible, as it may be removed or be changed in the future.
69
70
71
|
# File 'lib/kickplan/adapters/memory.rb', line 69
def metrics
memoize { Concurrent::Map.new }
end
|
#resolve_feature(key, params) ⇒ Object
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# File 'lib/kickplan/adapters/memory.rb', line 18
def resolve_feature(key, params)
feature = features.get(key) ||
fail(ClientError, "Feature \"#{key}\" was not found")
account = accounts.get(params.context&.account_key)
variant = resolve_variant(feature, account)
{ key: key, value: feature.variants[variant] }.tap do |response|
break response unless params.detailed
response.merge!(
metadata: { "name" => feature.name },
variant: variant
)
end
end
|
#resolve_features(params) ⇒ Object
35
36
37
38
39
|
# File 'lib/kickplan/adapters/memory.rb', line 35
def resolve_features(params)
features.keys.map do |key|
resolve_feature(key, params)
end
end
|
#update_metric(params) ⇒ Object
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/kickplan/adapters/memory.rb', line 41
def update_metric(params)
lookup_key = [params.key, params.context.account_key].join(".")
current_value = metrics[lookup_key] || 0
new_value =
case params.action
when "set"
params.value
when "increment"
current_value + params.value
when "decrement"
current_value - params.value
end
metrics[lookup_key] = new_value
end
|