Class: Kickplan::Adapters::Memory

Inherits:
Kickplan::Adapter show all
Defined in:
lib/kickplan/adapters/memory.rb

Instance Attribute Summary

Attributes inherited from Kickplan::Adapter

#config

Instance Method Summary collapse

Methods inherited from Kickplan::Adapter

for, #initialize

Methods included from Concurrency

included, #memoize, #synchronize, #unset

Constructor Details

This class inherits a constructor from Kickplan::Adapter

Instance Method Details

#accountsObject

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

#configure_account(params) ⇒ Object



6
7
8
9
10
11
# File 'lib/kickplan/adapters/memory.rb', line 6

def (params)
  accounts.merge_pair(params.key, params) do |existing|
    existing.merge(params)
  end
  true
end

#configure_feature(params) ⇒ Object



13
14
15
16
# File 'lib/kickplan/adapters/memory.rb', line 13

def configure_feature(params)
  features.put(params.key, params)
  true
end

#featuresObject

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

#metricsObject

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")

   = accounts.get(params.context&.)
  variant = resolve_variant(feature, )

  { 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.].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