Class: Prefab::ConfigResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/prefab/config_resolver.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(base_client, config_loader) ⇒ ConfigResolver

Returns a new instance of ConfigResolver.



10
11
12
13
14
15
16
17
18
19
# File 'lib/prefab/config_resolver.rb', line 10

def initialize(base_client, config_loader)
  @lock = Concurrent::ReadWriteLock.new
  @local_store = {}
  @config_loader = config_loader
  @project_env_id = 0 # we don't know this yet, it is set from the API results
  @base_client = base_client
  @on_update = nil
  @default_context = {}
  make_local
end

Instance Attribute Details

#default_contextObject

Returns the value of attribute default_context.



8
9
10
# File 'lib/prefab/config_resolver.rb', line 8

def default_context
  @default_context
end

#local_storeObject (readonly)

Returns the value of attribute local_store.



6
7
8
# File 'lib/prefab/config_resolver.rb', line 6

def local_store
  @local_store
end

#project_env_idObject

this will be set by the config_client when it gets an API response



5
6
7
# File 'lib/prefab/config_resolver.rb', line 5

def project_env_id
  @project_env_id
end

Instance Method Details

#evaluate(config, properties = NO_DEFAULT_PROVIDED) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/prefab/config_resolver.rb', line 43

def evaluate(config, properties = NO_DEFAULT_PROVIDED)
  Prefab::CriteriaEvaluator.new(config,
                                project_env_id: @project_env_id,
                                resolver: self,
                                namespace: @base_client.options.namespace,
                                base_client: @base_client).evaluate(make_context(properties))
end

#get(key, properties = NO_DEFAULT_PROVIDED) ⇒ Object



33
34
35
36
37
38
39
40
41
# File 'lib/prefab/config_resolver.rb', line 33

def get(key, properties = NO_DEFAULT_PROVIDED)
  @lock.with_read_lock do
    raw_config = raw(key)

    return nil unless raw_config

    evaluate(raw_config, properties)
  end
end

#make_context(properties) ⇒ Object



61
62
63
64
65
66
67
68
69
# File 'lib/prefab/config_resolver.rb', line 61

def make_context(properties)
  if properties == NO_DEFAULT_PROVIDED || properties.nil?
    Context.current
  elsif properties.is_a?(Context)
    properties
  else
    Context.merge_with_current(properties)
  end.merge_default(default_context || {})
end

#on_update(&block) ⇒ Object



57
58
59
# File 'lib/prefab/config_resolver.rb', line 57

def on_update(&block)
  @on_update = block
end

#presenterObject



25
26
27
# File 'lib/prefab/config_resolver.rb', line 25

def presenter
  Prefab::ResolvedConfigPresenter.new(self, @lock, @local_store)
end

#raw(key) ⇒ Object



29
30
31
# File 'lib/prefab/config_resolver.rb', line 29

def raw(key)
  @local_store.dig(key, :config)
end

#to_sObject



21
22
23
# File 'lib/prefab/config_resolver.rb', line 21

def to_s
  presenter.to_s
end

#updateObject



51
52
53
54
55
# File 'lib/prefab/config_resolver.rb', line 51

def update
  make_local

  @on_update ? @on_update.call : nil
end